Alternatywnym sposobem myślenia o tym jest, jaka jest maksymalna wartość i
przed zresetowaniem. Jak się okazuje, łatwiej jest zrozumieć, w jaki sposób poprzednia kolejność sortowania A
wpływa na czas działania algorytmu.
W szczególności zauważ, że kiedy i
ustawia się nową maksymalną wartość, nazwijmy ją N, tablica [A[0], ..., A[N-1]]
jest sortowana w porządku rosnącym.
Co się stanie, gdy dodamy element A[N]
do miksu?
Matematyka:
Powiedzmy, że pasuje do pozycji . Następnie potrzebujemy iteracji pętli (które oznaczę ), aby przenieść ją do położenia , aby przenieść ją do miejsca i ogólnie: N kroki N - 1 N + ( N - 1 ) N - 2pN.N.krokiN.- 1N.+ ( N- 1 )N.- 2
krokiN.( pN.) = N+ ( N- 1 ) + ( N- 2 ) + ⋯ + ( strN.+ 1 )= 12)( N( N+ 1 ) - pN.( pN.+ 1 ) )
W przypadku losowo posortowanej tablicy przyjmuje rozkład równomierny na dla każdego , z: { 0 , 1 , … , N } NpN.{ 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)
suma może być pokazana za pomocą wzoru Faulhabera lub łącza Wolfram Alpha na dole.
Dla odwrotnie posortowanej tablicy, dla wszystkich , i otrzymujemy:N.pN=0N
stepsN(pN)=12N(N+1)
dokładnie, biorąc ściśle dłużej niż jakakolwiek inna wartość .pN
W przypadku już posortowanej tablicy i , przy czym terminy niższego rzędu stają się odpowiednie.kroków N ( p N ) = 0pN=NstepsN(pN)=0
Czas całkowity:
Aby uzyskać całkowity czas, możemy podsumować kroki nad wszystkimi . (Gdybyśmy byli bardzo ostrożni, podsumowalibyśmy swapy, a także iteracje pętli i zadbali o warunki początkowe i końcowe, ale dość łatwo jest zauważyć, że w większości przypadków nie przyczyniają się do złożoności) .N
I znowu, używając liniowości oczekiwań i Formuły Faulhabera:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Oczywiście, jeśli z jakiegoś powodu nie jest (np. Rozkład tablic, na który patrzymy, jest już bardzo bliski sortowania), to nie zawsze musi to być sortowane niech tak będzie. Ale aby to osiągnąć, potrzeba bardzo specyficznych dystrybucji na !Θ ( N 2 ) p NstepsN(pN)Θ(N2)pN
Odpowiednia lektura: