Согласно Википедии, алгоритм выбора имеет время выполнения O(n)
, но я не уверен в этом. Может ли кто-нибудь объяснить, почему это O(n)
?
В обычном быстром сортировке время выполнения - O(n log n)
. Каждый раз, когда мы разделяем ветвь на две ветки (больше, чем ось вращения и меньше оси), нам нужно продолжить процесс по обеим сторонам ветвей, тогда как алгоритму выбора нужно только обрабатывать одну сторону ветки. Я полностью понимаю эти моменты. Но если вы думаете о бинарном алгоритме поиска, то после того, как мы выбрали средний элемент, мы также продолжаем искать одну сторону ветки. Так делает алгоритм O(1)
? Нет, конечно, бинарный алгоритм поиска по-прежнему равен O(log N)
вместо O(1)
. Это то же самое, что и элемент поиска в двоичном дереве поиска. Мы ищем только одну сторону, но мы по-прежнему считаем O(log n)
вместо O(1)
.
Может кто-нибудь объяснить, почему в алгоритме выбора, если мы продолжим поиск одной стороны, можно считать O(1)
вместо O(log n)
? Для меня я считаю, что алгоритм должен быть O(n log n)
, O(N)
для partitoning и O(log n)
для количества раз, чтобы продолжить поиск.