Деревья решений при поиске нижних границ алгоритмов - PullRequest
0 голосов
/ 15 апреля 2020

Один из способов найти нижнюю границу алгоритма сравнения - использовать дерево решений. У вас есть два вопроса относительно этого метода:

1) Мы знаем, что высота дерева - это путь, который соединяет узел root с самым дальним конечным узлом (самый длинный путь), который равен числу сравнений. сделано от узла root до конечного узла. Поэтому, когда мы рисуем дерево для алгоритма, основанного на сравнении, нам просто нужно найти время наихудшего случая, которое соответствует наибольшему пути и, следовательно, соответствует высоте дерева. Теперь для любого дерева высота <= log2 (число листовых узлов), которая идентична Cworst (n) <= log2 (n), и теперь у нас есть нижняя граница для Cworst (n) и, следовательно, нижняя граница задачи = log2 (n). Правильно ли мое понимание? </p>

2) Что означает наличие неравенства для Cworst (n) для конкретной c проблемы сравнения? Означает ли это, что для конкретной задачи сравнения c мы можем нарисовать много деревьев, и каждый раз для пути наихудшего сценария высота будет иметь значение, которое удовлетворяет равенству? Это означает, что для конкретной задачи c мы можем нарисовать много разных деревьев?

1 Ответ

0 голосов
/ 15 апреля 2020

Дерево решений иллюстрирует возможные исполнения алгоритма для определенной категории c входов. В случае сортировки на основе сравнения категория будет состоять из всех входных списков определенного размера, поэтому существует одно дерево для n = 1, одно для n = 2, одно для n = 3 и т. Д. Каждое дерево имеет отношение c к точным входным значениям, но отслеживает возможные направления вычисления go в зависимости от того, как входные значения сравниваются друг с другом.

Одно из применений дерева решений заключается в причина верхних и нижних границ сложности во время выполнения. Как вы упомянули, высота дерева представляет верхнюю границу времени выполнения для входного размера этого дерева, и если вы можете найти общее соотношение между входным размером и высотой дерева для всех деревьев решений алгоритма, вы нашли выражение для верхней границы времени выполнения. Например, если вы проанализируете Bubble Sort, вы обнаружите, что дерево решений для входного размера n имеет высоту, примерно равную n * (n + 1) / 2, поэтому теперь вы знаете, что его время выполнения ограничено O(n^2). И поскольку у нас есть верхняя граница для общего времени выполнения, она также становится верхней границей для времени выполнения в худшем случае.

При рассмотрении конкретного алгоритма c нас обычно интересует скорость его выполнения. может быть (в лучшем случае), как быстро это обычно (в среднем случае) и насколько медленно это может быть (в худшем случае). И мы часто express в лучшем случае используем нижнюю границу (Омега), потому что нижняя граница для лучшего случая также является нижней границей для общего времени выполнения; аналогично, мы часто express в худшем случае используем верхнюю границу (O), потому что верхняя граница для наихудшего случая также является верхней границей для общего времени выполнения. Но нам не нужно - O, Omega и Theta - только математические инструменты, которые говорят что-то о функции, не заботясь о том, что функция в нашем случае описывает сложность времени выполнения. Итак, давайте сделаем что-то необычное: давайте рассмотрим все возможные алгоритмы для проблемы и используем деревья решений, чтобы попытаться выяснить что-то о all их сложностях наихудшего случая. Тогда интересный вопрос не в том, какова верхняя граница, потому что легко сделать чрезвычайно медленные алгоритмы сортировки. Вместо этого нас интересует нижняя граница: каков наилучший наихудший случай? Какой алгоритм дает наилучшую гарантию того, насколько медленным он будет в худшем случае?

Любой алгоритм сортировки должен уметь обрабатывать любой порядок своих входных элементов. Каждый листовой узел представляет одну конкретную конечную перестановку (перестановку) входных элементов, и с размером ввода n существует n! перестановок. Таким образом, дерево решений для входного размера n имеет как минимум n! конечных узлов. Любой алгоритм, который хочет иметь хороший наихудший случай, должен иметь сбалансированное дерево, где все конечные узлы находятся на самом глубоком или втором по глубине уровне. И сбалансированное дерево с n! листовыми узлами должно иметь высоту Omega(n lg n). Теперь мы знаем кое-что очень интересное: для любого алгоритма сортировки, основанного на сравнении, best возможная высота (которая представляет время выполнения в худшем случае) равна по крайней мере n lg n! Другими словами, невозможно создать алгоритм сортировки на основе сравнения, который всегда будет быстрее, чем n lg n.

(Примечание: height <= log2(leaf nodes) относится только к сбалансированным деревьям. Восемь деревьев может быть как столько, сколько число узлов минус один.)

...