Изменения

Перейти к: навигация, поиск

Декартово дерево

597 байт убрано, 15:21, 21 апреля 2012
Простой алгоритм построения через рекурсию
== Построение декартово дерева из заданного набора элементов ==
Пусть нам известно из каких пар <tex>(x_i, y_i)</tex> требуется построить декартово дерево, причем также известно, что <tex>x_1 < x_2 < \ldots < x_n</tex>.
=== Простой Рекурсивный алгоритм построения через рекурсию ===Рассмотрим набор приоритеты <tex>y_1 , y_2 , \ldots , y_n</tex>, и выберем максимум среди них, пусть это будет <tex>y_k</tex>, и сделаем <tex>(x_k, y_k)</tex> корнем дерева (по свойству [[Двоичная куча|пирамиды]] в корне должен быть элемент с максимальным приоритетом). Проделав тоже то же самое с <tex>y_1 , y_2 , \ldots , y_{k-1}</tex> и <tex>y_{k+1} , y_{k+2} , \ldots , y_n</tex>, получим соответственно левого и правого сына <tex>(x_k, y_k)</tex>. С полученными наборами поступаем аналогично. Данный алгоритм построения декартово дерева основан на рекурсии: находим в наборе максимальный <tex>y_k</tex> и назначаем его корнем, найденный <tex>y_k</tex> разбивает набор на два, для каждого из полученного непустого набора запускаем алгоритм построения декартово дерева.
=== Алгоритм за O(n) ===

Навигация