Han's

38

¿Alguien está familiarizado con el algoritmo de clasificación de enteros Yijie Han ? Este resultado aparece en un artículo bastante corto ( Clasificación determinista en tiempo O ( n log log n ) y espacio lineal . J. Alg. 50: 96–105, 2004) que básicamente reúne muchos resultados anteriores, con adaptaciones adecuadas. Mi problema es que está escrito de una manera bastante agitada sin profundizar en detalles. Se basa en gran medida en documentos anteriores, destacando entre ellos otro artículo de Han ( clasificación de números enteros rápida mejorada en espacio linealO(norteIniciar sesiónIniciar sesiónnorte)O(norteIniciar sesiónIniciar sesiónnorte). Information and Computation 170 (1): 81–94) escrito en el mismo estilo. Tengo dificultades significativas para comprender estos dos documentos, particularmente la forma en que se adaptan y usan los resultados anteriores. Apreciaría cualquier ayuda.

Por supuesto, esto es demasiado amplio y vago para ser considerado una pregunta adecuada, pero espero desarrollar una discusión a través de varias preguntas y respuestas bien definidas.

Para comenzar, aquí está mi primera pregunta específica. En el Lema 2 de la Información. Comp. En el documento hay un algoritmo de tiempo recursivo para encontrar el enésimo número entero más pequeño en un conjunto de n enteros pequeños empaquetados k cada uno en palabras RAM. La descripción del algoritmo no menciona cómo se maneja el caso base k = O ( n ) . En este caso se requiere hacer la selección en tiempo O ( log k ) . ¿Cómo se puede hacer esto?O(norte/ /kIniciar sesiónk)nortekk=O(norte)O(Iniciar sesiónk)

Ari
fuente
13
Sería perfectamente apropiado escribirle: [email protected].
Joseph O'Rourke
Sí. Hemos discutido este problema general antes, y la forma correcta de abordarlo es enviar un correo electrónico al autor.
Suresh Venkat
17
Esto incluye una pregunta específica sobre un documento que tiene 7 años y que ya pasó por el proceso de revisión por pares. Si bien Ari podría enviar un correo electrónico al autor, esta parece ser una pregunta ideal para este sitio. No entiendo la desviación.
Huck Bennett
18
Por supuesto, lo primero que hice fue escribir a Han. Sin respuesta. Luego contacté a alguien más que había hecho una investigación de clasificación de enteros, y dijo que, al leerlo, había encontrado que los documentos eran demasiado desordenados para merecer una mayor inversión de su tiempo. Ahí fue cuando vine aquí. Si hay alguien por ahí que conozca a Han y pueda llamar su atención en mi nombre, eso también sería genial.
Ari
44
La clasificación general no tiene un límite inferior . Todo lo contrario: se clasifica restringido a las comparaciones que tienen este límite. El problema aquí no es restringir la entrada, sino mejorar el modelo computacional. Mi modelo computacional es cualquiera de los sabores de RAM de costo unitario, y permitiré cualquier suposición razonable (como la disponibilidad de constantes que dependen de la longitud de la palabra). Ω(norteIniciar sesiónnorte)
Ari

Respuestas:

18

Me preguntaba lo mismo.

Afortunadamente, pude encontrar un artículo de revista publicado en 2011 que explica esto mismo; además, no necesita una suscripción para verlo: Implementación y análisis de rendimiento de la ordenación exponencial de árboles

Recomiendo leer el artículo completo para aprender cómo se puede implementar y comprender mejor su teoría subyacente. También muestra cómo los árboles exponenciales se comparan con los árboles binarios y de clasificación rápida. Aquí está el extracto relevante relacionado con el tiempo de Han , espacio lineal, algoritmo de clasificación de enterosO(norteIniciar sesiónIniciar sesiónnorte) :

Yijie Han ha dado una idea que reduce la complejidad al tiempo esperado en el espacio lineal. [6] La técnica utilizada por él es la transmisión coordinada de números enteros en el árbol de búsqueda exponencial de Anderson [8] y la división lineal en el tiempo de los bits de los números enteros. En lugar de insertar un número entero a la vez en el árbol de búsqueda exponencial, pasó todos los números enteros un nivel del árbol de búsqueda exponencial a la vez. Tal transferencia coordinada brinda la posibilidad de realizar múltiples divisiones en tiempo lineal y, por lo tanto, acelerar el algoritmo. Esta idea puede acelerar, pero en la implementación práctica es muy difícil manejar enteros en lotes.

[6] Y. Han, clasificación determinista en O (n log log n) tiempo y espacio lineal, 34 ° STOC, 2002.

[8] A. Andersson, clasificación y búsqueda deterministas rápidas en el espacio lineal, Simposio IEEE sobre Fundamentos de Ciencias de la Computación, 1996.

