Изменения

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

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

30 байт добавлено, 11:35, 17 апреля 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> разбивает набор на два, для каждого из полученного непустого набора запускаем алгоритм построения декартово дерева.

Навигация