Un modo alternativo di pensare a questo è quello che idiventa il valore massimo prima che venga resettato. Questo, a quanto pare, rende più semplice ragionare su come il precedente ordinamento Ainfluenzi il tempo di esecuzione dell'algoritmo.
In particolare, osserva che quando iimposta il suo nuovo valore massimo, chiamiamolo N, l'array [A[0], ..., A[N-1]]viene ordinato in ordine crescente.
Quindi cosa succede quando aggiungiamo l'elemento A[N]al mix?
La matematica:
Bene, diciamo che si adatta alla posizione . Quindi abbiamo bisogno di iterazioni in loop (che indicheremo ) per spostarlo per posizionare , iterazioni per spostarlo in posizione , e in generale:pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Per una matrice ordinata casualmente, assume la distribuzione uniforme su per ogni , 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 somma può essere mostrata usando la formula di Faulhaber o il link Wolfram Alpha in basso.
Per una matrice ordinata inversamente, per tutte le e otteniamo:pN=0N
stepsN(pN)=12N(N+1)
esattamente, impiegando strettamente più tempo di qualsiasi altro valore di .pN
Per una matrice già ordinata, e , con i termini di ordine inferiore che diventano rilevanti.pN=NstepsN(pN)=0
Tempo totale:
Per ottenere il tempo totale, sommiamo i gradini su tutta la . (Se stessimo facendo molta attenzione, riassumemmo gli swap e le iterazioni di loop e ci occuperemo delle condizioni di inizio e fine, ma è ragionevolmente facile vedere che non contribuiscono alla complessità nella maggior parte dei casi) .N
E ancora, usando la linearità delle aspettative e la Formula di Faulhaber:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Naturalmente, se per qualche motivo non è (ad es. La distribuzione degli array che stiamo guardando sono già molto vicini all'ordinamento), allora non è necessario che sempre essere il caso. Ma ci vogliono distribuzioni molto specifiche su per raggiungere questo obiettivo!stepsN(pN)Θ(N2)pN
Lettura pertinente: