Анализ алгоритма сортировки по списку из 0 и 1 элемента.

Я пытаюсь понять разницу, если следующие алгоритмы сортировки получат набор двоичных входных данных, т.е. набор только 0 и 1.

а) пирамидальная сортировка б) быстрая сортировка в) сортировка слиянием г) сортировка вставками.

Я ищу разницу в количестве сравнений, необходимых для сортировки списка.

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

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

Боковое примечание: сортировка подсчетом сортирует такой массив в О ( н ) . en.wikipedia.org/wiki/Counting_sort
Рассматривали ли вы вопрос об этом на бета-сайте computerScience.SE?
Нет, я не знаю об этом сайте. Можете ли вы дать мне точный адрес? (computerScience.se не загружается)

Ответы (2)

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

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

Быстрая сортировка еще более интересна, так как первый вызов partition оставит массив в отсортированном порядке после О ( н ) свопы. Если бы QS был написан с учетом этого, то его поведение изменилось бы с О ( н бревно н ) в среднем (или О ( н 2 ) в худшем случае) О ( н ) . Если бы этот факт не был выявлен, то после первого разбиения последующие разбивали бы каждый подмассив на две части, одна из которых содержала бы один элемент, а другая — все остальные, что приводило бы к О ( н 2 ) производительность как в среднем, так и в худшем случае.

Ой! Я только что заметил, что heapsort также был в вашем списке. Я должен вернуться к вам по этому поводу.

Спасибо за ваш ответ. :) Я тоже получил несколько похожий результат, но не был уверен, правильные они или нет. Вот мои результаты: Сортировка вставками: тета (n ^ 2), если нет. 1 или 0 постоянны, то это тета (n) Сортировка слиянием: тета (nlogn), Без изменений, даже если 1 или 0 постоянны. Heapsort: тета(nlogn), если нет. 1 постоянны, тогда тета (nlogn). Если нет. 0 постоянны, тогда тета (n). QUickSort: тета (n ^ 2), без изменений, если нет. 0 или 1 являются постоянными.

Лучший случай = данные уже отсортированы Средний случай = некоторые данные отсортированы, некоторые данные не отсортированы. Худший случай = данные полностью не отсортированы

Сортировка слиянием: Лучшее = NlogN , AVE=NlogN, ХУДШЕЕ = NlogN

Сортировка вставками = Лучший = N , AVE=N^2, ХУДШИЙ = N^2

Быстрая сортировка = NlogN , AVE=NlogN, ХУДШЕЕ = N^2

Я знаю об этих формулах, я хочу знать, какая разница будет с входными значениями только между 0 и 1. Будут ли какие-либо изменения тета-границы этих алгоритмов? Я думаю, что будут некоторые, но я не могу найти подходящий способ узнать то же самое.