Qué medida de trastorno usar al analizar Quicksort


9

Estoy tratando de entender por qué el ordenamiento rápido usando la partición Lomuto y un pivote fijo funciona de manera errática, pero en general deficiente, en entradas generadas aleatoriamente. Estoy pensando que aunque las entradas se generan aleatoriamente, puede haber mucho orden en las secuencias, pero no estoy seguro de cómo medir el nivel de desorden en las secuencias. Pensé en usar el número de inversiones, pero vi en esta otra pregunta que pregunté que realmente no es una buena medida en este caso.

La razón por la que sospecho que mis secuencias aleatorias tienen mucho "orden" es que aleatorizar el pivote soluciona el problema de rendimiento. Pero, en teoría, no debería haber ningún problema de rendimiento en estas secuencias de entrada supuestamente "aleatorias".


Una buena medida del desorden para este tipo de cosas es la complejidad de Kolmogorov. Básicamente dice que las cadenas que están más desordenadas son las que son incompresibles. Conduce al método de incompresibilidad, que se ha utilizado para hacer cosas como el análisis de algoritmos de clasificación de casos promedio y para encontrar la relación entre el análisis promedio y el peor de los casos.
Peter

Debo señalar que soy estudiante de pregrado ... Estaba buscando algo un poco más directo, como quizás una de las medidas en este documento (simplemente no sé cuál): citeseerx.ist.psu. edu / viewdoc / summary? doi = 10.1.1.45.8017
Robert S. Barnes


Debe sospechar un error de programación en lugar de un caso pivotante adversario. ¡Simplemente ordena una secuencia codificada de enteros de 1 a N para ver si tu algoritmo ordena!
Yves Daoust

@YvesDaoust No creo que eso realmente importe, ¡la cantidad de "no monotonicidad" es realmente la complejidad de Kolmogorov de la cadena de longitudque codifica el orden de los elementos en la secuencia. Por supuesto, no es computable, y debe pensar en cadenas profundas como las pseudoaleatorias, pero es útil en el sentido de que cada medida de desorden es esencialmente una aproximación de la complejidad de Kolmogorov. Y no necesita calcularlo para probar cosas con él. Se han demostrado muchos resultados de complejidad con el método de incompresibilidad. logn!
Peter

Respuestas:


1

La
partición Lomuto vs Hoare Lomuto sufre al ordenar claves iguales, mientras que la partición Hoare no.
Ambos esquemas de partición sufren igualmente cuando se usa un pivote distante de la mediana.

Medida del desorden
La medida del desorden para elegir con el propósito de clasificación rápida es simple.
R: ¿Qué tan lejos de la mediana está el pivote fijo, en comparación con los datos aleatorios?
Si insiste en usar la partición de Lomuto y asume que los valores duplicados están permitidos, debe agregar la siguiente prueba contra la aleatoriedad:
B: ¿Cuántos elementos duplicados hay en comparación con los aleatorios?

Por supuesto, es bastante tonto suponer que se permiten valores duplicados en su conjunto de datos y todavía evaluar la partición de Lomuto, por lo que probablemente debería eliminar los duplicados de antemano o cambiar a la partición Hoare o asumir que los duplicados son raros.

Ambas medidas son triviales para cuantificar usando estadísticas.

Podemos descartar datos patológicos.
Cualquier otra desviación de la aleatoriedad no será importante para analizar el ordenamiento rápido. Mientras el pivote esté cerca de la mediana, funcionará bien en todos los datos que no sean patológicos.
La distancia desde el azar tendría que ser grande para ser patológica rápida, por lo que podemos descartarlo.

Nunca use ningún pivote fijo en el código real
. Tenga en cuenta que si escribe código real con un pivote fijo *) (cualquiera que sea ese pivote), se está abriendo a un ataque de denegación de servicio, porque un atacante puede insertar un valor patológico justo en ese punto y, por lo tanto, siempre debe elegir un elemento aleatorio como pivote.

*) o múltiples pivotes si elige el mejor de los pivotes x.

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.