Atualização: O ponto crucial do problema é que, para alcançar a complexidade de tempo O(nlog(n)) , é necessário na ordem do armazenamento O(n) .
Não, O(nlog(n)) é o limite teórico mais baixo para a complexidade de tempo de (consulte (1)) selecionar o elemento kth entre todos os n(n−1)2 possíveis|xi−xj|:1≤i<j≤n.
Você pode obter espaço O(1) , mas apenas verificando ingenuamente todas as combinações de xi−xj no tempo O(n2) .
A boa notícia é que você pode usar o estimador τ de escala (consulte (2) e (3) para obter uma versão melhorada e algumas comparações de tempo), implementadas na função
scaleTau2()
no R
pacote robustbase
. O estimador univariado τ é um estimador de escala em duas etapas (ou seja, re-ponderado). Possui 95% de eficiência gaussiana, 50% de ponto de interrupção e complexidade de O(n) tempo e O(1) espaço (além de poder ser facilmente on-line), reduzindo metade dos custos computacionais em uso repetido - embora você terá que cavar no R
código para implementar esta opção, é bastante simples de fazer).
- A complexidade da seleção e classificação em X + Y e matrizes com colunas classificadas GN Frederickson e DB Johnson, Journal of Computer and System Sciences Volume 24, Edição 2, abril de 1982, páginas 197-208.
- Yohai, V. e Zamar, R. (1988). Estimativas de regressão de altos pontos de ruptura por meio da minimização de uma escala eficiente. Jornal da Associação Estatística Americana 83 406–413.
- Maronna, R. e Zamar, R. (2002). Estimativas robustas de localização e dispersão para conjuntos de dados de alta dimensão. Technometrics 44 307-317
Editar Para usar isso
- Inicie
R
(é gratuito e pode ser baixado aqui )
- Instale o pacote digitando:
install.packages("robustbase")
- Carregue o pacote digitando:
library("robustbase")
- Carregue seu arquivo de dados e execute a função:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)