Deje para que para una muestra muy corta como se pueda calcular de encontrar el orden estático de las diferencias por pares: { 1 , 3 , 6 , 2 , 7 , 5 } k
7 6 5 3 2 1
1 6 5 4 2 1
2 5 4 3 1
3 4 3 2
5 2 1
6 1
7
h = [n / 2] + 1 = 4
k = h (h-1) / 2 = 8
Así
Obviamente, para muestras grandes que constan de 80,000 registros, necesitamos memoria muy grande.
¿Hay alguna forma de calcular en el espacio 1D en lugar de 2D?
Un enlace a la respuesta ftp://ftp.win.ua.ac.be/pub/preprints/92/Timeff92.pdf aunque no puedo entenderlo completamente.
Respuestas:
Actualización: El quid de la cuestión es que para lograr la complejidad de tiempoO(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 espacioO(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
τ 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
scaleTau2()
delR
paqueterobustbase
. El estimadorR
código para implementar esta opción, es bastante sencillo de hacer).Editar Para usar esto
R
(es gratis y se puede descargar desde aquí )fuente
(Respuesta muy corta) El texto para comentar dice
así que aquí va: hay un documento sobre un algoritmo en línea que aparentemente funciona bastante bien: aplicando el estimador líneaQn .
EDITAR
(por el usuario user603). El algoritmo vinculado a este artículo es una versión en versión de ventana móvil de .Qn
fuente
esta es mi implementación de Qn ...
Estaba programando esto en C y el resultado es este:
fuente