Una forma alternativa de pensar sobre esto es en lo que se i
convierte el valor máximo de antes de restablecerlo. Resulta que esto hace que sea más sencillo razonar sobre cómo el orden de clasificación anterior A
afecta el tiempo de ejecución del algoritmo.
En particular, observe que cuando i
establece su nuevo valor máximo, llamémoslo N, la matriz [A[0], ..., A[N-1]]
se ordena en orden ascendente.
Entonces, ¿qué sucede cuando agregamos el elemento A[N]
a la mezcla?
Las matemáticas:
Bueno, digamos que encaja en la posición . Luego necesitamos iteraciones de bucle (que denotaré ) para moverlo a , iteraciones para moverlo a y, en general:pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Para una matriz ordenada aleatoriamente, toma la distribución uniforme en para cada , con:pN{0,1,…,N}N
E(stepsN(pN))=∑a=1NP(pN=a)stepsN(a)=∑a=1N1N12(N(N+1)−a(a+1))=12(N(N+1)−13(N+1)(N+2))=13(N2−1)=Θ(N2)
la suma se puede mostrar usando la fórmula de Faulhaber o el enlace Wolfram Alpha en la parte inferior.
Para una matriz inversamente ordenada, para todo , y obtenemos:pN=0N
stepsN(pN)=12N(N+1)
exactamente, tomando estrictamente más tiempo que cualquier otro valor de .pN
Para una matriz ya ordenada, y , y los términos de orden inferior se vuelven relevantes.pN=NstepsN(pN)=0
Tiempo Total:
Para obtener el tiempo total, resumimos los pasos de toda la hacienda . (Si fuéramos muy cuidadosos, resumiríamos los intercambios, así como las iteraciones del bucle, y nos ocuparíamos de las condiciones de inicio y finalización, pero es razonablemente fácil ver que no contribuyen a la complejidad en la mayoría de los casos) .N
Y nuevamente, usando la linealidad de la expectativa y la fórmula de Faulhaber:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Por supuesto, si por alguna razón no es (por ejemplo, la distribución de las matrices que estamos viendo ya está muy cerca de ser ordenada), entonces esto no siempre necesita sea el caso. ¡Pero se necesitan distribuciones muy específicas en para lograr esto!stepsN(pN)Θ(N2)pN
Lectura relevante: