¿Por qué el Randomized Quicksort tiene O (n log n) el peor costo de tiempo de ejecución


18

La ordenación rápida aleatoria es una extensión de la ordenación rápida en la que el elemento pivote se elige aleatoriamente. ¿Cuál puede ser la peor complejidad de tiempo de este algoritmo? Según yo, debería ser , ya que el peor de los casos ocurre cuando el pivote elegido al azar se selecciona en orden ordenado o en orden inverso . Pero en algunos textos [1] [2] su peor complejidad de tiempo se escribe comoO(n2)O(norteIniciar sesiónnorte)

Que es correcto


3
Deberías este "texto" del que estás hablando. Hay algo escondido allí. Lo encontrará si vuelve a leer este "texto"
AJed

Nota: el enlace [1] está muerto. El enlace [2] establece claramente que el algoritmo es aleatorio, por lo que para cualquier entrada no tiene "un tiempo de ejecución", sino "un tiempo de ejecución esperado". Y el tiempo de ejecución esperado para la peor entrada posible es O (n log n).
gnasher729

Respuestas:


18

Ambas fuentes hacen referencia al "peor tiempo de ejecución esperado" de Supongo que esto se refiere al requisito de tiempo esperado, que difiere del peor de los casos.O(nlogn).

Quicksort generalmente tiene un requisito absoluto de tiempo en el peor de los casos de . El peor caso se produce cuando, a cada paso, el procedimiento de partición divide una n array -Longitud en matrices de tamaño 1 y n - 1 . Esta selección "desafortunada" de elementos dinámicos requiere llamadas recursivas O ( n ) , lo que lleva a un peor caso O ( n 2 ) .O(n2)n1n1O(n)O(n2)

Elegir el pivote aleatoriamente o barajar aleatoriamente la matriz antes de ordenar tiene el efecto de hacer que el peor de los casos sea muy improbable, particularmente para matrices grandes. Ver Wikipedia para una prueba de que la esperada requisito de tiempo es . Según otra fuente , "la probabilidad de que quicksort use un número cuadrático de comparaciones al ordenar una gran matriz en su computadora es mucho menor que la probabilidad de que su computadora sea golpeada por un rayo".O(nlogn)

Editar:

Según el comentario de Bangye, puede eliminar la secuencia de selección de pivote en el peor de los casos seleccionando siempre el elemento mediano como pivote. Dado que encontrar la mediana toma tiempo, esto da Θ ( n log n ) en el peor de los casos. Sin embargo, dado que es muy poco probable que la clasificación rápida aleatorizada tropiece con el peor de los casos, rara vez se utiliza la variante determinista de búsqueda rápida de clasificación media.O(n)Θ(nlogn)


Entonces, en general, podemos decir que se comporta como cuadrático en el peor de los casos
Atinesh

@Atinesh No, al menos si te refieres a con eso. Θ
Raphael

Creo que es correcto decir que el peor de los casos de clasificación rápida aleatoria es O(n2).
James Evans

44
Quicksort puede tomar solo en el peor de los casos si se emplea un algoritmo de tiempo lineal para encontrar la mediana como pivote. Por supuesto, la selección rápida aleatoria generalmente tiene un mejor rendimiento práctico. Θ(nlogn)
Bangye

6

Te faltabas que estos textos hablaran del "peor tiempo de ejecución esperado ", no del "peor tiempo de ejecución".

Están discutiendo una implementación de Quicksort que involucra un elemento aleatorio. Normalmente tiene un algoritmo determinista, que es un algoritmo que para una entrada dada siempre producirá exactamente los mismos pasos. Para determinar el "peor tiempo de ejecución", examine todas las entradas posibles y elija la que produce el peor tiempo de ejecución.

Pero aquí tenemos un factor aleatorio. Dada alguna entrada, el algoritmo no siempre realizará los mismos pasos porque hay algo de aleatoriedad involucrado. En lugar de tener un tiempo de ejecución para cada entrada fija, tenemos un "tiempo de ejecución esperado": verificamos cada valor posible de las decisiones aleatorias y su probabilidad, y el "tiempo de ejecución esperado" es el promedio ponderado del tiempo de ejecución para cada combinación de decisiones aleatorias , pero aún para una entrada fija.

Por lo tanto, calculamos el "tiempo de ejecución esperado" para cada entrada posible, y para obtener el "tiempo de ejecución esperado en el peor de los casos", encontramos la única entrada posible donde el tiempo de ejecución esperado es peor. Y aparentemente mostraron que el peor de los casos para el "tiempo de ejecución esperado" es simplemente O (n log n). No me sorprendería si solo elegir el primer pivote al azar cambiaría el tiempo de ejecución esperado del peor de los casos a o (n ^ 2) (pequeño o en lugar de Big O), porque solo unos pocos de n pivotes conducirán al peor de los casos comportamiento.


2

Tenga en cuenta que hay dos cosas para superar las expectativas / promedio: la permutación de entrada y los pivotes (uno por partición).

nΘ(nlogn)

Θ(nlogn)

En pocas palabras, verifique su (s) fuente (s) para qué implementación usan y qué cantidad consideran aleatoria o resp. arreglado en su análisis.


Considere esta pregunta postimg.org/image/fiurc4z87 que le hice en el examen. ¿Qué
respuesta

1
@Atinesh Creo que mi respuesta te proporciona suficiente información sobre esto.
Raphael

-1

O(norte2)

El peor caso para el ordenamiento rápido aleatorio son los mismos elementos que la entrada. Ej: 2,2,2,2,2,2

T(norte)=T(norte-1)+norteO(norte2)


Eso si tienes una implementación extremadamente rápida de quicksort. Cualquier implementación decente en la primera partición intercambiará # 1 y # 6, # 2 y # 5, # 3 y # 4, y luego ordenará dos submatrices de longitud 3.
gnasher729

Supongo que tiene <= así como> = en ambos punteros que escanea desde LHS y RHS. Por eso lo estás diciendo. '=' está asociado con cualquiera de los punteros, no con ambos. En ese caso, el árbol de recursión crece hasta n.
pratyay

Y eso es lo que yo llamo una implementación extremadamente tonta. Cualquier implementación que tome tiempo de ejecución cuadrático para el caso "todos los elementos son iguales" es criminalmente estúpida. En realidad, hay implementaciones que toman tiempo lineal en este caso (O (n), no O (n log n)).
gnasher729
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.