Professional Documents
Culture Documents
Sladek Julius AUS1
Sladek Julius AUS1
1. Semestrálna práca
Úlohou semestrálnej práce bolo efektívne implementovať údajové štruktúry a následne ich
otestovať, výsledky spracovať. Na testovanie som vytvoril jednoduchú konzolovú aplikáciu
v ktorej je možné vyberať z vopred definovaných scenárov, alebo taktiež možnosť vytvoriť
vlastný scenár podľa ktorého bude test vykonaný. Každý scenár ma vopred definovaný počet
opakovaní ktoré vykoná ( konštanta je nastavená na 1 000 000 opakovaní ). Operácie sú
vykonávane náhodne, pomer operácií závisí od scenára, alebo od vstupu zadaného
používateľom. Je možné testovať širokú škálu štruktúr. Výsledky testov sú zaznamenávané
a ukladané vo formáte csv vďaka čomu je spracovanie dát jednoduchšie. Pre prácu
s aplikáciou je nutné prečítať si používateľskú príručku. Pre spracovanie dát je priložená
taktiež používateľská príručka, jedná sa o jednoduchú prácu s populárnym softwarom R,
avšak je možné využiť akýkoľvek dostupný software. V dokumentácii k semestrálnej práci
nájdete taktiež spracované dáta z testovania údajových štruktúr a zároveň popis daných
štruktúr. Pre lepšie pochopenie údajových štruktúr je priložený aj UML diagram.
Zoznam
ArrayList<T>
LinkedList<T>
DoublyCircularLinkedList<T>
Prioritný front
PriorityQueueLinkedList<T>
Heap<T>
PriorityQueueTwoLists<T>
Matica
ImplicitQueue<T>
ExplicitQueue<T>
Set
Set
Po spustení aplikácie sa zobrazí hlavné menu. Výber menu je realizovaný pomocou zadávania
určitých znakov. Po zadaní znaku je potrebné potvrdiť výber enterom. V prípade zadanie
neplatného znaku ( neexistujúca možnosť ) budete presmerovaný späť do hlavného menu.
V hlavnom menu si vyberiete ktorý typ štruktúry chcete testovať.
• Testovací scenár bude spustený (môže trvať niekoľko minút) a následne po ukončení
informuje používateľa o ukončení testovania. Dáta budú uložené do formátu csv. Po
každom testovaní je potrebné daný súbor premiestniť, aby nedokázalo ku
znehodnoteniu dát.
1. Class – rozlíšenie typu operacii( vlož = 1, zruš =2, sprístupni nastav = 3, indexPrvku = 4)atď..
2. Count – číslo vykonanej operácie
3. Size – aktuálna veľkosť testovanej štruktúry
4. Time – dĺžka trvania operácie
install.packages("sqldf")
install.packages("ggplot2")
library(ggplot2)
library(sqldf)
V nameraných dátach sa nachádza aj šum ktorému nieje možné predisť preto je potrebné
odstrániť hodnoty ktoré prevyšujú určitú hranicu tzv. ‚outliers‘ (hranicu ktorú dosiahnuť
nemôžu). Preto si z pôvodnej množiny( ďalej set) vytvoríme podmnožinu (ďalej subset). Do
tejto podmnožiny vložíme len dáte ktoré spĺňajú určitú podmienku. Je potrebné nanovo
premapovať farby a taktiež. Hodnotu potrebné určiť na základe kvalifikovaného odhadu.
Vykreslenie grafu
ggplot() +
geom_line(data = ops3, aes(x=count, y=time), color='blue', size =
0.8) +
geom_line(data = ops2, aes(x=count, y=time), color='black', size =
0.8) +
geom_line(data = ops4, aes(x=count, y=time), color='darkslategray',
size = 0.8)+
geom_line(data = ops1, aes(x=count, y=time), color='darkgreen', size
= 0.8)
ggplot() +
geom_smooth(data = ops1, aes(x=count, y=time), color='darkgreen',
size = 0.8) +
geom_smooth(data = ops2, aes(x=count, y=time), color='black', size =
0.8) +
geom_smooth(data = ops3, aes(x=count, y=time), color='blue', size =
0.8)
geom_smooth(data = ops4, aes(x=count, y=time), color='darkslategray',
size = 0.8)
ArrayList
Dáta merané v mikro-sekundách.
Na grafe (obr.1.4) je vidieť spriemerované dáta z grafu (Obr.1.3). Aspoň z časti to redukuje
šum. Dáta boli merané v mikro-sekundách, trvania operácií sú pomerne vysoké. Príčinou sú
pravdepodobne range checky. Pri operáciách je vidno že sa jedná o mix opierací O(n) a O(1).
Graf nieje dobre čitateľní kvôli vysokému šumu. Takže je potrebné ho upraviť.
Na grafoch je vidno že indexOf je O(n) a viacmennej presne kopíruje, size. Pri ostatným
operáciách Je taktiež vidno ako je LinkedList ovplyvnený size-om, ale nieje to úplne tak.
Taktiež je vidno jeho skvelý vlastnosť a to je vkladanie. Pokiaľ sa vkladá na začiatok Linkedlist
je zložitosť O(1). Taktiež mazanie zo začiatku je veľmi rýchle. Je to veľmi rýchla štruktúra. Za
výhodu považujem že je to explicitná štruktúra. Teda nepotrebuje súvislý blok pamäti.
Na grafe (Obr.1.8) je možno vidieť operáciu nastav sprístupni, ktorá bola vykonávaná iba
s operáciou vlož. Os Y musela byť zlogaritmovaná aby bolo vidieť nejaký výsledok. Na
začiatku krásne vidno ako rapídne narastalo trvanie týchto operácii s neustále narastajúcim
size-om.
DoublyCircularLinkedList
Obr. (1.9)
DoublyCircularLinkedList – všetky operácie
PriorityQueueLinkedList
Obr.(2.3)
PriorityQueueLinkedList – operácie push
Pri operacii pop boli časy natoľko veľké že os Y musela byť zlogaritmovaná, aby bolo možné
zobraziť dáta. Taktiež musela byť operácia pop vložená na samostatný graf. Operácie peek
push sú pomerne konštantné a omnoho rýchlejšie.
Je jasne vidieť že front s kapacitou 4 je omnoho rýchlejší ako front s kapacitou 100.
Size bola neustále konštantná (pevne zadaná). Operácie prienik a je podmnožinou sú O(n).
Operácia vlož a zruš O(1);