La prueba es solo ligeramente diferente de probar que el algoritmo de selección se ejecuta en tiempo [matemático] O (n) [/ matemático].
Supongamos que estamos tratando de calcular la mediana de la secuencia [matemáticas] A [/ matemáticas], y para facilitar la demostración, supondré que la longitud de [matemáticas] A [/ matemáticas] es un múltiplo de [matemáticas] 5 [/mates]. ([matemáticas] n = | A | [/ matemáticas])
Suponga que [matemática] A [/ matemática] se divide en [matemática] n / 5 [/ matemática] secuencias de tamaño [matemática] 5 [/ matemática], [matemática] B [/ matemática]. [matemáticas] B_1 = (A_1, A_2, A_3, A_4, A_5) [/ matemáticas], [matemáticas] B_2 = (A_6, A_7, A_8, A_9, A_ {10}) [/ matemáticas], … y así sucesivamente.
- ¿Es teóricamente posible que un algoritmo tenga una complejidad negativa?
- Cómo representar más de la cantidad predeterminada de dígitos en números como (1/7) en Python
- Apelo en matemáticas pero quiero obtener un título de CS porque me encanta la programación. ¿Qué tengo que hacer? ¿Hay alguna alternativa?
- ¿Ser bueno en matemáticas me ayudaría a ser un mejor programador?
- Cómo resolver la Competencia de Computación Canadiense de 1996, Etapa 1, Problema C (vea el enlace del problema a continuación)
Entonces, [matemáticas] m_i = max B_i [/ matemáticas]. Nuevamente, para facilitar la demostración, digamos que [math] B [/ math] está ordenado con respecto a [math] m [/ math]. (El proceso de clasificación no forma parte del algoritmo). Pongamos la mediana de [matemáticas] m [/ matemáticas] como [matemáticas] M [/ matemáticas].
En el algoritmo de selección, la secuencia original A se divide en dos con elementos más pequeños que [math] M [/ math] a la izquierda de [math] M [/ math], y los más grandes que a su derecha. En el caso donde [math] M [/ math] es la mediana del máximo de cada [math] B_i [/ math], [math] M [/ math] es definitivamente más grande que casi la mitad de los elementos en [math] ] A [/ math], ya que todos los elementos en [math] B_1, B_2, …, B_ {k-1} [/ math] son más pequeños que [math] M [/ math]. Además, hay casos en los que los elementos en [matemáticas] B_ {k + 1}, B_ {k + 2}, …, B_ {n / 5} [/ matemáticas], a excepción de [matemáticas] m_i [/ matemáticas] que corresponde a cada [matemática] B_i [/ matemática], son más pequeños que [matemática] M [/ matemática]. Por lo tanto, el número de elementos en [matemática] A [/ matemática] que son definitivamente mayores que [matemática] M [/ matemática] es aproximadamente [matemática] n / 10 [/ matemática].
Entonces, podemos deducir la siguiente fórmula de recurrencia,
[matemática] T (n) \ le T (9n / 10) + T (n / 5) + O (n) [/ matemática]. [math] T (9n / 10) [/ math] proviene de la prueba de que puede haber solo [math] n / 10 [/ math] elementos más grandes que [math] M [/ math]. [matemática] T (n / 5) [/ matemática] viene de encontrar la mediana de [matemática] m [/ matemática], y [matemática] O (n) [/ matemática] proviene de la partición [matemática] A [/ matemática ] en secuencias de longitud [matemáticas] 5 [/ matemáticas].