Подтвердить что ты не робот

Алгоритм - Как отсортировать массив 0/1 с сравнениями 2n/3?

В Руководстве по разработке алгоритмов существует такой акциз

4-26 Рассмотрим задачу о сортировке последовательности из n 0s и 1s, используя сравнения. Для каждого сравнения двух значений x и y алгоритм узнает, какой из x < y, x = y или x > y.

(a) Дайте алгоритм для сортировки в n - 1 сравнениях в худшем случае. Покажите, что ваш алгоритм оптимален.

(b) Дайте алгоритм сортировки в 2n/3 сравнениях в среднем случае (при условии, что каждый из n входов равен 0 или 1 с равной вероятностью). Показать что ваш алгоритм оптимален.

Для (a), я думаю, это довольно легко. Я могу выбрать [n-1] как точку опоры, затем сделать что-то вроде раздела quicksort, отсканировать от 0 до n - 2, найти среднюю точку, где левая сторона - все 0, а правая сторона - все 1, это займет n - 1 сравнение.

Но для (б) я не могу понять. Он говорит "каждый из n входов равен 0 или 1 с равной вероятностью" , поэтому, я думаю, я могу предположить, что числа 0 и 1 равны? Но как я могу получить результат, связанный с 1/3? разделите весь массив на 3 группы?

Спасибо

4b9b3361

Ответ 1

"0 или 1 с равной вероятностью" является условием "среднего" случая. Другие случаи могут иметь худшее время.

Подсказка 1: 2/3 = 1/2 + 1/8 + 1/32 + 1/128 +...

Подсказка 2. Рассмотрим последовательность как последовательность пар и сравните элементы в каждой паре. Половина вернется равным; половина не будет. Из половины, которые являются неравными, вы знаете, какой элемент в паре равен 0 и который равен 1, поэтому им больше не нужно сравнивать.

Ответ 2

Нет, это означает, что в любой позиции у вас есть такая же вероятность (вероятность) входного значения, равная 0 или 1. это дает вам первый ключ: ваш алгоритм будет рандомизирован.

Время выполнения будет зависеть от некоторой случайной переменной, и вам нужно принять ожидаемое значение, чтобы получить средний случай сложности. Обратите внимание, что в этом случае вы должны детализировать во время анализа сложности, так как они требуют точной константы (2/3n, а не просто O(n))

Edit:
Подсказка. В отсортированном массиве (тот, который вы получите в конце), что только меняется, зная, что у вас есть только два возможных элемента.