IA-Seminar: Bayer-Bäume

Seitenende zurück weiter


3. Suchen in Bayer-Bäumen



+ -

Allgemeines

Das Suchen in einem Baum wird in zwei Phasen aufgeteilt:
  1. Durchsuchen eines Knotens nach dem zu suchenden Element
  2. Die Auswahl des richtigen Unterbaumes in dem die Suche fortgesetzt wird, wenn unter I. das Element nicht gefunden wurde

Bei der Suche in einem Knoten unterscheidet man zwei Fälle:
  1. Element ist im Knoten enthalten.
  2. Element ist nicht im Knoten enthalten.
    Wenn Element > "Element von Knoten an Position X" und
    Element < "Element von Knoten an Position X+1" dann wird
    die Suche beim Unterbaum von "Element von Knoten X" fortgesetzt.




+ -

Beispiel

Suche nach Element 20





+ -

Der Suchalgorithums

Durchsuchen einer Page mit binärer Suche:



Function SucheInPage(Var Page: PPage; Element: TElement; Var Pos: Integer): Boolean;

Var
    I,low,high: Integer;
    gefunden: Boolean;

Begin
     low:=0;
     high:=Page^.Anzahl+1;
     gefunden:=False;
     While (low+1<high) and (not gefunden) do
     Begin
          I:=(low+high) Div 2;
          If Element.Key=Page^.Elemente[I].Key Then
           gefunden:=True;
          If Element.Key<Page^.Elemente[I].Key Then
           high:=I
          If Element.Key>Page^.Elemente[I].Key Then
           low:=I;
     End;
     If not gefunden Then
      Pos:=low
     Else
      Pos:=I;
     SucheInPage:=gefunden;
End;

Funktionsschnittstelle:

Function SucheInPage(Var Page: PPage; Element: TElement; Var Pos: Integer): Boolean;

Durchsucht die Page "Page" nach dem Element "Element". "Pos" ist die Position des Elementes in der Page oder, wenn das Element nicht gefunden wurde, die Position, an der das Element stehen müsste.




+ -

Algorithmus zum Duchsuchen eines Baumes
mittels rekursiver Funktion:



Function Search(Element: TElement): PPage;

 Function Retrieve(PageLink: Longint): PPage;

 Begin
      Implementierung
 End;

Begin
      Search:=Retrieve(Rootlink); { Baum durchsuchen }
End;

Funktionsschnittstelle:

Function Search(Element: TElement): PPage;

Durchsucht einen Baum nach dem Element "Element". Die Funktion "Retrieve" durchsucht zuerst die Rootpage (Rootlink) und setzt die Suche dann rekursiv durch den Baum fort.

Implementierung der Funktion "Retrieve":



Function Retrieve(PageLink: Longint): PPage;

Var
    Page: PPage;
    Pos,I: Integer;

Begin
     { letzter Knoten erreicht (unterstes Baum-Level) }
     If PageLink=Null Then
      Retrieve:=Nil
     Else
     Begin
          { Page einlesen }
          Page:=LoadPage(PageLink);
          { Element in Page suchen }
          If SucheInPage(Page,Element,Pos) Then
           Retrieve:=Page
          Else
          Begin
               PageLink:=Page^.Elemente[Pos].Link;
               Dispose(Page);
               { nächste Page durchsuchen }
	       Page:=Retrieve(PageLink);
	       Retrieve:=Page;
          End;
     End;
End;

Funktionsschnittstelle:

Function Retrieve(PageLink: Longint): PPage;

Die Funktion lädt die Page "PageLink" ein und durchsucht sie nach dem zu suchendem Element. Wurde das Element gefunden, wird die Suche beendet. Wenn das Element nicht gefunden wurde, wird die Funktion "Retrieve" mit der am nächsten zu durchsuchenden Page aufgerufen.




Seitenanfang zurück weiter

[Inhalt] - [Definition] - [Hintergrundspeicher] - [Suche] - [Einfügen] - [Löschen]
© 1999, Henning Voß und Alexander Samarow