2010-02-28 28 views
34

La última semana Tropecé con this paper donde los autores mencionan en la segunda página:¿Hay un algoritmo de ordenamiento de enteros O (n)?

Tenga en cuenta que esto produce un tiempo lineal candidato a pesos de las aristas enteros.

El mismo en la tercera página:

Esto produce un tiempo de funcionamiento lineal para pesos de las aristas enteros y O (m log n) para la clasificación basada en la comparación.

Y en la página 8 de:

En particular, el uso de la clasificación rápida entero probablemente se aceleraría considerablemente GPA.

¿Quiere decir esto que hay un O (n) algoritmo de ordenación en circunstancias especiales para valores enteros? ¿O es esto una especialidad de la teoría de grafos?

PS:
Podría ser que la referencia [3] puede ser útil porque en la primera página que dicen: se han logrado

Otras mejoras de [..] clases de gráficos, tales como número entero pesas de borde [3], [...]

pero no tuve acceso a ninguna de las revistas científicas.

+1

ver por qué circunstancias especiales pueden ayudar, considere el caso de la clasificación de un millón de números enteros entre 0 y 9. Usted puede simplemente contar el número de cada dígitos que hay, y luego simplemente coloque los dígitos en el orden correcto en función de sus recuentos. Esta es la base del conteo de género. – polygenelubricants

+0

gracias a todos! Aprendí mucho. Vea aquí algunos de los puntos de referencia de Java que inventé en esta pregunta: http://karussell.wordpress.com/2010/03/01/fast-integer-sorting-algorithm-on/ – Karussell

+0

Hice uno de estos como una broma (http : //tinylittlelife.org/? p = 261). Para estropear el punchline, logra esto tratando la entrada como una matriz de bits en lugar de bytes y "ordenándola" en el formato '000000111111'. – Ian

Respuesta

47

Sí, radix clasificar y contar tipo son O(N). NO son géneros basados ​​en comparación, que se ha demostrado que tienen Ω(N log N) límite inferior.

Para ser precisos, el orden de radix es O(kN), donde k es el número de dígitos en los valores que se ordenarán. Contando especie es O(N + k), donde k es el rango de los números para ser ordenados.

hay aplicaciones específicas donde k es lo suficientemente pequeño que tanto radix clasificar y contar tipo exhibir un rendimiento en tiempo lineal en la práctica.

+19

Los límites inferiores siempre se expresan como Ω. Decir un límite inferior O no tiene ningún significado semántico. De lo contrario +1. –

+0

Gracias por la corrección =) – polygenelubricants

+1

Son solo 'O (n)' si el mayor valor posible de los enteros es menor que o igual a n; de lo contrario, son 'O (max_int)', ¿no? – sepp2k

11

tipo comparación debe ser al menos Ω (n log n) en promedio.

Sin embargo, counting sort y radix sort escalan linealmente con tamaño de entrada – porque no son tipos de comparación, explotan la estructura fija de las entradas.

2

Aunque no es muy práctico (debido principalmente a la gran sobrecarga de la memoria), pensé que me gustaría mencionar Abacus (Bead) Sort como otro interesante algoritmo de ordenación del tiempo lineal.

+2

El big-O puede ser atractivo, pero cuando se implementa en el software, [este tipo] (http://stackoverflow.com/a/9027807/10396) funciona aproximadamente 10 veces más lento que el quicksort. – AShelly

0

Añadiendo un poco más de detalle: prácticamente el mejor algoritmo de ordenación hasta la fecha no es O (n), sino 0 (n \ sqrt {\ log \ log n}).

Puede consultar más detalles sobre este algo en el periódico: http://dl.acm.org/citation.cfm?id=652131

Cuestiones relacionadas