Альтернативним способом роздуму над цим є те, яким 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
Відповідне читання: