¿Cómo pruebo que un tipo de matriz N de longitud basada en comparación no se puede hacer en tiempo O (N) en el peor de los casos?

Una ordenación basada en la comparación puede ordenar en tiempo lineal en algunos casos; por ejemplo, considere la clasificación de inserción en una matriz ya ordenada. Sin embargo, todos los tipos basados ​​en la comparación en el peor de los casos se ejecutarán en al menos n log n time.

Prueba: todos los géneros basados ​​en la comparación se pueden representar mediante un árbol de decisión (binario), en el que cada nodo representa una comparación, una rama corresponde a un resultado de la comparación y las hojas son la salida del género. La profundidad del árbol, o la longitud del camino simple más largo a una hoja del árbol, es igual al número de comparaciones realizadas en el peor de los casos.

Un árbol de decisión para una ordenación correcta basada en la comparación debe tener al menos n! hojas, ya que hay n! Las permutaciones de n números y cualquier permutación individual podrían ser la salida correcta del tipo. El número máximo de hojas para un árbol binario completo de profundidad d es 2 ^ d .

Por lo tanto, ¡el número de hojas de un árbol de decisión de profundidad d debe ser mayor o igual que n! y menor o igual que 2 ^ d . Tome el log base 2 de las expresiones, lo que resulta en d es mayor o igual que log (n!) . Log (n!) Es Omega ( n log n ), entonces d , o la profundidad del árbol, también es Omega ( n log n ).

Entonces, el peor tiempo de ejecución para cualquier ordenamiento basado en comparación tiene un límite inferior de n log n .

Un algoritmo de ordenación basado en la comparación necesita un mínimo de comparaciones log (n!) Para ordenar una lista con n elementos en el peor de los casos. Sabemos que a partir de la aproximación de Stirling, log (n!) = Ω ( n lg n ), que es mayor que O (n), y por lo tanto podemos concluir que un algoritmo de clasificación basado en comparación no puede completarse en el tiempo O (n) en el peor caso

Puedes usar un árbol de decisión.
¡No hay! permutaciones de la secuencia que está ordenando.
Es decir, si ha hecho 0 comparaciones, ¡la secuencia podría ser cualquiera de n! diferentes permutaciones
Cuando compara dos números en la secuencia, obtiene el conocimiento de si la secuencia es una donde el número es mayor o si es uno donde el otro número es mayor, es decir, las posibilidades restantes se reducen a la mitad. Entonces, con una comparación, todavía hay n! / 2 posibilidades. Con dos comparaciones todavía hay n! / 4. Con O (n) comparaciones todavía hay [matemáticas] n! \ over 2 ^ {cn} [/ math] posibilidades.

Para n suficientemente grande, esto siempre será mayor que uno, es decir, con las comparaciones O (n) no puede identificar la permutación específica. Por lo tanto, no puede decir qué operaciones tiene que hacer para poner la secuencia en orden ordenado.

Usas un árbol de decisión. La demostración es un poco técnica pero no difícil.

More Interesting

¿Puede una computadora generar un número verdaderamente aleatorio?

Recientemente me enamoré de las estructuras de datos y algoritmos. ¿Qué idioma (s) y qué rama (s) de matemáticas le servirían mejor y qué tipo de trabajos de entrada debería buscar una vez que lo lleve a un nivel decente, unos 4-6 meses después?

¿Mejorará la velocidad de búsqueda y clasificación de algoritmos o hemos alcanzado el límite?

¿Qué algoritmo es mejor para una variante 4 * 4 * 4 * 4 del último dedo del pie tic-tac considerando un límite de tiempo de 15 segundos?

¿Por qué los algoritmos tienen tanta importancia en la programación?

¿Hay algún algoritmo de clasificación que sea sustancialmente más rápido que QuickSort?

Cómo imprimir espacio para los elementos de la matriz

¿Cómo funciona el algoritmo de fijación de precios de Megabus?

Si tengo un buen conocimiento de Java, C ++, algoritmos y estructuras de datos y quiero ser un profesional independiente. ¿Cuánto puede ganar alguien con estas habilidades?

Cómo cifrar un fragmento de texto usando un algoritmo de cifrado

¿Por qué el aprendizaje profundo requiere la construcción de modelos de datos generativos?

¿Hay algún algoritmo que sea más rápido que log (n)?

¿Qué algoritmos utiliza el cónsul?

¿Cómo se diseña el algoritmo de búsqueda difusa en Sublime Text? ¿Cómo diseñarías algo similar?

¿Cuáles son las amplias variedades en programación dinámica que se preguntan con frecuencia en los concursos de codificación?