Изменения

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

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

274 байта добавлено, 21:26, 21 апреля 2012
Рекурсивный алгоритм
=== Рекурсивный алгоритм ===
Рассмотрим приоритеты <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>O(nd)</tex>, где <tex>n</tex> - количество элементов, из которых требуется построить дерево, и <tex>d</tex> - высота получившегося дерева.
=== Алгоритм за O(n) ===

Навигация