Actualización: El quid de la cuestión es que para lograr la complejidad de tiempo O(nlog(n)) , se necesita en el orden de almacenamiento O(n) .
No, O(nlog(n)) es el límite teórico inferior para la complejidad temporal de (ver (1)) seleccionar el elemento kth entre todos los n(n−1)2 posibles|xi−xj|:1≤i<j≤n.
Puede obtener espacio O(1) , pero solo verificando ingenuamente todas las combinaciones de xi−xj en el tiempo O(n2) .
La buena noticia es que puede usar el estimador de escala τ (consulte (2) y (3) para obtener una versión mejorada y algunas comparaciones de temporización), implementado en la función
scaleTau2()
del R
paquete robustbase
. El estimador τ univariado es un estimador de escala de dos pasos (es decir, re-ponderado). Tiene una eficiencia gaussiana del 95 por ciento, un punto de ruptura del 50 por ciento y la complejidad del tiempo O ( n ) y el espacio O ( 1 ) (además se puede hacer fácilmente 'en línea', reduciendo la mitad de los costos computacionales en uso repetido, aunque usted tendrá que cavar en el R
código para implementar esta opción, es bastante sencillo de hacer).
- La complejidad de la selección y clasificación en X + Y y matrices con columnas ordenadas GN Frederickson y DB Johnson, Journal of Computer and System Sciences Volume 24, Issue 2, April 1982, páginas 197-208.
- Yohai, V. y Zamar, R. (1988). Estimaciones de regresión de alto punto de ruptura mediante la minimización de una escala eficiente. Revista de la Asociación Americana de Estadística 83 406–413.
- Maronna, R. y Zamar, R. (2002). Estimaciones sólidas de ubicación y dispersión para conjuntos de datos de alta dimensión. Technometrics 44 307–317
Editar Para usar esto
- Arranca
R
(es gratis y se puede descargar desde aquí )
- Instale el paquete escribiendo:
install.packages("robustbase")
- Cargue el paquete escribiendo:
library("robustbase")
- Cargue su archivo de datos y ejecute la función:
mydatavector <- read.table("address to my file in text format", header=T)
scaleTau2(mydatavector)