En la clasificación por radix primero ordenamos por el dígito menos significativo, luego ordenamos por el segundo dígito menos significativo y así sucesivamente, y terminamos con una lista ordenada.
Ahora, si tenemos una lista de números, necesitamos bits para distinguir entre esos números. Así número de radix pasa especie hacemos será . Cada pase lleva tiempo y, por lo tanto, el tiempo de ejecución de la clasificación de radix es
Pero es bien sabido que es un algoritmo de tiempo lineal. ¿Por qué?
algorithms
sorting
Pratik Deoghare
fuente
fuente
Respuestas:
No: si tenemos una lista de números entre y 2 k - 1 , necesitamos k bits. No hay relación entre k y log n en general.0 2k−1 k k logn
Si todos los números son distintos, entonces , y la clasificación por radix en números distintos tiene una complejidad temporal de Ω ( n log n ) . En general, la complejidad de la clasificación de radix es Θ ( nlogn≥k Ω(nlogn) donde n es el número de elementos para ordenar yk es el número de bits en cada elemento.Θ(nk) n k
Decir que la complejidad de la clasificación de radix es significa tomar un tamaño de bit fijo para los números. Esto implica que para n suficientemente grande , habrá muchos valores duplicados.O(n) n
Existe un teorema general de que un método de ordenación de matriz o lista que funciona comparando dos elementos a la vez no puede ejecutarse más rápido que en el peor de los casos. La clasificación por radix no funciona comparando elementos, pero funciona el mismo método de prueba. La clasificación por radix es un proceso de decisión para determinar qué permutación se aplicará a la matriz; hay n ! permutaciones de la matriz, y la ordenación por radix toma decisiones binarias, es decir, decide si intercambia dos elementos o no en cada etapa. Después de m decisiones binarias, la clasificación de radix puede decidir entre 2 m de permutaciones. Para llegar a la n ! posibles permutaciones, es necesario queΘ(nlogn) n! m 2m n! .m≥log(n!)=Θ(nlogn)
Una suposición en la prueba de que no escribí anteriormente es que el algoritmo debe funcionar en el caso cuando los elementos son distintos. Si se sabe a priori que los elementos no son todos distintos, entonces el número de permutaciones potenciales es menor que la completa . . Al ordenar números de k bits, solo es posible tener n elementos distintos cuando n ≤ 2 k ; en ese caso, la complejidad de la clasificación de radix es de hecho Ω ( n log n ) . Para valores mayores de n , debe haber colisiones, lo que explica cómo la ordenación de radix puede tener una complejidad menor que Θ (n! k n n≤2k Ω(nlogn) n cuando n > 2 k .Θ(nlogn) n>2k
fuente
Tenga cuidado con su análisis: ¿qué supone que realiza la clasificación en tiempo ? Esto se debe a que cada uno de sus dígitos está en un rango de 0 a k - 1 , lo que significa que sus dígitos pueden tomar k posibles valores. Necesita un algoritmo de ordenación estable, por lo que puede, por ejemplo, elegir la ordenación de conteo. El recuento se ejecuta enO(n) 0 k−1 k . Si k = O ( n ) , la ordenación de conteo se ejecuta en tiempo lineal.Θ(n+k) k=O(n)
Cada una de sus cadenas o números tiene dígitos. Como dices, haces d pases sobre ellos. Por lo tanto, la ordenación de la raíz se ejecuta claramente en el tiempo Θ ( d ( n + k ) ) . Pero si consideramos que d es constante yk = O ( n ) , vemos que la ordenación por radix se ejecuta en tiempo lineal.d d Θ(d(n+k)) d k=O(n)
fuente
Creo que la suposición está mal. Puede realizar la clasificación de radix con números en, por ejemplo, hexadecimal. Por lo tanto, en cada paso divide su conjunto de números en 16 cubos.k=log2(n) 16
fuente