You are on page 1of 13

Zložitosť

je to funkcia, ktora reprezentuje ako sa bude zlozitost algoritmu spravat vzhaldom na mnozstvo dat.

Udava pocet krokov ktore su potrebne na docielenie algoritmu


Počet operácií vykonávaných v algoritme.

Zložitosť (časová aj pamäťová) sa vyjadruje pomocou funkcií, ktorých argumentom je množstvo dát.

Existujú kritériá umožňujúce vzájomné porovnanie:

 Čas potrebný k vykonaniu algoritmu – časová zložitosť algoritmu.

 Veľkosť pamäťového priestoru potrebného k realizácií algoritmu – pamäťová zložitosť algoritmu.

Cieľom je minimalizovať hornú asymptotickú zložitosť algoritmu.


Stromy
 Koreň (nemá otca)
 Priamy predok – otec
 Priamy potom – syn
 Vútorný vrchol – má potomkov
 List – nemá potomkov (nemá syna)

Môžu byť :
Usporiadané – najstarší syn, mladší brat
Neusporiadané – neusporiadaní potomkovia

Plný k-cestný – buď žiadneho syna alebo k-synov


Perfektný k-cestný – nič mu nechýba, všetky vrcholy majú rovnakú hĺbku a všetky vnútorné vrcholy
majú stupeň k
Kompletný – listy majú hĺbku n alebo n-1, všetky listy s hĺbkou n ležia vľavo

Viaccestný strom – každý vrchol obsahuje:


Dáta,
Odkaz na otca,
Odkazy na synov organizované v zozname (zoznam lebo neviem koľko bude synov)

K—cestný – nemá synov v zozname ale v poli


Binárny strom – má iba dvoch potomkov (ľavý / pravý syn)
Unárny strom – má iba odkaz na svojho otca
- Potrebné poznať listy stromu

Prehliadky:

PreOrder

- V priamom poradí
- Prehliadka do hĺbky
- Najskôr vrchol, potom všetkých synov (cele vetvy)

PostOrder

- Prehliadky v spätnom poradí


- Prehliadky do hĺbky
- Najskôr synov, potom vrchol
(ak nemáš syna vypíš)

InOrder

- Prehliadka do hĺbky
- Najskôr ľavého syna potom seba a nakoniec pravého

LevelOrder

- Prehliadka po úrovniach
- Prehliadka do šírky, využíva front
Tabuľky
IMPLICITNE IMPLEMENTACIE TABULIEK
Prvok je charakterizovaný dátami a jednoznačným kľúcom.

Každý kľúc sa môže v tabuľke vyskytovať iba raz.

Kľúč môže byť

- Prirodzený – niektorý z atribútov má vlastnosť kľúča (unikátny) (rod. Číslo)


- Umelý – tvorí umelo definovaný atribút (nejaké ID)

Zruš: vymení prvok s posledným a ten odstráni

Nájdi:

Neutriedená: postupne prechádza všetky prvky hľadá prvok s kľúčom.

Utriedená: využíva bisekciu (polenie intervalov, interpolačné vyhľadávanie)

Interpolačné vyhľadávanie

- Aplikovateľné iba v implicitných sekvenčných utriedených štruktúrach


- Pracuje na princípe polenia intrevalov
- Na zaćaitku je interval celé pole
- Pokúsi sa nájsť prvok v strede intervalo, ak sa nepodarí, zopakuje hľadanie na ľavom ( ak je
kľúc menší ako kľúč v strede) alebo na pravom (v opačnom prípade)
- Vylúčí polovicu prvkov – logaritmická zložitosť

KUT

Predchodcovia prvku (ľavý horný a ľavý doľný) majú menšiu


hodnotu kľúča,

Nasledovníci (pravý horný, pravý dolný) majú väčšiu hodnotu


kľúča)
EXPLICITNE IMPLEMENTACIE TABULIEK
Zreťazená tabuľka

Nemá význam držať tabuľku utriedenú.

Tabuľka implementovaná zoznamom.

Oplatí sa len keď máme malý počet dát, inak začína byť neefektívna.

Binárny vyhľadávací strom

Je to tabuľka ! Nie strom !

Každý vrchol stromu obsahuje navyše informácie o kľúči a dátach.

Pre každý vrchol v BVS platí:

- V ľavom podstrome sa nachádzajú vrcholy ktoré su menśie ako koreň


- V pravom podstrome sa nachádzajú vrcholy ktoré sú väčšie ako koreň

Môže degenerovať!!!! (Ak nemá správne dáta.)

Vymaž, ak 1 syna – prepojí, ak 2 synov, prehliadkov in order

In order následovník – raz do prava a potom doľava kým môžem

In order predchodca – raz do ľava a potom doprava kým môžem

Môžem si vybrať in order predchodca alebo in order nasledovník.

Treap

Je binárny vyhľadávacím stromom s haldovým usporiadaním.

