Jump to content

Дерево приоритетного поиска

В информатике дерево приоритетного поиска — это древовидная структура данных для хранения точек в двух измерениях. Первоначально он был представлен Эдвардом М. МакКрайтом . [1] По сути, это расширение приоритетной очереди с целью сокращения времени поиска с O( n ) до O( s + log n ), где n — количество точек в дереве, а s — количество возвращаемых точек. по поиску.

Описание

[ редактировать ]

Дерево приоритетного поиска используется для хранения набора двумерных точек, упорядоченных по приоритету и значению ключа. Это достигается путем создания гибрида очереди с приоритетами и двоичного дерева поиска .

В результате получается дерево, в котором каждый узел представляет точку исходного набора данных. Точка, содержащаяся в узле, имеет наименьший приоритет. Кроме того, каждый узел также содержит значение ключа, используемое для разделения оставшихся точек (обычно медианы ключей, исключая точку узла) на левое и правое поддерево. Точки делятся путем сравнения их ключевых значений с ключом узла, делегируя точки с меньшими ключами левому поддереву, а те, которые строго больше, - правому поддереву. [2]

Операции

[ редактировать ]

Строительство

[ редактировать ]

Построение дерева требует времени O( n log n ) и пространства O( n ). Алгоритм построения предложен ниже:

tree construct_tree(data) {
    if length(data) > 1 {
        node_point = find_point_with_minimum_priority(data) // Select the point with the lowest priority
        reduced_data = remove_point_from_data(data, node_point)
        node_key = calculate_median(reduced_data) // calculate median, excluding the selected point
        
        // Divide the points 
        left_data = []
        right_data = []        
     
        for (point in reduced_data) {
            if point.key <= node_key
                left_data.append(point)
            else
                right_data.append(point)
        }

        left_subtree = construct_tree(left_data)
        right_subtree = construct_tree(right_data)

        return node // Node containing the node_key, node_point and the left and right subtrees
    } else if length(data) == 1 {
         return leaf node // Leaf node containing the single remaining data point
    } else if length(data) == 0 {
        return null // This node is empty
    }
}
[ редактировать ]

Дерево поиска приоритетов может быть эффективно запрошено для ключа в закрытом интервале и для максимального значения приоритета. То есть можно указать интервал [ min_key , max_key ] и другой интервал [- , max_priority ] и вернуть точки, содержащиеся в нем. Это проиллюстрировано в следующем псевдокоде:

points search_tree(tree, min_key, max_key, max_priority) {
    root = get_root_node(tree) 
    result = []

    if get_child_count(root) > 0 {
        if get_point_priority(root) > max_priority
            return null // Nothing interesting will exist in this branch. Return

        if min_key <= get_point_key(root) <= max_key // is the root point one of interest?
            result.append(get_point(node))
     
        if min_key < get_node_key(root) // Should we search left subtree?
            result.append(search_tree(root.left_sub_tree, min_key, max_key, max_priority))

        if get_node_key(root) < max_key // Should we search right subtree?
            result.append(search_tree(root.right_sub_tree, min_key, max_key, max_priority))
            
        return result
    else { // This is a leaf node
        if get_point_priority(root) < max_priority and min_key <= get_point_key(root) <= max_key // is leaf point of interest?
            result.append(get_point(node))
    }
}

См. также

[ редактировать ]
  1. ^ МакКрайт, Эдвард (май 1985 г.). «Деревья приоритетного поиска». Журнал SIAM по научным вычислениям . 14 (2): 257–276. дои : 10.1137/0214021 .
  2. ^ Ли, DT (2005). Справочник по структурам данных и приложениям . Лондон: Чепмен и Холл/CRC. стр. 18–21. ISBN  1-58488-435-5 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 078a68edf73e31738aeca59bc2e04420__1709879580
URL1:https://arc.ask3.ru/arc/aa/07/20/078a68edf73e31738aeca59bc2e04420.html
Заголовок, (Title) документа по адресу, URL1:
Priority search tree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)