A
fuente
¿Por qué el voto negativo?
Suresh Venkat
1
Acabo de agregar este enlace de artículo de revista a la página de Wikipedia de árbol exponencial . FYI: Este artículo podría haber sido publicado después de que se hizo la pregunta.
AT
@AT, ¿podría ampliar un poco su respuesta y explicar cómo responde la pregunta? En este momento, lo único que da es un enlace a un artículo en alguna revista.
Kaveh
1
Bueno, ya me he rendido con el papel de Han, así que me alegro de que hayas podido proporcionar esta ayuda. Realmente no esperaba ver nada cuando volví aquí hoy. ¡Gracias! Leeré este nuevo documento y veré si me ayuda a progresar en el papel de Han.
Ari
2
Bueno, ahora lo he leído, y permitiré que posiblemente lo haya malinterpretado por completo, pero salvo eso, parece haber un pequeño problema. Los autores afirman que su árbol tiene altura O , pero si el árbol tiene altura h , entonces tiene ( h + 1 ) . hojas, y por lo tanto menos de 2 ( h + 1 ) ! nodos en total. Asumamos generosamente que cada nodo tiene teclas h + 2 . Entonces el árbol contiene menos de 2 ( h + 2 )(Iniciar sesiónIniciar sesiónnorte)h(h+1)!2(h+1)!h+2llaves. Si 2 ( h + 2 ) ! = n entonces h = Ω ( log n / log log n ) . De todos modos, incluso si los autores son correctos, no logran laclasificaciónO ( log log n ) , ni explican a Han, por lo que no es útil. 2(h+2)!2(h+2)!=norteh=Ω(Iniciar sesiónnorte/ /Iniciar sesiónIniciar sesiónnorte)(Iniciar sesiónIniciar sesiónnorte)
Ari
1

No estoy seguro de la respuesta (no he revisado el documento) pero creo que esto debería ayudar. Los números se agrupan en una sola palabra, por lo que las operaciones en una sola palabra toman O (1) tiempo. Si hay, digamos, k números de h bits cada uno, entonces el tamaño de la palabra depende de k, h que a su vez también depende del rango de números. Por lo tanto, utilizamos técnicas de reducción de rango que pueden reducir el rango de números para que muchos números quepan en una sola palabra. Luego, creando máscaras de bits adecuadas, podemos encontrar enteros más grandes separados de los más cortos considerando dos palabras a la vez. Esto se puede hacer en O (1) tiempo. (Ontuición: para esto, cada número almacenado en la palabra tiene un bit indicador asociado y luego restamos dos palabras ... si el bit indicador desaparece, entonces es un número menor).

De manera similar, utilizando el anterior también podemos ordenar cualquier palabra que contenga k números en el tiempo O (log k) (ordenación bitónica).

Editar: Algoritmo para ordenar 2k números en el rango de 0 a m-1 empaquetados en una palabra donde cada número toma el tamaño L de = log (m + k) +2.

sea ​​1: 000000 1: 000000 1: 000000 1: 000000 ....... etc., donde el bit antes de los dos puntos también se llama bit indicador y cada secuencia tiene una longitud de L bits y se repite 2k veces en la palabra K_1 (Colon es solo para entender)K1

es (2k-1) (2k-2) .... 1 escrito en binario. Bosquejo del algoritmo:K2

Repita para t = log k a 0.

Parte 1: separe la palabra original Z en dos palabras A y B.

  1. Sea T obteniendo desplazando , (posiciones L-1-t) a la izquierda y ANDing el resultado con K 1 . Deje M = T- (T desplazado L-1 lugares).K2K1

  2. 2tL

  3. B = Z- (Z&M).

Parte 2

  1. K1K1

  2. M = M- (M desplazado a la izquierda L-1 lugares).

  3. MIN = (B&M) OR (A- (A&M))

  4. MAX = (A&M) OR (B- (B&M))

  5. 2tL

  6. Finalmente apropiadamente ORing MAX y MIN regresamos Z.

He dado el boceto, espero que pueda completar los detalles necesarios requeridos.

Singhsumit
fuente
No tengo claro lo que estás sugiriendo. La suposición es que los enteros ya son pequeños yk de ellos ya están empaquetados en una sola palabra. ¿Estás proponiendo reducir aún más su tamaño? Si es así, ¿qué haces entonces? Además, sé cómo ordenar una secuencia bitónica empaquetada en una sola palabra en tiempo O (log k), o ordenar una secuencia general (no bitónica) en tiempo O (log ^ 2 k). Si conoce un algoritmo que ordena una secuencia general en el tiempo O (log k), ¿podría describirlo con más detalle? (Tal algoritmo, por supuesto, resolvería el problema de selección.)
Ari
No estoy reduciendo aún más el tamaño, estaba sugiriendo cómo reducir el tamaño que no era necesario en su respuesta. Perdón por la confusion.
singhsumit
A menos que lo haya entendido mal, este parece el algoritmo para ordenar secuencias bitónicas. No ordena secuencias generales. Por ejemplo, ¿ordena la secuencia 3,0,2,0, donde el 3 está en el campo más a la izquierda (más significativo)?
Ari
3 0 2 0 se separa n obtenemos A = 3 2 y B = 0 0 luego MAX se convierte en 3 2 y MIN es 0 0. Luego tenemos una nueva Z como 3 2 0 0. Cualquier secuencia general tiene una secuencia bitónica de tamaño 2. con cada iteración estos tamaños se duplican y finalmente en el tiempo log k tenemos nuestra respuesta.
singhsumit
No. Los números no se compactan, solo se desplazan hacia abajo. En la primera iteración, dividimos pares de números que difieren en el bit alto de su posición, por lo que obtenemos A = 0 3 0 2 y B = 0 0 0 0, entonces MIN = 0 0 0 0, MAX = 0 3 0 2, y Z = 3 0 2 0. En la segunda iteración dividimos pares que difieren en el bit bajo de su posición, por lo que nuevamente obtenemos A = 0 3 0 2, B = 0 0 0 0, y nuevamente Z permanece sin cambios.
Ari