No, $O(n\log(n))$ es la más baja teórico obligado (ver (1)) para la selección de la $k^{th}$ elemento entre todos los $\frac{n(n-1)}{2}$$|x_i - x_j|: 1 \leq i \lt j \leq n$.
Usted puede obtener $O(1)$ espacio, pero sólo por ingenuamente la comprobación de todas las combinaciones de $x_i-x_j$ en el tiempo $O(n^2)$.
La buena noticia es que usted puede utilizar los $\tau$ estimador de escala (véase (2) y (3) para una versión mejorada y algo de tiempo comparaciones), implementado en la función
scaleTau2() en la R paquete robustbase. La univariante $\tau$ estimador es una de dos pasos (es decir, re-ponderado) estimador de escala. Tiene 95 por ciento de Gauss de la eficiencia, el 50 por ciento de ruptura de punto, y la complejidad de $O(n)$ tiempo y $O(1)$ espacio (además de que se puede fácilmente ser 'online', a afeitarse la mitad de los costes 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 selección y clasificación en X + Y y matrices con columnas ordenadas
G. N. Frederickson y D. B. Johnson, de Diario de la Computadora y del Sistema de Ciencias de la
Volumen 24, Número 2, Abril De 1982, Páginas 197-208.
- Yohai, V. y Zamar, R. (1988). Ruptura de alto punto de las estimaciones de la regresión por medio de 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 de alta
dimensiones de los conjuntos de datos. Technometrics 44 307-317
Editar el uso De este
- El fuego de R (es gratis y se puede descargar desde aquí)
-
instalar el paquete de inflexión
instalar.paquetes("robustbase")
-
cargar el paquete de inflexión
biblioteca("robustbase")
-
carga el archivo de datos y ejecutar la función:
mydatavector<-read.tabla("dirección a mi archivo en formato de texto",header=T)
scaleTau2(mydatavector)