Я пытаюсь освежить свои знания (и, надеюсь, узнать больше) об анализе алгоритмов. Я прошел этот курс два года назад, но сейчас пытаюсь наверстать упущенное.
Я делаю это, выполняя упражнения из классического учебника «Введение в алгоритмы», 2-е издание — CLRS.
Проблема, которую я пытаюсь решить, заключается в следующем:
Мое решение.
Время работы БЫСТРОЙ СОРТИРОВКИ, когда все элементы массива А имеют одинаковое значение, будет эквивалентно работе БЫСТРОЙ СОРТИРОВКИ в наихудшем случае, поскольку независимо от того, какая опорная точка выбрана, БЫСТРАЯ СОРТИРОВКА должна пройти через все значения в А. И поскольку все значения одинаковы, каждый рекурсивный вызов приведет к несбалансированному разделению.
Таким образом, повторение будет:
Приведенное выше повторение имеет решение (я докажу это позже):
Следовательно, время работы QUICKSORT в этом случае равно
Пожалуйста, проверьте, правильно ли я ответил на вопрос :)
Пожалуйста, дайте мне знать, если этот вопрос должен быть размещен в другом месте в сети SE.
Спасибо!
Джейк Клоусон
Ваше решение выглядит полностью правильным.
Ответ зависит от того, как вы выбираете точку опоры. Если вы будете следовать алгоритму, присутствующему в CLSR, который всегда выбирает последний элемент в качестве опорного, это приведет к уравнению и поэтому иначе, если вы выберете средний элемент в качестве опорного каждый раз, когда уравнение станет что привело бы к .
Нет, разбиение приведет к идеально сбалансированным подмассивам. Действительно, алгоритм будет искать первый элемент поворачиваться влево и поверните направо и поменяйте их местами. Поскольку все элементы равны (и равны опорной точке), крайний левый и крайний правый элемент будут немедленно заменены местами. Это будет продолжаться до тех пор, пока два индекса не встретятся, что произойдет ровно посередине.
Джастин
Эмре
ТВ
Юваль Фильмус
Yai0Phah
Аанг