Prioritní vyhledávací strom

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Prioritní vyhledávací strom je datová struktura používaná v informatice pro uchovávání a vyhledávání dat. Je to stromová struktura, ve které je každý uzel ohodnocen prioritou a procházení probíhá podle těchto priorit. Prioritní vyhledávací strom je obvykle implementován jako binární strom, kde každý uzel má dva syny - levého a pravého potomka. Podle ohodnocení priorit se rozhoduje, do kterého syna se při procházení stromu bude pokračovat. Tento strom se často používá ve vyhledávacích algoritmech, jako například prioritní fronta, kde se prvky řadí podle priority. Prioritní vyhledávací strom se také používá v databázích a operačních systémech pro rychlý přístup a vyhledávání dat.

Prioritní vyhledávací strom je datová struktura z oboru teoretické informatiky. Jedná se o strukturu k ukládání bodů dvourozměrných, tedy položek, která kromě hlavní hodnoty mají přiřazenou ještě „prioritu““. Samotná struktura je křížencem binárního vyhledávacího stromu a prioritní fronty.

V každém uzlu stromu je uložen jednak ten z bodů jím začínajícího podstromu, který má nejmenší prioritu, jednak hlavní hodnota (nejlépe medián všech hodnot podstromu), která podřazené body rozděluje do levého (menší nebo rovné hodnoty) a pravého (větší hodnoty) podstromu.

Vytvoření stromu

tree construct_tree(data) { if length(data) > 1 {

node_point = find_point_with_minimum_priority(data) // nalezení bodu s nejnižší prioritou

reduced_data = remove_point_from_data(data, node_point) // jeho odstranění ze vstupu node_key = calculate_median(reduced_data) // výpočet mediánu ze zbytku vstupních bodů

// rozdělení dat podle mediánu left_data = [] right_data = []

for (point in reduced_data) { if point.key

1 { return leaf node // zbývající bod je vracíme jako list } else if length(data)

0 { return null // prázdný } }

Vyhledávání v intervalu

Typickou úlohou v prioritním vyhledávacím stromě je nalezení bodů s omezenou nejvyšší prioritou a spadajících do patřičného intervalu hodnot.

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 // v tomto podstromu výsledek nenajdeme

if min_key

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top