Datové struktury I - NTIN066 - ZS 2015/2016 - 3. úkol

Termín odevzdání: 1. prosince 2015.
Způsob odevzdání: Odesláním v příloze emailem na ds1@kam.mff.cuni.cz.

Pravidla

Popis problému

Naimplementujte dvě varianty Splay stromů, standardní variantu z přednášky, kde se používají dvojité rotace, a naivní variantu, kde se místo dvojitých rotací použije při operaci Splay posloupnost jednoduchých rotací k přenesení zpracovávaného vrcholu do kořene.
Jednoduchá rotace

Prozkoumejte chování obou datových struktur na testovacích datech vygenerovaných níže popsaným programem. Každý test začíná vložením určitého počtu N prvků pomocí operace Insert a po nich následuje posloupnost operací Find. Posloupnost operací Find zavisí na typu testu:

Pro každý test změřte průměrnou délku cesty prošlé při operacích Find.

Generování dat

Pro vygenerování testovacích dat použijte už zkompilovaný generátor /afs/ms.mff.cuni.cz/u/b/babkm5am/ds1/hw3/splaygen dostupný v unixové laboratoři Rotunda. Spusťte ho s následujícími parametry:

Výstupem generátoru bude textový soubor, každý řádek popisuje jednu operaci na stromu:

Na jedno spuštění generátor vytvoří sadu testů o velikostech cca 1000 až 1000000 prvků.

Výstupní grafy

Pro každý typ testu nakreslete graf závislosti průměrné délky cesty Find na velikosti množiny N:

  1. Pro strandardní verzi a podmnožinový test nakreslete do jednoho grafu šest křivek, každá pro jedno T z {10,100,1000,10000,100000,1000000}.
  2. Stejně jako předchozí, ale pro naivní implementaci Splay stromů.
  3. Spojený graf 1. a 2., kde budou tři křivky pro standardní i naivní implementaci pro T z {100,10000,1000000}.
  4. Pro standardní a naivní implementaci zakreslete do jednoho grafu průměrnou délku cesty při sekvenčním testu.

Pokuste se vysvětlit tvar křivek a zdůvodnit rozdíly mezi chováním obou implementací stromů.

Příklad vstupu

# 3
I 1
I 2
I 0
F 1
F 0
F 2
# 4
I 2
I 3
I 0
I 1
F 2
F 0
F 2
F 3

Odevzdání

Pošlete e-mail s předmětem tvaru 'HW3-55973318' (t.j. HW3-studentské číslo) s těmito přílohami:

Tělo e-mailu nechť obsahuje údaje podle tohoto vzoru:

Jmeno: Jiří Fink
Pseudonym pro vysledky na webu: Tomáš Marný
Cviceni: pondeli-12:20-lichy