Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
abramov_s_a_lekcii_o_slozhnosti_algoritmov.doc
Скачиваний:
138
Добавлен:
11.05.2015
Размер:
2.74 Mб
Скачать

§ 9. Функции, убывающие по ходу выполнения алгоритма 79

соответственно (битовая длина каждого следующего элемента после­довательности на единицу меньше битовой длины предыдущего), и в целом потребуется в точности A(n) = Llog2 n\ + 1 сравнений. Исполь­зуя утверждение, содержащееся в задаче 2, мы можем сформулиро­вать установленное свойство бинарного поиска так:

Сложность TBS (n) бинарного поиска места элемента в массиве дли­ны n по числу сравнений равна Llog2 n\ + 1, или, что то же самое, [log2(n + l)l.

Выражение |"log2(n + l)l для указанной сложности иногда бывает удобнее, чем Llog2 n\ + 1, потому что оно имеет смысл и в вырожден­ном случае n = 0.

Бинарный поиск находит широчайшее применение при поиске ин­формации в разнообразных таблицах. Укажем здесь еще одно его применение, касающееся вычислительной геометрии: он позволяет быстро определять, принадлежит ли произвольная точка Q выпук­лому n-угольнику, заданному вершинами PЪP2, ...Pn. Можно легко построить какую-нибудь внутреннюю точку O данного n-угольника. В силу его выпуклости точка Q — внутренняя, если и только если Q и O лежат в одной полуплоскости относительно любой из прямых PгP2, ...,Pn_1Pn,PnP1. Это соображение приводит к имеющему времен­ную сложность 6(n) алгоритму. Но допустим, что проведены n доба­вочных лучей (рис. 12), исходящих из точки O и проходящих через

Q

Рис. 12. Точка Q лежит между двумя лучами, проведенными из внутренней точки O многоугольника через его вершины.

вершины (считаем, что O = Q, иначе мы сразу бы заключили, что Q принадлежит многоугольнику). Можно установить, какому из углов ∠P1OP2, ..., ∠Pn1OPn, ∠PnOP1 принадлежит точка Q: если углы прону-

80 Глава 3. Оценивание числа шагов (итераций) алгоритма

мерованы в указанном порядке, то бинарным поиском определяется номер m угла, 1 ^ m ^ n; при этом если Q лежит на одном из про­веденных лучей, то из двух значений m берется любое. Узнав m, мы проверяем согласованность расположения точек O и Q по отношению к прямой, являющейся продолжением той стороны многоугольника, концы которой лежат на сторонах m-го угла.

Теперь заметим, что в самом проведении лучей OPъOP2, ...,OPn нет необходимости: сравнение Z.PxOQ с LPxOPi требует ограниченно­го числа операций и в том случае, когда нам лишь известны коорди­наты точек O,Q,P1,Pi.

Основывающийся на бинарном поиске алгоритм распознавания принадлежности точки выпуклому n-угольнику имеет сложность O(logn) по общему числу операций и пространственную сложность O(1).

Полезным для решения ряда задач является то обстоятельство, что если точка не принадлежит данному выпуклому n-угольнику, то с по­мощью этого алгоритма мы дополнительно определяем одну из сто­рон n-угольника, которая из этой точки видна целиком (рис. 13).

Q

Рис. 13. Для точки Q, не принадлежащей данному выпуклому n-угольнику, находим сторону n-угольника, которая из Q видна целиком.

Пример 9.3. Установим число этапов слияния при сортировке, предложенной Дж. фон Нейманом (которая является одним из вари­антов сортировки слияниями). При сортировке фон Неймана шаг за шагом происходят переброски элементов исходного массива в допол­нительный массив и наоборот, и каждая переброска сопровождает­ся слиянием соседних сегментов массива (рис. 14). В данном слу­чае в качестве вспомогательного размера массива удобно рассмот­реть k— число сегментов (первоначально k = n, затем, шаг за ша­гом, k довольно быстро убывает). При анализе бинарного поиска места элемента мы фактически использовали, что если 2m~1 ^ k < 2m,

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]