Альтернативним способом роздуму над цим є те, яким i
стає максимальне значення до його скидання. Як виявляється, це робить більш простим міркування про те, як порядок попереднього сортування A
впливає на час виконання алгоритму.
Зокрема, зауважте, що коли i
встановлюється нове максимальне значення, назвемо його N, масив [A[0], ..., A[N-1]]
сортується у порядку зростання.
Отже, що відбувається, коли ми додаємо елемент A[N]
до суміші?
Математика:
Ну, давайте скажемо, що він підходить у позиції . Тоді нам потрібні ітерацій циклу (які я позначу ), щоб перемістити його на місце , ітерацій, щоб перемістити його на місце , і взагалі: N кроків N - 1 N + ( N - 1 ) N - 2pNNstepsN−1N+(N−1)N−2
stepsN(pN)=N+(N−1)+(N−2)+⋯+(pN+1)=12(N(N+1)−pN(pN+1))
Для випадково відсортованого масиву приймає рівномірний розподіл на для кожного , з: { 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)
сума може бути показана за допомогою формули Фолхабера або посилання Вольфрама Альфа внизу.
Для обернено відсортованого масиву, для всіх , і отримуємо:NpN=0N
stepsN(pN)=12N(N+1)
точно, приймаючи строго довше, ніж будь-яке інше значення .pN
Для вже відсортованого масиву та , при цьому умови нижчого порядку стають актуальними.кроків N ( p N ) = 0pN=NstepsN(pN)=0
Загальний час:
Для того, щоб отримати загальний час, ми підведемо кроки по всьому . (Якби ми були дуже обережними, ми б підсумовували свопи, а також ітерації циклу, і піклувались про умови початку та кінця, але досить просто зрозуміти, що вони не сприяють складності в більшості випадків) .N
І знову, використовуючи лінійність очікування та формулу Фолхабера:
Expected Total Steps=E(∑N=1nstepsN(pN))=∑N=1nE(stepsN(pN))=Θ(n3)
Звичайно, якщо з якоїсь причини не є (наприклад, розподіл масивів, які ми дивимося, вже дуже близькі до сортування), то це не завжди потрібно бути справа. Але для досягнення цього потрібні дуже конкретні розподіли на !Θ ( N 2 ) p NstepsN(pN)Θ(N2)pN
Відповідне читання: