Seminarska naloga - 1.del
Navodila
Pri tem delu seminarske naloge iz podatkovnih struktur in algoritmov pri DIRI
2005/6 boste spoznali podatkovne strukture ali algoritme, ki jih na predavanjih ne bomo obravnavali. Na osnovi navedenih referenc (in tiste literature, ki jo boste poiskali sami) boste predstavili podatkovno strukturo/algoritem. Knjige so vse na voljo bodisi v Matematični knjižnici, bodisi pri Matiji Lokarju, kjer si lahko ustrezne strani skopirate. Sama predstavitev zajema
razlago same teme in ilustracije uporabe te podatkovne strukture oziroma algoritma.
Končni izdelek mora biti v obliki HTML strani, katere predlogo dobite tukaj.
(kompletno v ZIP) - tam si preberite tudi
natančnejši
opis, kaj je potrebno narediti.
Osnovna ideja seminarske naloge je, da temo razložite tako, da
bo bralec razumel zakaj gre in vsaj v principu znal potem algoritem oziroma
podatkovno strukturo uporabiti! Pri tem predpostavite, da ima približno tako
poznavanja podatkovnih struktur in algoritmov kot vi - torej kot slušatelj DIRI.
Ne pišite preveč zapleteno - vse, kar napišete, morate zagotovo dobro razumeti!
Če iz referenc enostavno prevajate in stvari ne premislite dobro, bodo težave.
Namreč pogosto pozabimo, da je določen pojem, prijem, bil v originalnem besedilu
razložen že prej, ali pa je ciljna publika druga, predznanje drugo, ... Skratka
zadevo obdelajte pedagoško korektno!
Iz danega seznama si izberite ustrezno temo. Če izbrana tema ni označena kot zasedena (ni napisana rdeče), pošljete rezervacijo (na
Matija.Lokar). Če bo sprejeta, boste obveščeni. Če imate posebno željo, da bi opisali kakšen algoritem/strukturo, ki ni na voljo, pošljite pošto in se bomo dogovorili. Temo lahko naknadno tudi zamenjate, če pošljete ustrezni predlog, kjer poveste kaj NE boste in kaj BI delali.
Če vam nobena od spodaj naštetih nalog ni všeč, si lahko izberete tudi tiste, ki
so navedene
tukaj in so označene kot neizbrane! V tem primeru jo rezervirate s pripombo,
da je vzeta iz R2!
Pri seminarski nalogi je nujen, važen in oh
in sploh pomemben del PRIKAZ (lepa razlaga, čimbolj ilustrativna) delovanja
algoritma na enem (ali še bolje več) konkretnem zgledu - npr. če bi pisali sem.
nalogo iz odstranjevanja največjega elementa kopice bi na primer za kopico
123 56 48 56 12 40 36 10 5 6 pokazali, kaj se dogaja ob izločanju 123.
Primeri dobro narejenih nalog:
Programov (npr. v Javi) ni potrebno pisati (le
predstaviti ideje!) - razen pri 10 in 11 , seveda pa to ni prepovedano!
Seznam tem za seminarsko nalogo
Topološko sortiranje
Vhodni podatek algortmu je usmerjen acikličen graf. Naloga algoritma je, da uredi vozlišča v grafu v tak vrstni red, da se izvor vsake povezave pojavi pred ponorom. Za reference glej:
-
internetna referenca
-
internetna referenca
-
Knuth D. E. Fundamental Algorithms, vol. 1 of The Art of Computer Programming, second edition
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
-
Robert Sedgewick Algorithms in Java (Part 5)
Verjetnostni algoritem za preverjanje praštevilskosti
Iskanje praštevil je zelo zapleten postopek. Še do nedavnega ni obstajal polinomski algoritem za preverjanje, ali je število praštevilo ali ne. Zato so se velikokrat uporabljali t.i. verjetnostni algoritmi, ki so z veliko
verjetnostjo zelo hitro povedali, ali je število praštevilo ali ne (včasih pa se zmotijo in sestavljeno število označijo za praštevilo). Naloga bo pregledati enega izmed teh algoritmov, in sicer Rabin-Millerjev algoritem.
Reference:
B-drevesa
B-drevesa so taka drevesa, v katerih ima koren lahko več kot dva sinova.
Opišite, ilustrirajte in razložite osnovne operacije nad to podatkovno
strukturo. Opisati bo potrebno ustrezen razred, ki je implementacija B-drevesa in
sestaviti nekaj algoritmov, s katerimi boš ilustriral uporabo teh dreves. Reference:
Rdeče-črna drevesa
Rdeče-črna drevesa so dvojiška iskalna drevesa, kjer s pomočjo določenih operacij dosežemo, da se drevo ne izrodi preveč. Sicer se lahko izrodi bolj kot AVL drevo, a je
rdeče-črna drevesa zato veliko lažje implementirati. Opišite, ilustrirajte in
razložite osnovne operacije nad to podatkovno strukturo. Opisati bo potrebno
ustrezen razred, ki je implementacija tega drevesa in sestaviti nekaj
algoritmnov,
s katerimi boš ilustriral uporabo teh dreves. Reference:
Optimalno dvojiško iskalno drevo
Optimalno iskalno dvojiško iskalno drevo zgradimo takrat, kadar iščemo elemente in vemo, kako pogosto bomo iskali določen element. Seveda si želimo, da bi bili pogosteje iskani elementi
hitreje dostopni kot tisti, ki se bodo iskali redko, saj bomo tako prihranili kar nekaj časa. To nam naredi algoritem za gradnjo optimalnega iskalnega dvojiškega drevesa. Referenca:
Vrsta s prednostjo
Vrsta s prednostjo je vrsta, kjer operaciji
vrh() in
odstrani() vrneta/odstranita največji element v vrsti. Ena izmed učinkovitih
implementacij vrste s prednostjo je s kopico. Opišite, ilustrirajte in razložite
osnovne operacije nad to podatkovno strukturo. Opisati bo potrebno ustrezen
razred, ki je implementacija te strukture in sestaviti nekaj algoritmov, s
katerimi boš ilustriral uporabo teh dreves. Reference:
Generiki v jeziku Java
V jeziku Java smo že uporabili sklad nizov, celih števil... Da ne bi za vsak tip posebej pisali
svojega sklada, nam Java 1.5 prinaša nov koncept - generike (generics).
Preberi si dokumentacijo o generikih. Prikaži kako generike uporabljamo, navedi
veliko ilustrativnih zgledov in z uporabo generikov predstavi strukturo
Dvojiško Drevo, v katerem lahko hranimo katerekoli podatkovne tipe. Dodaj tudi nekaj primerov uporabe.
Reference:
Hamiltonov cikel
Hamiltonov cikel v grafu je obhod grafa. Začne se v izbrani točki in obišče vsako vozlišče grafa natanko enkrat, konča pa se v začetnem vozlišču. Referenca:
-
Kozak J. Podatkovne strukture in algoritmi
Najkrajše poti v grafu
Razišči algoritem, ki z uporabo pregleda v širino poišče vse najkrajše poti v neuteženem grafu, ki se začnejo v dani točki. Reference:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Minimalno vpeto drevo v grafu (Kruskalov algoritem)
Naj bo
G povezan neusmerjen graf z uteženimi povezavami. Radi bi našli tako vpeto drevo, da bo vsota cen povezav v tem vpetem drevesu minimalna. Eden izmed algoritmov za reševanje tega problema je Kruskalov algoritem. Ker
smo o algoritmu govorili že na predavanjih, bo poudarek na implementaciji algoritma.
Nič ne bo narobe, če bo izdelan applet kot npr. na internetni referenci, ki bo
prikazal delovanje algoritma. Reference:
-
internetna referenca
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Minimalno vpeto drevo v grafu (Primov algoritem)
Naj bo
G povezan neusmerjen graf z uteženimi povezavami. Radi bi našli tako vpeto drevo, da bo vsota cen povezav v tem vpetem drevesu minimalna. Eden izmed algoritmov za reševanje tega problema je Primov algoritem. Ker
smo o algoritmu govorili že na predavanjih, naj bo poudarek na implementaciji algoritma.
Nič ne bo narobe, če bo izdelan applet kot npr. na internetni referenci, ki bo
prikazal delovanje algoritma. Reference:
-
internetna referenca
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Najkrajše poti v uteženem grafu (Bellman-Ford)
Kadar imamo zemljevid in potujemo iz kraja v kraj se velikokrat vprašamo, kakšna je najkrajša pot med dvema točkama. Če zemljevid predstavimo kot graf, v katerem kraji predstavljajo vozlišča in so uteži na povezavah enake razdaljam med kraji, potem iščemo najkrajšo pot v usmerjenem uteženem grafu. Eden izmed algoritmov, ki poišče vse najkrajše poti z začetkom v dani točki, je Bellman-Fordov algoritem. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Najkrajše poti v uteženem grafu (Dijkstra)
Kadar imamo zemljevid in potujemo iz kraja v kraj, se velikokrat vprašamo, kakšna je najkrajša pot med dvema točkama. Če zemljevid predstavimo kot graf, v katerem kraji predstavljajo vozlišča in so uteži na povezavah enake razdaljam med kraji, potem iščemo najkrajšo pot v usmerjenem uteženem grafu. Eden izmed algoritmov, ki poišče vse najkrajše poti z začetkom v dani točki, je Dijkstrin algoritem. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Najkrajše poti v uteženem grafu (Floyd-Warshall)
Kadar imamo zemljevid in potujemo iz kraja v kraj, se velikokrat vprašamo, kakšna je najkrajša pot med dvema točkama. Če zemljevid predstavimo kot graf, v katerem kraji predstavljajo vozlišča in so uteži na povezavah enake razdaljam med kraji, potem iščemo najkrajšo pot v usmerjenem uteženem grafu. Eden izmed algoritmov, ki poišče vse najkrajše poti med vsemi točkami v grafu, je Floyd-Warshallov algoritem. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Iskanje podnizov v besedilu - Rabin-Karp
Zelo pogosta operacija pri urejevalnikih besedila je iskanje podniza v danem besedilu. Če je besedilo dolgo, lahko veliko prihranimo na času iskanja, če uporabimo dober algoritem za iskanje vzorcev. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Iskanje podnizov v besedilu - Knuth-Moris-Prath
Zelo pogosta operacija pri urejevalnikih besedila je iskanje podniza v danem besedilu. Če je besedilo dolgo, lahko veliko prihranimo na času iskanja, če uporabimo dober algoritem za iskanje vzorcev. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Iskanje sekajočih daljic
Podano imamo množico daljiv. Povedati moramo, ali se kateri dve daljici sekata. Seveda je potrebno to storiti na pameten način, ki ima časovno zahtevnost manjšo ali enako
O(n logn), kjer je
n število daljic. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Konveksna ovojnica - Grahamov pregled
Iskanje konveksne ovojnice množice točk je eden izmed pogosteje uporabljanih algoritmov v računalniški geometriji. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Konveksna ovojnica - Jarvisov obhod
Iskanje konveksne ovojnice množice točk je eden izmed pogosteje uporabljanih algoritmov v računalniški geometriji. Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Iskanje najbližjega para točk
Na vajah smo že nekajkrat iskali najbližji točki iz množice točk, a nikoli nismo naredili algortma, ki bi tekel hitreje kot s kvadratno časovno zahtevnostjo. S pomočjo tehnike
deli in vladaj pa se da doseči časovno zahtevnost reda
O(n logn). Referenca:
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein Introduction to algorithms
Polifazno sortiranje
Včasih se zgodi, da imamo samo sekvenčen dostop do podatkov (recimo na tračnih enotah). Kako v takem primeru sortirati podatke, če imamo na voljo več tračnih enot, tako, da bo za to potrebno čim manj časa?
-
Knuth D. E. Sorting and Searching, vol. 3 of The Art of Computer Programming
Naključna števila
Ko kličemo ukaz
Math.random() velikokrat niti ne pomislimo, kako nam računalnik izračuna naključno število. Ker je računalnik determinističen stroj, seveda to število ne more biti zares naključno, ampak se mora nekako izračunati. Ena izmed metod za generiranje naključnih števil je linearna kongruentna metoda. Referenca:
-
Knuth D. E. Seminumerical Algorithms, vol. 2 of The Art of Computer Programming
Lomljena drevesa
Lomljena drevesa so binarna iskalna drevesa (BST), ki se lomijo ob vsaki operaciji nad drevesom. S tem se prepreči pomankljivost navadnih dvojiških iskalnih dreves, za katere obstaja neugodni vrstni red operacij, s katerim se drevo izrodi.
Opišite, ilustrirajte in razložite osnovne operacije nad to podatkovno
strukturo.
Dvojna vrsta
Dvojna vrsta je struktura, ki podpira poleg običajnega vstavljanja in brisanja na začetku vrste tudi vstavljanje in brisanje elementov na koncu vrste.
Opišite, ilustrirajte in razložite osnovne operacije nad to podatkovno
strukturo. Opiši način implementacije take strukturo in navedi nekaj zgledov uporabe. Referenca:
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition
Iskanje podnizov v besedilu (Boyer-Moore)
Zelo pogosta operacija pri urejevalnikih besedila je iskanje podniza v danem besedilu. Če je besedilo dolgo, lahko veliko prihranimo na času iskanja, če uporabimo dober algoritem za iskanje vzorcev. Referenca:
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition
Huffmanovo kodiranje
Tekstovne datoteke lahko stisnemo tako, da zamenjamo pogosto ponavljajoče se besede s krajšimi simboli. Eden izmed načinov takega kodiranja je Huffmanovo kodiranje.
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition
Pregled v širino
V grafih moramo pogosto pregledati vse točke oz. povezave. Eden izmed možnih pregledov je t.i. pregled v širino.
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition
Pregled v globino
V grafih moramo pogosto pregledati vse točke oz. povezave. Eden izmed možnih pregledov je t.i. pregled v globino.
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition
Tranzitivno zaprtje usmerjenega grafa
Tranzitivno zaprtje usmerjenega grafa je usmerjen graf, ki ima povezave iz dane točke v vse tiste točke, ki jih iz te točke lahko dosežemo s sprehodom po usmerjenih povezavah v originalnem grafu.
-
Robert Sedgewick Algorithms in Java (Part 5)
Močno povezane komponente v usmerjenem grafu (Kasarayu)
V povezanem grafu lahko definiramo močno povezane komponente. To so množice vozlišč, za katere velja, da iz poljubne začetne točke lahko pridemo do poljubne končne točke s sprehodom po usmerjenih povezavah.
-
Robert Sedgewick Algorithms in Java (Part 5)
Močno povezane komponente v usmerjenem grafu (Tarjan)
V povezanem grafu lahko definiramo močno povezane komponente. To so množice vozlišč, za katere velja, da iz poljubne začetne točke lahko pridemo do poljubne končne točke s sprehodom po usmerjenih povezavah.
-
Robert Sedgewick Algorithms in Java (Part 5)
Minimalno vpeto drevo v grafu (Boruvkov algoritem)
Naj bo
G povezan neusmerjen graf z uteženimi povezavami. Radi bi našli tako vpeto drevo, da bo vsota cen povezav v tem vpetem drevesu minimalna. Eden izmed algoritmov za reševanje tega problema je Boruvkov algoritem. Reference:
-
Robert Sedgewick Algorithms in Java (Part 5)
Skoraj optimalno dvojiško iskalno drevo
Optimalno iskalno dvojiško iskalno drevo zgradimo takrat, kadar iščemo elemente in vemo, kako pogosto bomo iskali določen element. Seveda si želimo, da bi bili pogosteje iskani elementi
hitreje dostopni kot tisti, ki se bodo iskali redko, saj bomo tako prihranili kar nekaj časa. To nam naredi algoritem za gradnjo optimalnega iskalnega dvojiškega drevesa.
Praktično uporaben je algoritem za tvorbo približno optimalnega drevesa (Walker
- Gotlieb, 1972). Referenca:
Močno povezane komponente v usmerjenem grafu (Gabow)
V povezanem grafu lahko definiramo močno povezane komponente. To so množice vozlišč, za katere velja, da iz poljubne začetne točke lahko pridemo do poljubne končne točke s sprehodom po usmerjenih povezavah.
-
Robert Sedgewick Algorithms in Java (Part 5)
Razpršene tabele I
Razpršene tabele so podatkovna struktura, ki omogoča zelo hitro vstavljanje in
iskanje. Obstaja več različnih implementacij. Predstaviti bo potrebno tisto, ki
probleme ključev z enakimi kodami rešuje z linearnim poskušanjem.
-
Michael Waite Data stuctures &
algorithms in Java
-
Robert Sedgewick Algorithms in Java (Part 1-4), third edition
Razpršene tabele II
Razpršene tabele so podatkovna struktura, ki omogoča zelo hitro vstavljanje in
iskanje. Obstaja več različnih implementacij. Predstaviti bo potrebno tisto, ki
probleme ključev z enakimi kodami rešuje z dvojnim razprševanjem.
-
Robert Sedgewick Algorithms in Java (Part 1-4), third edition
-
Michael Waite Data stuctures &
algorithms in Java
Razpršene tabele III
Razpršene tabele so podatkovna struktura, ki omogoča zelo hitro vstavljanje in
iskanje. Obstaja več različnih implementacij. Predstaviti bo potrebno tisto, ki
probleme ključev z enakimi kodami rešuje s kvadratnim razprševanjem.
-
Robert Sedgewick Algorithms in Java (Part 1-4), third edition
-
Michael Waite Data stuctures &
algorithms in Java
Razpršene tabele IV
Razpršene tabele so podatkovna struktura, ki omogoča zelo hitro vstavljanje in
iskanje. Obstaja več različnih implementacij. Predstaviti bo potrebno tisto, ki
probleme ključev z enakimi kodami rešuje z uporabo linearnih seznamov.
-
Michael Waite Data stuctures &
algorithms in Java
-
Robert Sedgewick Algorithms in Java (Part 1-4), third edition
Urejanje s stresanjem
Urejanje s stresanjem (shake sort) je različica urejanja z mehurčki. Podrobno
predstavi algoritem.
Shell sort
Sortiranje z vstavljanjem s padajočim prirastkom – Shellsort (avtor D. Shell
1957) je izboljšana različica urejanja z vstavljanjem. Podrobno predstavi
algoritem.
Urejanje po delih
Urejanje po delih (radix sort) uporabljamo za urejanje takih podatkov, kjer so
ključi lahko zelo zapleteni. Obstaja več različic takega urejanja. Predstaviti
je potrebno osnovno idejo in podrobneje eno od različic.
-
Robert Sedgewick Algorithms in Java (Part 1-4), third edition
AVL drevesa
AVL drevesa so dvojiška iskalna drevesa. Imajo to lastnost, da se višina levega in desnega poddrevesa v vsakem vozlišču razlikuje kvečjemu za ena, tako da za iskanje elementa v tem drevesu vedno porabimo
log n časa, cena za to pa je zahtevnejše vstavljanje in brisanje elementov.
Opišite, ilustrirajte in razložite osnovne operacije nad to podatkovno
strukturo. Opisati bo potrebno ustrezen razred, ki je implementacija tega drevesa in sestaviti nekaj
algoritmov, s katerimi boš ilustriral uporabo teh dreves. Reference:
-
internetna referenca
-
Michael T. Goodrich, Roberto Tamassia Data Structures and Algorithms in Java, second edition