Un modo alternativo di pensare a questo è quello che i
diventa il valore massimo prima che venga resettato. Questo, a quanto pare, rende più semplice ragionare su come il precedente ordinamento A
influenzi il tempo di esecuzione dell'algoritmo.
In particolare, osserva che quando i
imposta 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: