Студопедия
rus | ua | other

Home Random lecture






Применение бинарных деревьев в алгоритмах поиска.


Date: 2015-10-07; view: 436.


 

В односвязном списке невозможно использовать бинарные методы, они могут использоваться только в последовательной памяти. Однако, если использовать бинарные деревья, то в такой связной структуре можно получить алгоритм поиска со сложностью O(log 2 N). Такое дерево реализуется следующим образом: для любого узла дерева с ключом Ti все ключи в левом поддереве должны быть меньше Ti, а в правом – больше Ti. В дереве поиска можно найти место каждого ключа, двигаясь, начиная от корня и переходя на левое или правое поддерево, в зависимости от значения его ключа. Из n элементов можно организовать бинарное дерево (идеально сбалансированное) с высотой не более чем log 2 N, которое определяет количество операций сравнения при поиске.

Function Search (x: integer; t: ElPtr): ElPtr;

Ti L_Son R_Son
{поле Data заменим на поле Key}

var f: boolean;

begin

< Ti > Ti
f:=false;

while (t<>nil) and not f do

if x=t^. key then f:=true

else if x>t^. key then t:=t^. R_Son else t:=t^. L_Son;

Search:=t;

end;

Если получим, что значение функции = nil, то ключа со значением x в дереве не найдено.

       
 
Функцию можно упростить, если организовать идею барьера, когда все листья указывают на введенный фиктивный элемент.
   
 

 

 


Function Search (x: integer; t: ElPtr): ElPtr;

begin

S^.key:=x;

while t^.key<>x do

if x > t^.key then then t:=t^. R_Son else t:=t^. L_Son;

Search:=t;

end;

 


<== previous lecture | next lecture ==>
Формирование бинарного дерева. | Операция включения в СД типа бинарное дерево.
lektsiopedia.org - 2013 год. | Page generation: 1.95 s.