Čtěte prosím tuto stránku celou a pozorně.
Implementujte vyhledávání ve splay-stromech.
Splay-strom je binární vyhledávací strom. Od obyčejného vyhledávacího stromu se liší jen odlišnou implementací operací, datové struktury jsou stejné.
Nejdůležitější implementací ve splay-stromě je operace SPLAY(x). Tato operace probíhá podle následujícího algoritmu:
x. Vyhledávání probíhá stejně jako v obyčejném stromě. Hodnota x může, ale nemusí být ve stromě přítomna. V případě nalezení vrcholu bude algoritmus dál pracovat s nalezeným vrcholem, jinak bude dál pracovat s posledním vrcholem navštíveným během vyhledávání.t.
Při operaci SPLAY(x) mohou nastat tři druhy rotací:
t kořen stromu, přesuneme t jednoduchou rotací do kořene.t, otec t a děd t v jedné přímce, provedeme dvojitou rotaci tak, aby t zaujal místo děda a vrcholy byly opět v jedné přímce.t, otec t a děd t cik-cak, provedeme dvojitou rotaci tak, aby t byl mezi dědem a otcem.


Při každé rotaci se vrchol t dostane výš, nakonec tedy musí skončit v kořeni.
Vyhledání prvku x probíhá tak, že se nejprve provede operace SPLAY(x) a potom se hodnota x porovná s hodnotou prvku reprezentovanou kořenem stromu. Je-li prvek x ve stromě, bude po operaci SPLAY(x) v kořeni.
Na stránce http://www.cs.technion.ac.il/~itai/Courses/ds2/framesplay/index.html můžete najít animovanou verzi operace MEMBER(x) (vyžaduje java-skript).
Vaším úkolem bude doplnit kód do funkce function member(T: PTree;x : Integer) : Boolean; v unitě splay.pas. Hlavní program je v souboru main.pas, kde je umístěný kód pro načítání vstupních dat a kontrolu výsledného stromu. Výsledek kontroly je zapsán do souboru vysledek.txt.
Vstupní soubor vstup.txt je posloupnost trojic řádků. Každá trojice odpovídá jenomu testu. První řádek z trojice je posloupnost prvků, jejichž postupným přidáváním vznikne počáteční strom. Na druhém řádku je hodnota prvku, který se má najít a Boolean (reprezentovaný jako 0 nebo 1) s hodnotou správné návratové hodnoty funkce member. Na třetím řádku je posloupnost prvků odpovídající výpisu výsledného stromu po vyhledání prvku v preorderu.
Popis algoritmu, který máte implementovat, je jednoznačný. Výsledný strom musí mít identický tvar se stromem ze vstupního souboru.
Potřebné zdrojové soubory a testovací data najdete v souboru splay.tar.
TTree.member nepoužívejte new.
Vytvořte samostatnou proceduru splay.
Napište si pro ladící účely proceduru, která vám vypíše obsah stromu na obrazovku, jistě se vám bude hodit.
hruska (zavináč) popelka (tečka) ms (tečka) mff (tečka) cuni (tečka) cz s předmětem zprávy PGM - splay a s přiloženým souborem splay.pas..exe soubory.
Termín zadání: 21.3.2007.
Termín odevzdání: 8.4.2007 včetně.
Termín oprav: 15.4.2007 včetně.
hruska (zavináč) popelka (tečka) ms (tečka) mff (tečka) cuni (tečka) cz