ALGORITMID JA ANDMESTRUKTUURID Jüri Kiho Jyri.Kiho@ut.ee http://www.cs.ut.ee/~kiho/ads/fall08
Teemad Algoritmi ajalise keerukuse mõiste. Funktsiooni asümptootilised hinnangud. Sorteerimise pistemeetod. Sorteerimise kiir- ja ühildusmeetod. Sorteerimise erimeetodid. Sorteerimisülesande ajalise keerukuse alampiir. Järjestikpaigutus ja seotud paigutus. Paisksalvestus. Välisahelate ja lahtise adresseerimise meetodid. Puu ja kahendpuu. Algoritmid kahendpuu ja vastava hariliku puu töötlemiseks. Kahendotsimise puu. AVL-puu. B-puu. Klasside kujutamine. Kahendkuhi. Binomiaalkuhi. Alamsõne otsimine, Knuth-Morris-Pratti algoritm. Alamsõne otsimine, Rabin-Karpi algoritm. Teksti pakkimine, Huffmani algoritm. Pikima ühise osasõna otsimine.
Eeldusgraafi analüüsimine. Graafi sügavuti läbimine. Graafi laiuti läbimine, Dijkstra algoritm. Graafi minimaalne toes, Kruskali algoritm. Graafi minimaalne toes, Primi algoritm. Planimeetria, pseudo-tõusunurga ja pöörde suuna leidmine. Planimeetria, punkti hulkurka kuuluvuse kontrollimine. Planimeetria, Grahami seiremeetod. Planimeetria, vähima vahemaaga punktipaari leidmine.
Kirjandus Jüri Kiho. Algoritmid ja andmestruktuurid. Kolmas, parandatud ja täiendatud trükk. TÜ, 2003, 147 lk. 2. Jüri Kiho. Algoritmid ja andmestruktuurid. Ülesannete kogu. TÜ, 2005, 31 lk. 3. Ahti Peder, Helle Hein, Lauri Kimmel. Objektorienteeritud programmeerimine. Praktikumijuhend. TÜ, 2006, 82 lk.
Eksam Eksamile pääsemiseks peavad kõik praktikumiülesanded olema arvestatud. Eksam on kirjalik (paberil). Kaasa võtta kirjutusvahend. Kõrvalist abi, kirjalikke materjale ega elektroonikaseadmeid ei tohi kasutada. Eksamiküsimused nõuavad vastust kas lühiessee kujul või testi vormis. Eksami temaatika – vt Kordamisküsimused (viimane slaid).
I. Algoritmi ajaline keerukus: funktsioon f, mis igale selle algoritmi järgi lahendatavale konkreetsele ülesandele andmemahuga n seab vastavusse selle lahendamisel sooritatavate algoritmi sammude arvu f(n).
II. Ajalise keerukuse hinnangud Olgu funktsioonid f ja g positiivsete väärtustega ja naturaalarvuliste argumentidega funktsioonid. Def. Öeldakse, et f on O(g), kui leidub c > 0 nii, et f (n) c g(n) , iga n korral (n > 0). Def. f on Ω(g), kui g on O(f). Def. f on Θ(g), kui f on O(g) ja g on O(f). f (n)/g(n) c f (n)/g(n) c1 ja g(n)/f(n) c2
O-relatsiooni omadused Keerukusklassid NP-täielike ülesannete klass
III. Massiivi sorteerimine Pistemeetod Insertion sort [1]-4.1 Ka AlgJava > Abi > Programmeerimine > Teemad > Järjend/massiiv > Sorteerimine > MassiivSortArvud.algjava Võrdlemistel põhinevate sorteerimisalgoritmide ajalise keerukuse alampiir Shelli meetod Shell sort [järgmine slaid] Kiirmeetod Quick sort [1]-4.2 Ühildusmeetod Merge sort [1]-4.3 Loendamismeetod Count sort [1]-4.5 Positsioonimeetod Radix sort [1]-4.5 Sorteerimismeetodi stabiilsuse mõiste Leksikograafilise järjestuse mõiste Ka AlgJava > Abi > Programmeerimine > Teemad > Sõnetüüp > Sõnetöötlus Sõnede võrdlemine> SõnedeVõrdlemine.algjava
IV. Graaf Graafi mõiste [1]-2.4 Graafi tippude topoloogiline sorteerimine Eeldusgraafi analüüsimine [1]-6.1
Graafi läbimine [1]-6.3 Graafi sügavuti läbimine Tee otsimine Graafi laiuti läbimine Otseteede leidmine Lühimate teede leidmine, Dijkstra algoritm [1]-6.2 Minimaalse toese leidmine, Primi algoritm [1]-6.4
V. Puu [1]-2.3 Puu mõiste Kahendpuu mõiste Kahendpuu läbimine Puule (metsale) vastav kahendpuu Täielik kahendpuu, kompaktne kahendpuu Binomiaalpuu
VI. Kuhjad [1]-3.4 Kahendkuhi Binomiaalkuhi
VII. Otsimispuud Kahendotsimispuu [1] - lk 28-32 AVL-puu [1] - lk 33-34 B-puu [1] - lk 35-38
VIII. Paigutusviise Järjestikpaigutus ja seotud paigutus [1] - lk 41-44 Päisega/päiseta lihtahel/ringahel Magasini/järjekorra realiseerimine ahelana Päisega lihtahela sorteerimine (kas pistemeetodil [1] – lk 61 või ühildusmeetodil [1] – lk 68-69) Paisksalvestus [1] - lk 45-48 Klasside kujutamine: Galler-Fischeri meetodi idee [1] - lk 49 Graafi minimaalse toese leidmine, Kruskali algoritm [1]-6.4
IX. Kombinatoorika Hulga alamhulgad kõikide alamhulkade hulk seljakotiülesanne m kaupa kombinatsioonide hulk Permutatsioonid
s = kiho tulem.length = 16 tulem[]: _ o h ho i io ih iho k ko kh kho ki kio kih kiho
s = jkiho mask = 13 = 1101 tulem: kio 2
s = jkiho m = 3 tulem: iho kho kio kih jho jio jih jko jkh jki
n = 4 tulem[]: 1234 1243 1423 4123 1324 1342 1432 4132 3124 3142 3412 4312 2134 2143 2413 4213 2314 2341 2431 4231 3214 3241 3421 4321
X. Pikima ühise osasõne otsimine [1] – 5.3 Sõne kõikide osasõnede leidmisel põhinev algoritm Omadustel põhinev eksponentsiaalne rekursiivne algoritm Omadustel põhinev ruutkeerukusega, dünaamilise kavandamisega algoritm
s = jürikiho t = ohikirüj PYotse(s, t) = iki
aeg n 8 9 10 11 12 13 14 15 |s| = |t| = n
XI. Alamsõne otsimine [1] – 5.1 Lihtne algoritm Knuth-Morris-Pratti algoritmi idee, prefiksfunktsiooni mõiste Rabin-Karpi algoritmi põhiidee
Kordamisküsimused Algoritmi ajaline keerukus. Ajalise keerukuse hinnangud. Keerukusklassid. Sorteerimise pistemeetod. Sorteerimise kiirmeetod ja ühildusmeetod. Sorteerimise loendamismeetod ja positsioonimeetod. Magasin, järjekord, eelistusjärjekord. Järjestikpaigutus ja seotud paigutus. Paisksalvestus. Välisahelate ja lahtise adresseerimise meetodid. Puu ja kahendpuu. Binomiaalpuu. Kahendotsimise puu. AVL-puu. B-puu. Klasside kujutamine: Galler-Fischeri meetodi idee. Kahendkuhi. Binomiaalkuhi. Alamsõne otsimine: Knuth-Morris-Pratti algoritmi idee. Alamsõne otsimine: Rabin-Karpi algoritmi põhimõte. Kombinatoorika: hulga alamhulkade hulk. Seljakotiülesanne. Kombinatoorika: kombinatsioonid, permutatsioonid Pikim ühine osasõne. Omadused. Pikima ühise osasõna otsimine rekursiivselt. Pikima ühise osasõna otsimine dünaamilist kavandamist kasutades. Graafi tippude topoloogiline järjestus. Eeldusgraafi analüüsimine. Graafi sügavuti läbimine: teede otsimine. Graafi laiuti läbimine: Dijkstra algoritm. Graafi minimaalne toes: Primi algoritmi idee. Graafi minimaalne toes: Kruskali algoritmi idee. Planimeetria erivõtteid: pseudo-tõusunurk, pöörde suund. Planimeetria: Grahami seiremeetod.