You are on page 1of 19

Žilinská univerzita v 

Žiline
Fakulta riadenia a informatiky

Algoritmy a údajové štruktúry 1


Semestrálna práca 1
Analýza výkonu údajových štruktúr

Silvia Šúchalová
5ZY 035
2019/2020
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1. Popis zvolených údajových štruktúr

1.1 ArrayList
ArrayList je štruktúra, ktorá uchováva prvky toho istého dátové typu. Prvky majú
svoju konkrétnu pozíciu v zozname, ktorá je reprezentovaná indexom. Implementovaná
je implicitne, čiže pomocou poľa. To znamená, že najskôr sa vyalokuje súvislý blok pamäti
o určitej veľkosti (Array), a následne sa doň vkladajú prvky. Na to, aby sme vedeli
s ArrayListom pracovať, potrebujeme mať implementované operácie.

Vlož prvý: operácia má zložitosť O(n), pretože treba posúvať prvky v pamäti o jednu
pozíciu doľava, aby sme uvoľnili miesto pre vloženie prvku na prvý, resp. nultý index. Pri
alokácii pamäti dosiahneme zložitosť O(m*n)
Vlož posledný: pokiaľ ArraList nedosiahol veľkosť Arrayu, tak zložitosť je O(1), pretože
sa vloží prvok na koniec zoznamu bez žiadneho posúvania prvkov/alokovania pamäti
(inak O(n))
Vlož na index: zložitosť operácie je O(n), kvôli presúvaniu prvkov pre vyhradenie
miesta vkladanému prvku. Ak ale treba ešte alokovať nové miesto, tak nastáva zložitosť
O(m*n)
Zruš prvý: nadobúda zložitosť O(n) kvôli posunu prvkov doprava pri odstránení prvku
z nultého indexu
Zruš posledný: ľahký prístup na index posledného prvku, čo znamená zložitosť O(1)
Zruš na indexe: podobne ako pri „zruš prvý“ len zo stredu ArrayListu, O(n)
Sprístupni: rýchly prístup priamo na index, O(1)
Nastav: taktiež rýchly prístup na index a len nastavenie prvku, O(1)
Index prvku: kvôli tomu, že hľadáme index podľa prvku, nemáme priamy prístup na
indexy, je potrebné prehľadávať ArrayList, čo zaručuje zložitosť O(n)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1.2 LinkedList

Vyznačuje sa tým, že prvky nie sú (nemusia byť) uložené v pamäti súvisle za sebou,
ale sú zreťazené (odkaz na nasledovníka). Zoznam si udržiava v sebe prístup na prvý
a posledný prvok v zozname. Na začiatku nie je alokované žiadne miesto pre prvky,
pretože ide o dynamickú štruktúru a alokuje si pamäť podľa potreby. Operácie nad
LinkedListom:

Vlož prvý: zmení sa len ukazovateľ z aktuálne prvého na vkladaný prvok, O(1)
Vlož posledný: v našom prípade si ukladáme aj ukazovateľ na posledný prvok, takže
pridanie prvku na koniec zreťazenia má zložitosť O(1)
Vlož na index: reprezentuje zložitosť O(n), pretože musí prehľadať zoznam a nájsť
správne miesto pre vloženie prvku. Následne sa zmenia nasledovníci u predchádzajúceho
prvku na vkladaný prvok a vkladaný prvok bude mať nasledovníka, ktorého mal
predchádzajúci prvok
Zruš prvý: zmena ukazovateľa z prvého prvku na jeho nasledovníka, O(1)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Zruš posledný: keďže posledný prvok si nepamätá predchodcu, musí sa zoznam prejsť
od začiatku zreťazenia, nájsť posledný prvok, nastaviť ho na posledný a to nadobúda
zložitosť O(n)
Zruš na indexe: je nutné prechádzať zoznamom pre odstránenie prvku, O(n)
Sprístupni: potrebné prechádzanie zoznamom na nájdenie prvku, O(n)
Nastav: taktiež prechádzanie zoznamom pre nájdenie indexu a nastavenia prvku,
O(n)
Index prvku: porovnávanie hodnôt v zozname, ktorý sa prechádza od začiatku
zreťazenia, O(n)

1.3 Obojstranne cyklický LinkedList


