Algoritmo de clasificación, de modo que cada elemento se compara


39

¿Hay algún algoritmo de clasificación de comparación conocido que no se reduzca a redes de clasificación, de modo que cada elemento se compare O(logn) veces?

Hasta donde sé, la única forma de ordenar con la comparación en cada elemento es construir una red de clasificación AKS para nO(logn)n entradas, y ejecutar la entrada en la red de clasificación.

AKS no es fácil de implementar y tiene un factor constante poco práctico, por lo que existen motivaciones para buscar otros algoritmos.

Aquí se presenta un algoritmo con comparaciones por ítem que no parece implicar una red de clasificación . (IIRC, esto fue presentado por primera vez por Rob Johnson en el seminario de algoritmos de Stony Brook).O(log2n)


2
No entiendo la pregunta: muchos algoritmos secuenciales parecen corresponder a su solicitud. por ejemplo, la combinación de clasificación es un algoritmo de clasificación clásico, y no hace más que comparación por elemento. ¿Tal vez estás preguntando acerca de los algoritmos de clasificación paralela ? logn
Jeremy

44
@Jeremy: Si combina dos listas, y ( b 1 , . . . , B n ) , se puede terminar la comparación de un 1 contra cada uno de b 1 , . . . , b n , es decir, Ω ( n ) comparaciones por elemento. Y este fue solo un paso de "fusión". Por supuesto el promedio(a1,...,an)(b1,...,bn)a1b1,...,bnΩ(n) número de comparaciones es necesariamente pequeño, pero la pregunta es sobre la complejidad del peor de los casos .
Jukka Suomela

66
Creo que eso es posible. Las redes de clasificación son ajenas a los datos y tienen una forma predeterminada de comparaciones, pero un algoritmo de clasificación podría elegir entre diferentes conjuntos de operaciones dependiendo de los datos. Se puede modificar la combinación de clasificación en un algoritmo con comparación para cada elemento, y no parece implicar una red de clasificación reddit.com/comments/9jqsi/…O(log2n)
Chao Xu

1
Jukka: Gracias, entiendo tu punto. Pero eso es solo cuando se usa la fusión ingenua: se puede fusionar con ( b 1 , ... , b n ) usando la búsqueda de duplicación para colocar cada elemento, que sigue siendo n comparaciones en total en el peor de los casos, pero lg n comparaciones por elemento al máximo, lo que produce la versión de fusión aludida por Chao. (a1,,an)(b1,,bn)nlgn
Jeremy

2
Ahora hay una nueva pregunta relacionada (pero con suerte mucho más fácil): cstheory.stackexchange.com/questions/8073/…
Jukka Suomela

Respuestas:


17

Al discutir esto con Michael T. Goodrich, parece que el algoritmo de clasificación paralela de Cole para EREW PRAM hace el trabajo. Ver

En ese algoritmo hay rondas y en cada ronda cada elemento participa en comparaciones O ( 1 ) . (Uno tiene que entender el algoritmo para ver que no abusamos de hacer copias de cada elemento).O(logn)O(1)

Una extensión de ese algoritmo para la máquina de puntero paralelo se da en


¡Nos gustaría saber quién eres! : D
Tayfun paga el

@alguien es Sergio Cabello
alguien

O(logn)O(logn)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.