¿Cuántas comparaciones se necesitan para la ordenación rápida si todos los números de entrada son iguales?

Tengo una matriz de N números que son iguales. Le estoy aplicando una ordenación rápida. ¿Cuál debería ser la complejidad temporal de la clasificación en este caso?

Busqué esta pregunta con los ojos abiertos, pero no obtuve la explicación exacta.

preguntado el 18 de septiembre de 12 a las 17:09

La respuesta variará según la implementación de Quicksort que esté estudiando. Así que elige uno y estúdialo. -

¿Puedes por favor? explicarlo mas especificamente? -

Hay muchas versiones diferentes de Quicksort. La respuesta será diferente según la versión que elija. Esto suena como una tarea, en cuyo caso probablemente haya una versión específica de Quicksort que el instructor quiera que estudies. -

Un algoritmo ingenuo de clasificación rápida será O(n^2). Este es el caso incluso si tiene un más inteligente Algoritmo de selección de pivote. Para evitar O(n^2), un algoritmo de clasificación rápida necesita dividir los números en 3 conjuntos para cada pivote (menor que, igual a, mayor que). -

2 Respuestas

Siempre hará el mismo conteo de comparaciones (si usa pura ordenación rápida), porque tiene que verificar todos los números (a menos que agregue alguna función especial, que verificará casos especiales como este). Pero no tiene que cambiar ningún número, por lo que es el mejor de los casos, por lo que su complejidad debería ser (n log n).

Respondido el 18 de Septiembre de 12 a las 17:09

La explicación que diste es correcta, pero creo que podemos reducir el número de comparaciones. - Asha

¿Qué función agregaría para lograr la reducción? - minarth

En realidad, una matriz ya ordenada es el peor de los casos conocidos para la ordenación rápida clásica. - Raymond Chen

@RaymondChen, depende de la implementación: hay variaciones que pueden garantizar O(n log n). - ronalchn

@ronalchn Es por eso que específicamente dije clasificación rápida "clásica". Todavía no sé qué es el ordenamiento rápido "puro". - Raymond Chen

Un algoritmo ingenuo de clasificación rápida será O(n^2). Este es el caso incluso si tiene un más inteligente Algoritmo de selección de pivote. Para evitar O(n^2), un algoritmo de clasificación rápida necesita dividir los números en 3 conjuntos para cada pivote (menor que, igual a, mayor que).

Un algoritmo de selección de pivote más inteligente es:

  • uno basado en heurística (por ejemplo, seleccionar la mediana de los pivotes candidatos obtenidos del primer elemento, elemento medio y último elemento)
  • uno usado para O(n log n) garantías: no entraré en esto aquí, pero dicho algoritmo puede garantizar que el pivote sea, por ejemplo, entre el 25-75% de la matriz ordenada.

Sin embargo, la mayoría de los algoritmos de clasificación rápida dividen los números en aquellos que son menores o mayores que el pivote. Los iguales al pivote se agrupan arbitrariamente con los mayores o menores que el pivote.

En el caso de que todos los números sean iguales, cada partición producirá solo una única partición, por lo que solo se reducirá el tamaño de la partición restante en 1 cada vez.

Para evitar esto, un algoritmo de clasificación rápida necesitaría dividir los números en 3 conjuntos: menor que, mayor que e igual al pivote.

Respondido el 23 de Septiembre de 12 a las 02:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.