Je to špeciálny prípad LinkedListu, kde si prvok pamätá svojho nasledovníka
a predchodcu, a navyše o sebe vedia prvý a posledný prvok tým, že posledný prvok má
nasledovníka ako prvý prvok a prvý prvok má predchodcu ako posledný prvok. Týmto činom
je možné prehľadávanie zoznamu nielen od začiatku, ale aj od konca zoznamu. Podporuje tie
isté operácie ako ArrayList a LinkedList.

Vlož prvý: zmena ukazovateľa z prvého prvku na vkladaný prvok, O(1)


Vlož posledný: zmena ukazovateľa z posledného prvku na vkladaný prvok, O(1)
Vlož na index: keďže je možné prehľadávať index zo začiatku a konca zoznamu, je
vhodné si nájsť, či sa index bude vkladať do prvej polovice zoznamu (prehľadávanie od
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

začiatku), alebo do druhej polovice zoznamu (prehľadávanie od konca), pri vložení nutné
aktualizovať predchodcov a nasledovníkov, O(n/2)
Zruš prvý: zmena ukazovateľa z prvého prvku na jeho nasledovníka a nasledovníkovi
nastaviť nového predchodcu, O(1)
Zruš posledný: zmena ukazovateľa z posledného na predchodcu a predchodcovi
nastaviť nového nasledovníka, O(1)
Zruš na indexe: princíp rovnaký ako pri „vlož na index“, O(n/2)
Sprístupni: princíp rovnaký ako pri „vlož na index“, tu nie je nutné nastavovať
predchodcov ani nasledovníkov, O(n/2)
Nastav: princíp rovnaký ako pri „vlož na index“, plus nastavenie prvku na novú
hodnotu, O(n/2)
Index prvku: princíp rovnaký ako pri „vlož na index“, rozdiel je v tom, že sa hľadá
index podľa prvku, O(n/2)

1.4 Matica v súvislej pamäti


Homogénna údajová štruktúra (obsahuje prvky rovnakého dátového typu),
implementovaná vektorom. Matica je uložená v pamäti po riadkoch. Pre prístup na index
je použitá mapovacia funkcia, ktorej výpočet zaistí nájdenie správneho indexu.

Sprístupni: pomocou mapovacej funkcie rýchly prístup k prvkom, O(1)


Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Nastav: pomocou mapovacej funkcie rýchly prístup k prvkom a ich nastavenie na


požadovanú hodnotu, O(1)

1.5 Matica v nesúvislej pamäti


Homogénna údajová štruktúra, zvyčajne označovaná ako pole polí, implementovaná
poľom. Jedno pole uchováva odkazy na ostatné polia. Prístup tiež jednoduchý a rýchly
pomocou operátora[ ].

Sprístupni: pomocou operátora[ ] rýchly prístup k prvkom, O(1)


Nastav: pomocou operátora[ ] rýchly prístup k prvkom a ich nastavenie na
požadovanú hodnotu, O(1)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1.6 Zreťazený zoznam neutriedený podľa priorít


Explicitná implementácia pomocou LinkedListu, prvky v zozname nie sú utriedené
podľa priority. Prvky sú charakterizované dátami a prioritou. Čím je hodnota priority
nižšia, tým je priorita vyššia a naopak. Operácie nad touto štruktúrou vždy poskytnú
prvok s najvyššou prioritou.

Vlož: prvky sa vkladajú vždy na koniec zoznamu, takže nadobúda zložitosť O(1)
Vyber: kvôli prehľadávaniu zoznamu a nájdeniu prvku podľa priority má zložitosť O(n)
Ukáž: taktiež zložitosť O(n), kvôli prehľadávaniu zoznamu a nájdeniu konkrétnej
priority
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1.7 Ľavostranná halda


Predstavuje binárny strom implementovaný poľom, kde pole je haldovo utriedené. To
znamená, že ak máme binárny strom, v ktorom sa nachádza nejaký vrchol, tak musí mať
dvoch synov (pravý a ľavý syn). Priorita daného vrcholu je vyššia, nanajvýš rovná oboch
synov. Prvý prvok v poli obsahuje prvok s najvyššou prioritou.

Vlož: prvky sa vkladajú na poslednú úroveň na prvú voľnú pozíciu zľava, z kade sa
pomocou metódy swap vymieňa so svojim otcom, pokým nie je splnená podmienka
spomínaná vyššie. Toto predstavuje zložitosť O(log n), pretože výmena prebehne
maximálne toľkokrát, koľko je úrovní
Vyber: vyberie sa prvok s maximálnou prioritou (koreň), ktorý sa nahradí posledným
prvkom z poľa a následne znovu pomocou metódy swap sa vymieňajú vrcholy, pokým nie
je splnená podmienka. Zase platí, že zložitosť nadobúda O(log n), pretože výmena
prebehne maximálne toľkokrát, koľko je úrovní
Ukáž: vyznačuje sa zložitosťou O(1), pretože prvok s najvyššou prioritou sa nachádza
na nultom indexe v poli
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1.8 Dvojzoznam ako implementácia prioritného frontu


Obsahuje dva zoznamy: kratší, utriedený podľa priorít implementovaný poľom a dlhší,

neutriedený podľa priorít implementovaný LinkedListom. Prvky sa vkladajú do kratšieho,


pokým sa nezaplní. Ak už je zaplnený, sleduje sa priorita vkladaného prvku, a ak je vyššia ako
priorita prvku v kratšom zozname, tak prvok z kratšieho zoznamu bude vytesnený a zaradený
do dlhšieho zoznamu. Ak priorita je nižšia, tak sa hneď vloží do dlhšieho zoznamu. Pri
úplnom vyprázdnení kratšieho zoznamu nastáva reštrukturalizácia, čo znamená, že prvky
z dlhšieho zoznamu sa presunú do kratšieho zoznamu, z ktorého sa ale vyberú prvky
s najvyššou prioritou.

Vlož: ak vkladáme do kratšieho zoznamu, ktorý ešte nie je zaplnený, tak zložitosť je
O(1). Ak ale vkladáme do kratšieho zoznamu, ktorý je zaplnený a prvok je nutné z neho
vytesniť do dlhšieho zoznamu kvôli vyššej priorite vkladaného prvku, tak nastáva zložitosť
O(√n)
Vyber: táto operácia má podobnú filozofiu ako „vlož“. Pokiaľ vyberáme z kratšieho
zoznamu, ktorý ešte nie je prázdny, tak zložitosť je O(1). Ak ale už je prázdny, potrebuje
sa doplniť z dlhšieho zoznamu prvkami s najvyššou prioritou, a tento presun niečo stojí,
čo už naberá na zložitosti O(√n)
Ukáž: rýchle sprístupnenie prvku s najvyššou prioritou v kratšom zozname, O(1)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

1.9 Množina ako bitová mapa


Implementovaná pomocou vektora. Bázová množina obsahuje určité prvky, kde každý
prvok vie, na ktorom bite v rámci poľa bitov sa nachádza. Ak sa prvok v množine
nachádza, tak bit je nastavený na hodnotu 1, ak sa v množine nenachádza, tak je
nastavený na 0.

Vlož: natavenie hodnoty bitu na konkrétnej pozícii hodnotu 1, O(1)


Vyber: natavenie hodnoty bitu na konkrétnej pozícii hodnotu 0, O(1)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Patrí: zistenie, či sa na danom bite nachádza hodnota 1, O(1)


Je rovná: porovnanie dvoch množín, O(1)
Je podmnožinou: pri používaní bitových operácií sa vkladá ako parameter bajt, z toho
dôvodu je potrebný for cyklus, aby sme prešli všetky bajty, a tak nadobúda zložitosť O(n).
Sleduje sa, či prvky podmnožiny patria do množiny
Zjednotenie: princíp rovnaký ako pri „je podmnožinou“, množiny sa zjednotia
spôsobom, že všetky prvky nastavené na 1 v jednej aj v druhej množine vytvoria spoločnú
množinu všetkých zopnutých bitov, O(n)
Prienik: princíp rovnaký ako pri „je podmnožinou“, prienik dvoch množín znamená, že
vytvoria spoločnú množinu takú, len kde majú na rovnakých bitoch zopnuté bity, O(n)
Rozdiel: princíp rovnaký ako pri „je podmnožinou“, rozdiel dvoch množín sa vykonáva
tak, že ak druhá množina požaduje bit od prvej množiny, ak prvá množina daný bit má (je
zopnutý), tak potom z prvej množiny sa tento bit zoberie (nebude zopnutý)
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

2. Návrh testov a aplikácie

Po spustení aplikácie nám ponúka konzola jednoduché menu, kde je možné si vybrať,
aké ADT chceme testovať, potom štruktúru a následne si zvolíme scenár. Scenáre zo
zadania pre jednotlivé štruktúry sú vopred pripravené cez .csv súbor, ktorý sa pri
spustení načíta. Po načítaní sa každý typ ADT uloží na príslušnú pozíciu Arrayu, kde každá
pozícia obsahuje ArrayList scenárov.

Každá ADT má svoju testovaciu triedu, a tieto triedy dedia od spoločného predka
triedy Test metódy. Metóda vykonajTest(T paObjekt, Scenar* paScenar, int cisloTestu)
zaručuje, že do paObjekt príde štruktúra daného ADT zvolená v konzole, a do paScenaru
príde zvolený scenár. Táto metóda už v konkrétnych potomkoch vykonáva výber skupiny
metód na základe ich výskytu. Metóda starajúca sa o tento čin sa nachádza v triede
Scenar. Na základe vygenerovanej hodnoty v rozpätí od 0 po sumu výskytov sa
kontroluje, či aktuálny výskyt plus nasledovný výskyt skupiny nepresiahne vygenerovanú
hodnotu. Ak presiahne, tak sa nevyberie nasledujúca skupina, ale aktuálna. Po zvolenej
skupine sa vyberie konkrétna operácia v triede HodnotaScenara, kde sú operácie volené
náhodne.

Po výbere operácie sa môže ísť vykonať test operácie. Na to slúži metóda, ktorú tiež
potomkovia dedia od predka Test, vykonanieKonkretnejMetody(), kde ako parameter
prichádza zvolená metóda a štruktúra. Operácie sú testované z časového hľadiska v
nanosekundách pomocou knižnice <chrono>. Výsledok každej operácie sa ukladá na
príslušnú pozíciu podľa operácie do atribútu „doba“ typu Array, ktorý je tvorený
ArrayListom typu long long.

Po vykonaní určitého počtu opakovaní sa časové výsledky zapíšu do .csv súboru zo


spomínaného atribútu „doba“.
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

3. Popis štruktúry CSV súborov


S prvým .csv súborom sa stretneme hneď pri spustení aplikácie, kedy sa načítajú
scenáre zo zadania semestrálnej práce (default_scenare.csv). Jednotlivé bunky v .csv pri
načítaní sa oddeľujú bodkočiarkou. Prvá hodnota v každom riadku hovorí o tom, o aké ADT
ide (L – list, F – front, M – matica, B – bitová mapa). Na základe tejto hodnoty vieme ukladať
scenáre do ArrayListu scenárov pre list, front, atď., ktoré sú ešte obalené poľom. Ďalšia
hodnota v .csv súbore predstavuje počet skupín s metódami. Za ňou nasleduje číslo, ktoré
predstavuje počet operácií v skupine. Potom nasleduje hodnota, ktorá udáva výskyt skupiny.
Za týmto číslom sa vypíšu od 0 po počet operácií v skupine mínus jedna hodnoty. Po týchto
hodnotách nasleduje znovu číslo, ktoré predstavuje počet metód v ďalšej skupine, výskyt
skupiny, a následne budú hodnoty od počet metód plus počet metód nasledujúcej skupiny
mínus jedna. Každá táto hodnota bude zastupovať danú operáciu v poradí, akom sú
zverejnené v zadaní semestrálnej práce v tabuľkách pre jednotlivé ADT (odvrchu[0] po
spodok[n], pozn.: nezahŕňa vytvor a zruš).

Čo sa týka zapisovania dát do .csv súboru, tak vždy od spustení aplikácie sa budú .csv
súbory číslovať od nuly po počet testov, koľko sa ich vykoná za bez aplikácie. Do súboru sú
dáta zapisované po riadkoch. Prvý riadok vždy indikuje, aké operácie sa vykonali (typ
operácie), a pod každou operáciou sú zapísané príslušné dáta zodpovedajúce operácii.
Následne sa zapisujú číselné dáta, ktoré sú oddelené bodkočiarkou ako pri čítaní.

4. Metodika spracovania výsledkov testov


Spracovanie dát prebiehalo pomocou programu MS Excel. Pre každú testovanú
štruktúru bolo potrebné získať určité informácie. Každá štruktúra podporuje svoje operácie,
a pre každú túto operáciu sa z testovania vytvorili unikátne dáta. Pre náš účel som si zvolila
spracovávať dáta tak, že si vyhodnotím celkovú časovú dĺžku každej operácie (suma časov),
maximálny čas vyskytovaný medzi operáciami zo sumy časov a minimálny čas vyskytovaný
medzi operáciami zo sumy časov. Nakoľko sú merané hodnoty v nanosekundách veľké čísla,
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

rozhodla som sa ich prekonvertovať pri prezentácii výsledkov na časovú jednotku


milisekundy. Všetky súhrnné dáta sa nachádzajú v „SpracovanieDat.xlsx“.

5. Prezentácia výsledkov a závery vyplývajúce z testovania


5.1 ADT Zoznam
Test pri ArrayListe scenár A trval celkovo 6 545 507 ms. Najväčší časový podiel má
operácia „index prvku“, 6 522 521 ms, nakoľko má zadaný najmenší výskyt. Najmenší
časový podiel má operácia „vlož posledný“, 564 ms, kvôli rýchlemu prístupu k prvkom cez
index.
Test pri ArrayListe scenár B trval celkovo 6 050 184 ms. Aj v tomto prípade je „index
prvku“ najviac časovo náročný, aj keď má najmenší podiel výskytu. Najmenej časovo
náročná je operácia „vlož prvý“ so 100 ms. Je to celkom netypické, keďže operácia má
zložitosť O(n).
Test pri ArrayListe scenár C trval celkovo 31 348 332 ms. Znovu najväčší časový podiel
zastupuje „index prvku“ s 31 310 447 ms. Tentokrát má prvá a druhá skupina v scenári
najväčší výskyt, takže pri predpoklade, že sa vložilo najviac prvkov zo všetkých scenárov,
tak aj operácia „index prvku“ musí prehľadávať dlhší zoznam ako pri ostatných
scenároch, a tým je sa vyznačuje maximálnou hodnotou zo všetkých scenárov. Najmenší
časový podiel predstavuje „sprístupni“ s 399 ms.
LinkedList scenár A trval celkovo 114 071 ms. Najväčšie časové zastúpenie má
operácia „sprístupni“ s 31 025 ms, a hneď za ňou „nastav“. Je to kvôli prehľadávaniu
zoznamu, nakoľko je zreťazený a nepristupuje sa k prvkom pomocou indexov.
Musí sa brať do úvahy, že v scenári mali najväčší výskyt. Najvýkonnejšia operácia je „vlož
posledný“ so 40 ms.

LinkedList scenár B trval celkovo 117 749 ms. Najväčšie časové zastúpenie má
operácia „index prvku“, 35 572 ms, aj napriek tomu, že má v scenári najmenší výskyt.
Ostatné skupiny majú výskyt rovnaký, takže porovnávanie je viac rovnocenné. Najmenší
časový podiel predstavuje operácia „vlož posledný“ s 91 ms.
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

LinkedList scenár C trval celkovo 126 013 ms. Tu sa dá rovnocenne porovnávať prvá
a druhá skupina scenára, kde najväčší časový podiel získava operácia „zruš posledný“ so
46 572 ms. Najrýchlejšia operácia s časom 127 ms je „vlož posledný“.
OC LinkedList scenár A trval celkovo 20 9761 ms. Najväčší časový podiel má operácia
„index prvku“ s 83 068 ms pri najmenšom výskyte v scenári. Najmenší má operácia „zruš
prvý“ so 101 ms.
OC LinkedList scenár B trval celkovo 93 592 ms. Ako v predchádzajúcom scenári, aj
teraz má „index prvku“ najväčší časový podiel so 44 987 ms a najmenší je „vlož posledný“
so 113 ms.
OC LinkedList scenár C trval celkovo 50 741 ms. Do tretice, aj tentokrát má „index
prvku“ najväčší časový podiel s 21 054 ms. Najmenší časový podiel zastupuje operácia
„vlož posledný“ so 117 ms.

Môžeme zhrnúť, že „najhoršia“ operácia takmer pri všetkých štruktúrach je „index


prvku“. Všeobecne najlepšia operácia pri zoznamoch je „vlož posledný“. Medzi
najrýchlejšiu štruktúru môžeme považovať OC LinkedList, kde celkový čas trvania pri
scenároch je najkratší, až na výnimku scenáru A, kde najväčší výskyt mali operácie
„sprístupni“ a „nastav“ a z tohto dôvodu nevyrovnanosti výskytov by som sčasti tento čas
abstrahovala.

5.2 ADT Prioritný front


PQ LinkedList scenár A trval celkovo 1 609 098 ms. Najviac časovo zastúpená je
operácia „vyber“ s 1 314 874 ms. Najmenej časovo zastúpená je operácia „vlož“ s 850 ms.
PQ LinekdList scenár B trval celkovo 2 1582 134 ms. Znovu ako pri predchádzajúcom
scenári má najväčší časový podiel operácia „vyber“ s 10 803 720 ms a najmenší má taktiež
operácia „vlož“ so 796 ms.
Ľavostranná halda scenár A trval celkovo 820 558 ms. Najväčší časový podiel
predstavuje operácia „vyber“ so 437 867 ms. Najmenší časový podiel má operácia „ukáž“ s 
1 498 ms.
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Ľavostranná halda scenár B trval celkovo 653 450 ms. Časové zastúpenie je rovnaké
ako pri ľavostrannej halde scenár A, čiže najväčšie má operácia „vyber“ s 330 103 ms,
a najmenšie „ukáž“ s 3 574 ms.
Dvojzoznam scenár A s kapacitou krátkeho zoznamu 700 trval celkovo 115 802 ms.
Najväčší časový podiel má operácia „vlož“ s 101 199 ms. Najmenší časový podiel získava
operácia „ukáž“ s 2 100 ms.
Dvojzoznam scenár B s kapacitou krátkeho zoznamu 700 trval celkovo 183 075ms.
Najdlhšie trvajúcou operáciou je „vlož“ s 157 946 ms, a najkratšie trvajúcou je operácia
„ukáž“ s 6 557ms.

Pri prioritných frontoch majú štruktúry najhoršiu operáciu „vyber“ okrem


dvojzoznamu. Je to z dôvodu, že buď sa musí prehľadať celý front (PQ LinkedList), alebo sa
prvky pri výbere maximálnej priority presúvajú (halda). Pri dvojzozname je považovaná za
najhoršiu operáciu „vlož“, keďže do kratšieho zoznamu sa presúva aj väčšie množstvo prvkov
z dlhého zoznamu. Operácia „ukáž“ je najlepšia pri dvojzozname a halde, pretože pri halde sa
vždy nachádza na nultom indexe, a pri dvojzozname sa nachádza vždy v krátkom zozname.
Pri PQ LinkedList je najlepšou operáciou „vlož“, pretože je to neutriedený front a prvky sa
vkladajú vždy na koniec frontu. Z celkového času môžeme považovať dvojzoznam za lepšiu
alternatívu.

5.3 ADT Viacrozmerné pole – matica


Súvislá matica o veľkosti 4x5 s výskytom scenárov sprístupni 70, nastav 30, trvala
celkovo 10 390 ms. Operácia „nastav“ má časový podiel 7 197 ms, operácia „sprístupni“
2 193 ms.
Nesúvislá matica o veľkosti 4x5 s výskytom scenárov sprístupni 70, nastav 30, trvala
celkovo 27 722 ms. Operácia „nastav“ na vyznačuje celkovým časom 19 176 ms, operácia
„sprístupni“ s časom 8 545 ms.
Súvislá matica o veľkosti 1000x2000 s výskytom scenárov sprístupni 50, nastav 50,
trvala celkovo 55 929 ms. Kratší čas má operácia „sprístupni“ so 4 922 ms. Dlhší čas
predstavuje operácia „nastav“ s 51 006 ms.
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Nesúvislá matica o veľkosti 1000x2000 s výskytom scenárov sprístupni 50, nastav 50,
trvala celkovo 26 789. Operácia „nastav“ má časový podiel 13 188 ms, a operácia
„sprístupni“ 13 601 ms.

Počet operácií sa zvolil na 1 000 000. Môžeme si všimnúť, že celkové trvanie testu


závisí od veľkosti matíc. Pri prvých dvoch testoch vyhráva časovo súvislá matica, aj s obomi
operáciami. Už ale pri posledných dvoch testoch, ako sa zväčšila veľkosť matíc, tak si celkovú
časovú rolu vymenili. Síce operácia „sprístupni„ je omnoho rýchlejšia pri súvislej pamäti od
operácie „nastav“, v nesúvislej je to naopak, ale rozdiel nie je taký obrovský. Môžeme
detegovať, že čím je matica väčšia, tak tým je pre ňu lepšie usporiadať ju do nesúvislej
pamäte.

5.4 Množina ako bitová mapa


Pri bázovej množine o veľkosti 13 a výskytov vlož-vyber-patrí 40, je rovná-je
podmnožinou-zjednotenie 30, rozdiel-prienik 40, je celkové trvanie testu 21 711 ms.
Najdlhšie trvajúca operácia je „rozdiel“ s časom 7 071 ms, najkratšie trvajúca je operácia „je
rovná“ a to je 37 ms.
Pri bázovej množine o veľkosti 1001 a výskytov vlož-vyber-patrí 40, je rovná-je
podmnožinou-zjednotenie 30, rozdiel-prienik 40, je celkové trvanie testu 1 096 001 ms.
Najviac časové zastúpenie má operácie „prienik“ so 436 335 ms, s operáciou „rozdiel“ je čas
takmer rovnaký. Operácia „je rovná“ má najmenší časový podiel, a to 67 ms.
Pri bázovej množine o veľkosti 101 a výskytov vlož-vyber-patrí 40, je rovná-je
podmnožinou-rozdiel 50, zjednotenie-prienik 30, je celkové trvanie testu 91 480 ms.
Najdlhšie trvajúcou je operácia „rozdiel“ s 31 456 ms, najkratšie trvajúcou je „je rovná“
so 65 ms.
Pri bázovej množine o veľkosti 1001 a výskytov vlož-vyber-patrí 40, je rovná-je
podmnožinou-rozdiel 50, zjednotenie-prienik 30, je celkové trvanie testu 787 756 ms. Znovu
sa opakuje, že operácia „rozdiel“ je najpomalšia operácia s 283 314 ms, a operácia „je rovná“
je najrýchlejšia so 71 ms.
Žilinská univerzita v Žiline
Fakulta riadenia a informatiky

Veľkosť bázovej množiny má vplyv na časovú zložku operácií. V každom scenári môžeme
zhodnotiť, že operácia „rozdiel“ je najhoršou operáciou, a operácia „je rovná“ je najlepšia
operácia. Do horšej skupiny operácií môžeme považovať operácie „rozdiel“, „prienik“,
„zjednotenie“. Medzi lepšie by sa radili „vlož“, „vyber“, „patrí“.

5.5 Dvojzoznam – vplyv kapacity kratšieho zoznamu na štruktúru


Testy boli robené na kapacite 10, 100, 1 000, 10 000, 100 000, 500 000 a výskyte
všetkých troch operácií 40. Najviac trvajúci celkový čas je pri kapacite 10, a to 269 462 ms.
Zápornou stránkou je, že operácia „vyber“ trvá 221 633 ms. Ale zato najkratšia operácia zo
všetkých „vlož“ scenárov. Ako sa kapacita zvyšuje, tak zvyšuje sa aj časový podiel pri operácii
„vlož“ a znižuje časový podiel pri operácii „vyber“. Pri kapacite 500 000 je operácia „vlož“
o časovej výkonnosti 69 554 ms a „vyber“ o 7 139 ms. Jej celkový čas je 81 871. Operácie
„ukáž“ pri kapacitách je minimum 5 178 ms a maximum 6 209 ms. Nie je to relatívne veľký
rozdiel, ale ak by sme brali túto operáciu ako za rozhodujúcu, tak by vyhrala kapacita
o veľkosti 500 000. Ak by sme sa rozhodovali podľa celkového času, tiež by vyhrala kapacita
500 000, ale s tým, že operácia „vlož“ by bolo pomalá. Ak by sme chceli ako taký zlatý stred
čas všetkých operácií mať vyrovnaný, tak by som volila buď kapacitu 1 000 alebo 100 000.
Majú primerane podobné všetky operácie, aj celkový čas, a tu by som považovala za
rozhodujúci faktor operáciu „vlož“, pretože lepšia časová náročnosť je pri 1 000 (71 566 ms),
ale horšia pri 100 000 (72 445). Nakoľko ale ostatné operácie pri 100 000 sú lepšie ako pri
1 000.

You might also like