166
правок
Изменения
→Рекурсивный алгоритм
Рассмотрим приоритеты <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(ndnh)</tex>, где <tex>n</tex> - количество элементов, из которых требуется построить дерево, и <tex>dh</tex> - высота получившегося дерева.
=== Алгоритм за O(n) ===