Haldové usporiadanie – prvky sa ukladajú zľava, otec má vyššiu prioritu alebo rovnú ako synovia.

- Snaží sa strom balancovať – aby nedegeneroval.

Každý vrchol okrem ukazovateľov na otca a synov, bude obsahovať prioritu. – cena za väčšiu
pamäťovú zložitosť – zefektívnenie zložitosti.

Prioritu prisdzuje dátam náhodne treap – na obrovskom intervale náhodne. (neriešime prioritu –
nemusí byť unikátna)

Treap nezaručuje že bude perfektne usporiadaný – všetko záleží od toho aké hodnoty dostane
z generátora.

Vlož: Ak má prvok väčšiu prioritu ako jeho otec, rotujem v smere otca.

Nájdi: totožná s BVS

Zruš: Nastavím vymazávanému prvku max prioritu a prerotovať ho až na list.


Rotácie v treape

V ľavom podstrome V, je určite menší kľuč, takže musím pri rotácií dať V do pravého pod

V pravom podstrome je určite väčší kľúč takže V musím dať ako ľavého syna.

Vymazávanie: nastavím prvku priroitu na INF premiestním ho smerom dolu.


Zložitosti
Hashovacia tabuľka:

Vlož: O(1)

Zruš: O(1)

Nájdi: O(1)

-Podľa toho aká je použitá hashovacia funkcia a záleží aj od toho ako sú riešené kolízie, najlepšie
z riešení je reťazenie.

Sekvenčná utriedená tabuľka:

- Založená na poli

Vlož: O(N) - posúvať prvky v tabuľke

Zruš: O(N) – posúvať prvky v tabuľke

Nájdi: O(log N) - bisekcia

Sekvenčná neutriedená tabuľka:

Vlož: O(1) – vkladám na koniec (nezisťujem či mám duplicitný kľúč – ak áno O(N))

Zruš: O(1) (ak nezarátava m nájdi, ak áno O(N))

Nájdi: O(N)

Kosoštvorcovo utriedená tabuľka:

Vlož: O(Sqrt(N))

Zruš: O(Sqrt(N))

Nájdi: O(Sqrt(N))

Binárny vyhľadávací strom

Vlož: O(log N) až O(N) – bisekcia

Zruš: O(log N) až O(N) - bisekcia

Nájdi: O(log N) až O(N) - bisekcia

O(N) pri degenerácií – stále pridávam väčšie ako koreň alebo menšie ako koreň.

*Operácia zruš nezahŕňa vyhľadávanie prvku.

*Operácia vlož prvok nezahŕňa kontrolu unikátnosti.


Zreťazená tabuľka

Vlož: O(1)

Zruš: O(1)

Nájdi: O(N)

Treap

Vlož: O(log N)

Zruš: O(log N)

Nájdi: O(log N)

Všetko závisí od toho aké hodnoty generuje generátor.


Triedenie tabuliek
Proces preusporiadania množiny objektov v špecifickom poradí.

Na množine kľúčov musí byť definované úplne usporiadanie. (všetky relačné operátory)

Select Sort

Na mieste - neutralny O(N2)

Insert Sort

O(N2)

Na mieste, prirodzeny.

Bubble Sort

O(N2) – najhoršie keď sú od najväčšieho po najmenší.

- Na mieste, prirodzený, stabilný


Efektívnejšie sorty:
Quick Sort

O(N*log2N) – O(N2)

Zložitosť závisi od výberu pivota. Ak sa vyberie medián, zložitosť je logaritmická ak maximum alebo
minimum, zložitosť je N2.

Nedá sa povedať či je prirodzený alebo neprirodzený.

- Na mieste

Heap Sort

O(N*log2N)

Stojí na ľavostrannej halde. Dávam do haldy vyberám a triedim.

Nieje na mieste, neutrálny.

Radix sort

O(k*N)

Podľa 1, 10, 100 – FIFO.

-nieje na mieste

-neutrálny

Merge Sort

O(N*log2N)

Dvojice, štvorice, osmice..... atď porovnávam 2 prioritné fronty medzi sebou, menší prvý prvok
vyberám.

-nieje na mieste

-neutrálny

Shell Sort

O(N1,2)

Rozdelím si množinu prvkov do 3 tabuliek.

-nie je na mieste

-neutrálny
Stack vs Heap
Stack skladá dáta na seba, posúva stack pointer a ukladá dáta zaradom.

Heap ukladá dáta náhodne. Musí prehľadávať free list, nájsť dostatočne veľký blok.

Stack je o dosť rýchlejší ako heap.

Stack sa vymaže sám po ukončení aplikácie.

Blok v stacku – rámec.

Adresou, odkazom(najefektivnejsi), poslem objekt.

Heap musíme ručne vymazávať a uvoľnovať pamäť.

New – malloc ( memory allocation)


Dvojrozmerné

You might also like