Uma maneira alternativa de pensar sobre isso é qual é o valor máximo de i
antes de ser redefinido. Acontece que isso torna mais simples o raciocínio sobre como a ordem de classificação anterior A
afeta o tempo de execução do algoritmo.
Em particular, observe que quando i
define seu novo valor máximo, vamos chamá-lo de N, a matriz [A[0], ..., A[N-1]]
é classificada em ordem crescente.
Então, o que acontece quando adicionamos o elemento A[N]
à mistura?
A matemática:
Bem, digamos que ele se encaixa na posição . Em seguida, precisamos de iterações de loop (que eu denotarei ) para movê-lo para colocar as iterações , para movê-lo para colocar e, em geral:pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Para uma matriz classificada aleatoriamente, assume a distribuição uniforme em para cada , com: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)
a soma pode ser mostrada usando a fórmula de Faulhaber ou o link Wolfram Alpha na parte inferior.
Para uma matriz inversamente classificada, para todos os e obtemos:pN=0N
stepsN(pN)=12N(N+1)
exatamente, levando estritamente mais tempo do que qualquer outro valor de .pN
Para uma matriz já classificada, e , com os termos de ordem inferior se tornando relevantes.pN=NstepsN(pN)=0
Tempo total:
Para obter o tempo total, que soma-se os passos de toda a fazenda . (Se estivéssemos sendo super cuidadosos, resumiríamos os swaps e as iterações do loop e cuidaríamos das condições de início e fim, mas é razoavelmente fácil ver que eles não contribuem para a complexidade na maioria dos casos) .N
E, novamente, usando linearidade de expectativa e a fórmula de Faulhaber:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Obviamente, se por algum motivo não for (por exemplo, a distribuição de matrizes que estamos vendo já está muito perto de ser classificada), isso nem sempre será necessário. Seja o caso. Mas são necessárias distribuições muito específicas no para conseguir isso!stepsN(pN)Θ(N2)pN
Leitura relevante: