Algoritmusok és adatszerkezetek II. régebbi vizsgakérdések. Ásványi Tibor asvanyi@inf.elte.hu 2017. július 4. Az eljárásokat és függvényeket megfelel en elnevezett és paraméterezett struktogramok segítségével adjuk meg! Ne feledkezzünk meg a skalár típusú referencia paraméterek szükség szerinti jelölésér l sem! A változókat alapértelmezésben a struktogramra vonatkozóan lokálisnak tekintjük. Az algoritmusok konkrét példákon való bemutatásánál a m ködést alapértelmezésben az el adáson tanultak szerint kell szemléltetni. A vizsgákon öt feladat van: legalább egy kérdés az els két témakörb l (rendezés lineáris id ben, hasító táblák), legalább két kérdés a gráagoritmusokból és legalább egy kérdés az utolsó két témakörb l (sztring keresés, tömörítés). Mindegyik feladat 20 pontot ér. A ponthatárok: 85 jeles ; 70 jó ; 55 közepes ; 40 elégséges. 1. Rendezés lineáris id ben 1.1. Edényrendezés a [0;1) intervallumon 1.a, A 0,4; 0,82; 0,0; 0,53; 0,73; 0,023; 0,64; 0,7; 0,39; 0,203, tíz elem listán mutassa be az Edényrendezés algoritmusát [0; 1)-beli kulcsokra! 1.b, Adja meg az edényrendezés struktogramját! 1.c, Mekkora a minimális m veletigénye? Mekkora az átlagos m veletigénye, és milyen feltétellel? Hogyan tudnánk biztosítani, hogy a maximális m veletigénye Θ(n lg n) legyen? 2. A 0,42; 0,16; 0,64; 0,39; 0,20; 0,89; 0,13; 0,79; 0,53; 0,71 listán mutassa be és magyarázza el az Edényrendezés algoritmusát [0; 1)-beli kulcsokra! Mekkora a (szokásos, beszúró rendezéses változatának) minimális és maximális m veletigénye? Miért? Mekkora az átlagos m veletigénye? Hogyan 1
tudnánk a maximális m veletigényt aszimptotikusan csökkenteni? (Az edények továbbra is láncolt listák.) Mit értünk stabil rendezés alatt? Hogyan tudnánk a Edényrendezést stabil rendezéssé alakítani? 3. Adott az L egyszer láncolt lista, aminek n 0 eleme van. Minden elemének kulcsa a [0; 1) intervalumon egyenletes eloszlás szerint választott érték. Írja meg a bucketsort(l, n) utasítással meghívható egyszer edényrendezés struktogramját, AT (n) Θ(n), MT (n) Θ(n lg n) m veletigénnyel és M(n) O(n) tárigénnyel! Segédrendezésként felhasználható a megfelel, múlt félévben tanult, egyszer láncolt listákat rendez eljárás. Ezt nem kell megírni, a kód többi részét viszont teljes részletességgel kérjük. 1.2. Radix rendezés leszámláló rendezéssel 1.a, Mutassa be a számjegypozíciós (Radix) rendezés m ködését a következ, négyes számrendszerbeli számok tömbjén: 20; 02; 21; 01; 31; 20! Az egyes menetekben leszámláló rendezést alkalmazzon! 1.b, Mekkora a fenti rendezés aszimptotikus m veletigénye? A leszámláló rendezés mint segédprogram mely tulajdonságára épül a Radix rendezés? 2.a, Mutassuk be a számjegypozíciós (Radix) rendezés m ködését a 11; 20; 10; 23; 21; 30 négyes számrendszerbeli számok tömbjén! Az egyes menetekben leszámláló rendezést alkalmazzunk! 2.b, Mekkora a Radix rendezés m veletigénye (a tömb mérete, a számrendszer alapszáma és a számjegyek száma függvényében)? 2.c, A leszámláló rendezés mint segédprogram mely tulajdonságára épül a Radix rendezés? Mit jelent ez a tulajdonság? 1.3. Radix rendezés edényekkel 1.a, Mutassuk be a számjegypozíciós (Radix) rendezés m ködését a 31; 20; 11; 23; 21; 10 négyes számrendszerbeli számok listáján! Az egyes menetekben a megfelel számjegy szerinti, edényekbe való szétosztást, majd az edények tartalmának összef zését alkalmazzuk! 1.b, Mekkora a felhasznált adott számjegy szerinti rendezés, és a ráépül Radix rendezés m veletigénye? 1.c, A felhasznált rendezés mint segédprogram mely tulajdonságára épül a Radix rendezés? 2. Oldjuk meg az el z feladatot a < 11; 20; 10; 23; 21; 30 > input listával! 2
2. Hasító táblák 2.1. Ütközés feloldása láncolással 1. A T [0..m 1] hasító tábla rései kétirányú, nemciklikus, fejelem nélküli, rendezetlen láncolt listák pointerei. Adott a k mod m hasító függvény. A kulcsütközéseket láncolással oldjuk fel. Mindegyik kulcs csak egyszer szerepelhet T -ben. 1.a, Írjuk meg az ins(t [], m, k, a):0..2 érték függvényt, ami beszúrja a hasító táblába a (k, a) kulcs-adat párt! Ha a táblában már volt k kulcsú elem, a beszúrás meghiúsul, és a 2 hibakódot adja vissza. Különben, ha nem tudja már a szükséges listaelemet allokálni, az 1 hibakódot adja vissza. (Feltesszük, hogy a new m velet, ha sikertelen, akkor pointert ad vissza.) Az ins() m velet akkor ad vissza 0 kódot, ha sikeres volt a beszúrás. Ilyenkor az új listaelemet a megfelel lista elejére szúrja be. 1.b, Mi a kitöltöttségi hányados? Milyen aszimptotikus becslést tud adni a fenti m velet minimális, átlagos és maximális futási idejére? Miért? 2. A T [0..m 1] hasító tábla rései kétirányú, nemciklikus, fejelem nélküli, rendezetlen láncolt listák pointerei. Adott a k mod m hasító függvény. A kulcsütközéseket láncolással oldjuk fel. Mindegyik kulcs csak egyszer szerepelhet T -ben. (2.a) Írjuk meg a search(t [], m, k) függvényt, ami visszaadja a T -beli, k kulcsú listaelem címét, vagy a pointert, ha ilyen nincs! (2.b) Írjuk meg a del(t [], m, p) függvényt, ami törli a T hasító táblából (és deallokálja is) a p pointer által mutatott listaelemet! (2.c) Mi a kitöltöttségi hányados? Milyen aszimptotikus becslést tudunk adni a fenti m veletek minimális, átlagos és maximális futási idejére? Miért? 2.2. Nyílt címzés 1. A T [0..(m 1)] hasító táblában a kulcsütközést nyílt címzéssel oldjuk fel. 1.a, Mit értünk kitöltöttségi hányados, próbasorozat és egyenletes hasítás alatt? Mit tudunk a keresés és a beszúrás során a próbák várható számáról? 1.b, Mekkora egy sikertelen keresés várható hossza 80%-os kitöltöttség esetén, ha nincs törölt rés? Egy sikeres keresésé ennél több vagy kevesebb? Miért? 1.c, Legyen most m = 11, h (k) = k mod m, és alkalmazzon lineáris próbát! Az alábbi m veletek mindegyikére adja meg a próbasorozatot... alakban! Szúrja be a táblába sorban a következ kulcsokat: 10; 22; 31; 4; 15; 28; 16; 26; 62; ezután törölje a 16-ot, majd próbálja megkeresni a 27-et és a 62-t, végül pedig szúrja be a 27-et! Szemléltesse a hasító tábla változásait is, a törlés m veletét l kezd d en! 2. A T [0..m 1] hasító táblában a kulcsütközést nyílt címzéssel oldjuk fel. 3
2.a, Mit értünk kitöltöttségi hányados és egyenletes hasítás alatt? Mit tudunk a keresés és a beszúrás során a próbák várható számáról? 2.b, Mekkora egy sikertelen keresés várható hossza 90%-os kitöltöttség esetén, ha nincs törölt rés? Egy sikeres keresésé ennél több vagy kevesebb? Miért? 2.c, Legyen most m = 8, (az egyszer ség kedvéért) h (k) = k mod m, és alkalmazzunk négyzetes próbát a szokásos c 1 = c 2 = 1/2 konstansokkal! Az alábbi m veletek mindegyikére adja meg a próbasorozatát... alakban! Szemléltesse a hasító tábla változásait is! Szúrja be a táblába sorban a következ kulcsokat: 22; 31; 4; 28; 15; 14; 30; ezután törölje a 14-et, majd próbálja megkeresni a 38-at és a 30-at, végül pedig szúrja be a 27-et! 3.a, Adott egy m = 7 méret, üres hasító tábla. Nyílt címzést és kett s hasítást alkalmazunk a h 1 (k) = k mod m, h 2 (k) = 1 + (k mod (m 2)) tördel függvények segítségével. A tábla nem tartalmazhat duplikált kulcsokat. Az alábbi m veletek mindegyikére adja meg a próbasorozatot... alakban, és a hasító táblát is rajzolja újra, valahányszor egy m velet egy nemüres rés státuszát változtatja meg (b-beszúrás, k-keresés, t-törlés): b37, b45, b19, b72, b33, t19, k12, b33, t33, b33. 3.b, Magyarázza meg, mi a szerepe nyílt címzés esetén a foglalt, az üres és a törölt réseknek, a beszúrás, a keresés és a törlés során! 3.c, Mi a kitöltöttségi hányados? Milyen becslést tudunk adni az egyes m veletigényekre, és milyen feltétellel? 4. Adott egy m = 11 méret üres hasító tábla. Nyílt címzést és kett s hasítást alkalmazunk a h 1 (k) = k mod m és a h 2 (k) = 1+(k mod (m 1)) tördel függvények segítségével. 4.a, Az alábbi m veletek mindegyikére adja meg a próbasorozatát... alakban! Szemléltesse a hasító tábla változásait is! Szúrja be a táblába sorban a következ kulcsokat: 12; 17; 23; 105. Ezután törölje a 23-at, majd próbálja megkeresni a 133-at, végül pedig szúrja be a 133-at! 4.b, Magyarázza meg, mi a különbség nyílt címzés esetén a foglalt, az üres és a törölt rések között, az alkalmazható m veletek szempontjából! 3. Gráfalgoritmusok 3.1. Gráfreprezentációk 1. A C[1..n, 1..n] : 0..1 mátrix egy irányított gráf szomszédossági csúcsmátrixos ábrázolása. Írja meg a transzformál(c[,], n, G[]) eljárást, ami el állítja a G[1..n] gráfot, ami a C[1..n, 1..n] mátrixszal reprezentált gráf éllistás reprezentációja! Az éllisták egyszer láncolt listák (fejelem nélküli, nemciklikus, egyirányú listák) legyenek! T (n) Θ(n 2 ). 4
2. A G[1..n] egy irányított gráf szomszédossági éllistás ábrázolása. Írja meg a transzponál(g[], n, GT []) eljárást, ami el állítja a GT [1..n] gráfot, ami a G[1..n] gráf transzponáltjának éllistás reprezentációja! Az éllisták egyszer láncolt listák (fejelem nélküli, nemciklikus, egyirányú listák). T (n, e) Θ(n + e), ahol e a gráf éleinek száma. 3. G[1..n] egy irányított gráf szomszédossági éllistás ábrázolása. A G[i] éllisták egyszer láncolt listák (fejelem nélküli, egyirányú, nemciklikus listák). Adja meg a listaelem típus leírását! Írja meg a kibefokok(g[], n, be[], ki[]) eljárást, ami minden u 1..n csúcsra a be[u]-ban kiszámítja a csúcs bemeneti fokszámát, ki[u]-ban pedig a kimeneti fokszámát! T (n, e) Θ(n + e), ahol e a gráf éleinek száma. 3.2. Szélességi keresés 1.a, Mit számol ki a Szélességi gráfkeresés? 1.b, Adja meg az algoritmus absztrakt struktogramját! 1.c, A Szélességi gráfkeresés a gráf mely csúcsaiba talál optimális utat, és a végrehajtás során mikor? 1.d, Mit tud a Szélességi gráfkeresés m veletigényér l? (Indokolja is az állítást!) 1.e, Szemléltesse az algoritmust az a csúcsból indítva, az a b ; d. b c ; d. c e. d e. irányítatlan gráfon! 1 Rajzolja le az eredményül adódó szélességi fát is! 3.3. Mélységi keresés és topologikus rendezés 1.a, Mit értünk egy irányított gráf csúcsainak topologikus rendezése alatt? Mondja ki és bizonyítsa be az ezzel kapcsolatos tételt! 1.b, Mutassa be az alábbi gráf 2 csúcsai topologikus rendezésének a gráf mélységi bejárására épül algoritmusát! (Az algoritmus szemléltetése során a nemdeterminisztikus esetekben mindig az alfabetikusan kisebb index csúcsot részesítse el nyben!) 1.c, Módosítsa egyetlen él behúzásával úgy a gráfot, hogy ne legyen topologikus rendezése! A módosított gráfnak miért nincs topologikus rendezése? Mikor derül ez ki a fent szemléltetett algoritmus végrehajtása során? 1.d, Mit tud a mélységi bejárásra épül topologikus rendezés m veletigényér l? (Indokolja is az állítást!) a b; d. b c; d. c e. d e. f c; e. 2.a, Rajzolja le a Mélységi gráfkeresés absztrakt struktogramját! Mit tud a 1 u v 1 ;... v k. azt jelenti, hogy az irányítatlan gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k. (Ezzel a jelöléssel a gráf minden élét csak egyszer tüntetjük fel.) 2 u v 1 ;... v k. azt jelenti, hogy az u csúcs közvetlen rákövetkez i v 1,... v k. 5
m veletigényér l? (Indokolja is az állítást!) 2.b, Adja meg az éltípusok denícióját és mondja ki az osztályozásukkal kapcsolatos tételt! 2.c, Szemléltesse a Mélységi keresést az alábbi irányított gráfon 3 úgy, hogy nemdeterminisztikus esetekben mindig a kisebb index csúcsot részesítse el nyben! Jelölje a bejárás során a különböz éltípusokat is! a b ; d. b c ; d. c e. d e. e b. f c ; e. 3.4. Minimális feszít fák 3.4.1. Kruskal algoritmusa 1.a, Mit számol ki a Kruskal algoritmus? 1.b, Szemléltesse a m ködését az alábbi gráfon! 4 (Elég az él feszít erd párosok sorozatát megadni.) 1.c, Mondja ki a biztonságos élekr l és a minimális feszít fákról szóló tételt! Deniálja a tételben szerepl vágás és könny él fogalmakat! 1.d, Hogyan következik a Kruskal algoritmus helyessége ebb l a tételb l? 1.e, Mekkora az algoritmusnak az el adásról ismert m veletigénye, és milyen feltételekkel? a b, 0 ; d, 1. b c, 5 ; d, 2 ; e, 3. d e, 4. 2.a, Mit számol ki a Kruskal algoritmus? 2.b, Szemléltesse a m ködését az a b, 3 ; d, 1. b c, 5 ; d, 2 ; e, 3. c e, 4. d e, 0. gráfon! 5 (Elég az él feszít erd párosok sorozatát megadni.) 2.c, Adja meg a f eljárás struktogramját! Magyarázza el a segédeljárások és a segédfüggvény m ködését! 2.d, Mekkora az algoritmus m veletigénye? Miért? 3.4.2. Prim algoritmusa 1.a, Mit számol ki a Prim algoritmus? Deniálja a súlyozott szomszédossági csúcsmátrix fogalmát! 1.b, Csak tömb adatszerkezeteket használva adja meg a Prim(C[1..n, 1..n], r, d[1..n], π[1..n]) eljárás struktogramját, ahol a gráfot a C súlyozott szomszédossági csúcsmátrix segítségével ábrázoltuk, és a fa építése az r csúcsból indul. A segédeljárásokat is részletezze! Az eredményt, a csúcsok d és a π értékeit a megfelel vektorokban kapjuk. T (n) O(n 2 ), M(n) O(n) 2.a, Mit számol ki a Prim algoritmus? 2.b, Szemléltesse a m ködését az a b, 0 ; d, 1. b c, 5 ; d, 2 ; e, 3. c e, 2. d e, 2. 3 u v 1 ;... v k. azt jelenti, hogy az u csúcs közvetlen rákövetkez i v 1,... v k. 4 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k, és a megfelel irányítatlan élek súlyai sorban w 1,... w k. 5 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k, és a megfelel irányítatlan élek súlyai sorban w 1,... w k. 6
irányítatlan gráfon, a d csúcsból indítva! 6. 2.c, Mondja ki a biztonságos élekr l és a minimális feszít fákról szóló tételt! Deniálja a tételben szerepl vágás és könny él fogalmakat! Hogyan következik a Prim algoritmus helyessége ebb l a tételb l? 2.d, Mekkora az algoritmusnak az el adásról ismert m veletigénye, és milyen feltételekkel? 3.5. Legrövidebb utak egy forrásból 3.5.1. Legrövidebb út kiírása 1. A Dijkstra algoritmus eredményeképpen megkaptuk a d[] és a π[] tömböket, amik a gráf csúcsainak d és π értékeit tartalmazzák. Írjuk meg az útkiíró(d[], π[], v) rekurzív függvényt, ami a d[v] értékkel tér vissza, és kiírja a start csúcsból a v csúcsba vezet optimális utat a következ formátumban: Az úton tetsz leges x csúcs x:d alakban jelenik meg, ahol d az x csúcs d-értéke. Minden él --w--> alakban jelenik meg, ahol w az él súlya. Adott ehhez a kiír(y) eljárás, ami tetsz leges y paramétert kiír. Ha például a gráfnak három csúcsa van, d[1..3] = 4; 9; 0 és π[1..3] = 3; 1; 0, akkor a startcsúcsból a 2 index csúcsba vezet optimális út a következ alakban jelenjen meg: 3:0--4-->1:4--5-->2:9 3.5.2. Sor-alapú Bellman-Ford algoritmus 1.a, Mit számol ki a Sor alapú (Queue-based) Bellman-Ford algoritmus? Adja meg a struktogramját! 1.b, Mit értünk a fenti program futásának menetei alatt? Mi a menetekhez kapcsolódó alapvet tulajdonság? 1.c, Adjon az algoritmus m veletigényére aszimptotikus fels becslést, és indokolja is állítását! 1.d, Honnét ismerhet fel, hogy van-e a gráfban a startcsúcsból elérhet negatív kör? Hogyan lokalizálható egy ilyen negatív kör? 1.e, Szemléltesse az algoritmus m ködését az alábbi gráfon, a b csúcsból indítva! 7 b c, 2 ; e, 4. c d, -1 ; e, 1. d b, -1 ; e, 2 ; f, 2. e f, -2. 3.5.3. DAG lerövidebb utak egy forrásból 1.a, Írja le röviden, szóban vagy struktogrammal, azt a tanult algoritmust, mellyel irányított, súlyozott, körmentes gráfokra a leghatékonyabb módon határozhatjuk meg a start csúcsból a többi csúcsba vezet legrövidebb 6 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k, és a megfelel irányítatlan élek súlyai w 1 = w(u, v 1 ),... w k = w(u, v k ). (Ezzel a jelöléssel minden élet csak egyszer tüntetünk fel.) 7 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs közvetlen rákövetkez i v 1,... v k, és a megfelel irányított élek súlyai sorban w 1,... w k. 7
utak fáját! (Negatív élköltségek is megengedettek.) 1.b, Mekkora a m veletigénye? Miért? 1.c, Szemléltesse a m ködését az alábbi gráfon, 8 ahol a csúcsok topologikus rendezése a,b,c,d,e,f, és a b a startcsúcs! A legrövidebb utak fáját rajzolja is le! a d, 2; f, 3. b c, 2; e, 4. c d, -1; e, 1. d e, 2; f, 2. e f, -2. 3.5.4. Dijkstra algoritmusa 1.a, Mit számol ki a Dijkstra algoritmus? Mekkora a m veletigénye n csúcsú gráf esetén, ha a prioritásos sort rendezetlen tömbbel reprezentáljuk? Miért? 1.b, Szemléltesse a m ködését az alábbi irányítatlan gráfon az a csúcsból indítva, az el adásról ismert módon! 9. Rajzolja le a legrövidebb utak fáját is, ami az eredményb l adódik! a b, 2; c, 1; d, 4. b d, 0. c d, 2; e, 2. d e, 1. e. 2.a, Mit számol ki a Dijkstra algoritmus? Adja meg a struktogramját! 2.b, Mit értünk a gráfok élsúlyozott szomszédossági listás ábrázolása alatt? Mekkora az algoritmus futási ideje az el bbi gráfreprezentáció és a prioritásos sor bináris kupaccal való megvalósítása esetén? Miért? 2.c, Milyen állítás igaz, amikor egy tetsz leges csúcsot kiválasztunk kiterjesztésre? Miért? 3.6. Legrövidebb utak minden csúcspárra 1.a, Mit számol ki a Floyd-Warshall algoritmus? Mekkora a m veletigénye n csúcsú gráf esetén? Miért? 1.b, Szemléltessük a m ködését az alábbi irányított gráfon a (D (0), Π (0) ),..., (D (3), Π (3) ) mátrix párok megadásával! 10. 1.c, Rajzoljuk le a legrövidebb utak fáit, amiket az eredményb l kiolvashatunk! 1 3, 1. 2 1, 0 ; 3, 2. 3 1, 1 ; 2, 2. 2. G[1..n] egy irányított, élsúlyozott, egyszer gráf szomszédossági éllistás ábrázolása. A G[i] éllisták egyszer láncolt listák. Írjuk meg az FWinit(G[1..n], D[1..n, 1..n], Π[1..n, 1..n]) eljárást, ami G[1..n] szerint a Floyd-Warshall algoritmus (D (0), Π (0) ) mátrix-párjának megfelel en inicializálja az eljárás D és Π paramétereit! T (n) Θ(n 2 ). 8 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs közvetlen rákövetkez i v 1,... v k ; sorban w 1,... w k súlyokkal. 9 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k, és a megfelel irányítatlan élek súlyai sorban w 1,... w k. 10 Az u v 1, w 1 ;... v k, w k. formula azt jelenti, hogy a gráf u csúcsából kivezet élek (u, v 1 ),... (u, v k ), sorban w 1 = w(u, v 1 ),... w k = w(u, v k ) súlyokkal. 8
3.a, Mit számol ki a Floyd-Warshall algoritmus? 3.b, Tegyük fel, hogy a gráfnak n csúcsa van! Mi a (D (k), Π (k) ) : k 0..n mátrix-pár sorozat deníciója? Mi a rekurzív képlete? 3.c, Adja meg az algoritmus struktogramját! Mekkora a m veletigénye n csúcsú gráf esetén? 3.d, Miért elegend egyetlen (D, Π) mátrix-pár a programban? 4.a, Mit számol ki a Floyd-Warshall algoritmus? 4.b, Mekkora a m veletigénye n csúcsú gráf esetén? Miért? 4.c, Szemléltesse a m ködését az alábbi irányítatlan gráfon a (D (0), Π (0) ),..., (D (4), Π (4) ) mátrix párok megadásával! 11. 4.d, Melyik az alábbi gráf legkisebb részgráfja, ami az összes optimális utat tartalmazza? 1 2, 3; 3, 1; 4, 4. 2 4, 0. 3 4, 1. 4. 3.7. Irányított gráf tranzitív lezártja 1.a, Mit jelent egy gráf tranzitív lezártja, amit Warshall algoritmusa számol ki? 1.b, Tegyük fel, hogy a gráfnak n csúcsa van! Mi a T (k) : k 0..n mátrix sorozat deníciója? Mi a rekurzív képlete? 1.c, Adja meg az algoritmus struktogramját! Mekkora a m veletigénye n csúcsú gráf esetén? Miért elegend egyetlen T mátrix a programban? 1.d, Mutassa be az algoritmus m ködését a 4 3. 3 2. 2 1 ; 4. irányított gráfon! 4. Sztring keresés (Mintaillesztés) 4.1. Quick-search 1.a, Mit számol ki a Quick Search algoritmus? 1.b, Mi az el nye, illetve hátránya a naiv mintailleszt algoritmussal összehasonlítva? 1.c, Mutassa be a Quick Search algoritmus (a) el készít eljárásának m ködését az {A, B, C, D} ábécé-vel az ABACABA mintán, és 1.d, e mintát illeszt eljárását az ABABACABACABADABACABABA szövegen! 1.e, Mekkora az egyes eljárások aszimptotikus m veletigénye? 2.a, Mit számol ki a Quick Search algoritmus? 2.b, Mi az el nye, illetve hátránya m veletigény szempontjából a KMP algoritmussal összehasonlítva? 2.c, Mutassa be a Quick Search algoritmus el készít eljárásának m ködését az {A, B, C, D} ábécé-vel az ADABABA mintán, és 2.d, e mintát illeszt eljárását az ADABACACACABADABABADABABA szövegen! 2.e, Mekkora az egyes eljárások aszimptotikus m veletigénye? 11 u v 1, w 1 ;... v k, w k. azt jelenti, hogy a gráfban az u csúcs u-nál nagyobb index szomszédai v 1,... v k, és a megfelel irányítatlan élek súlyai sorban w 1,... w k. 9
4.2. Knuth-Morris-Pratt (KMP) 1.a, Deniálja a KMP algoritmusban a keresett P [1..m] mintához tartozó next függvényt (nem a struktogramot)! Adja meg a next függvény három alapvet tulajdonságát, és kett t bizonyítson is be! 1.b, Adja meg a next függvényt a deníciója alapján a BABAABAB mintán! 1.c, Szemléltesse a KMP algoritmus m ködését, ahogy a fenti minta el fordulásait keresi az ABABABAABABAABABABAABABBABA szövegben! 2.a, Deniálja a KMP algoritmus next függvényét (nem a struktogramot), majd adja meg az ABABADA mintán! 2.b, Szemléltesse KMP algoritmussal e minta el fordulásainak keresését az ABABADABABADABABABADABADABA szövegben! 2.c, Mi a next függvény szerepe a keresés során? 2.d, Mi a KMP algoritmus el nye, illetve hátránya m veletigény szempontjából a Quick-search mintailleszt algoritmussal összehasonlítva? 3.a, Milyen feladatot old meg a Knuth-Morris-Pratt (KMP) algoritmus? 3.b, Deniálja a next függvényt (nem a struktogramot), majd adja meg a BABABAB mintán! 3.c, Szemléltesse KMP algoritmussal e minta el fordulásainak keresését a BABBABABABABBABABABAAB szövegben! 3.d, Mi a next függvény szerepe a keresés során? 3.e, Mi a KMP algoritmus el nye, illetve hátránya a Quick-search mintailleszt algoritmussal összehasonlítva? 4.a, Milyen feladatot old meg a Knuth-Morris-Pratt (KMP) algoritmus? 4.b, Szemléltessük a KMP algoritmus init(next...) eljárásának m ködését az ABACABA mintán és 4.c, e mintát illeszt eljárását az ABABACABACABABACABABA szövegen! 4.d, Mekkora az egyes eljárások m veletigénye? 4.e, Mi KMP algoritmus el nye, illetve hátránya a Quick-search mintailleszt algoritmussal összehasonlítva? 5. Tömörítés 5.1. Human kód 1.a, Szemléltesse a Human kódolás m ködését az ÁBRÁBANÁBRA szövegen! Adja meg a kódfát és a szótárat! Mekkora a Human kódolással tömörített kód hossza? 1.b., Mekkora lenne a tömörített kód x hosszú karakterkódok esetén? 1.c, Hogyan dekódolható egy Human kóddal tömörített szöveg? 1.d, Milyen értelemben optimális a Human kód? Azt jelenti-e ez, hogy a Human kódolás a lehet legjobb tömörítés? Miért? 10
2.a, Az ELEVEJELESRERENDELVE szövegen szemléltessük a Human kódolás m ködését! Adjuk meg a kódfát és a szótárat! 2.b, Mekkora a Human kódolással tömörített kód hossza? 2.c, Mekkora lenne a tömörített kód x hosszú karakterkódok esetén? 2.d, Hogyan dekódolható egy Human kóddal tömörített szöveg? 2.e, Milyen értelemben optimális a Human kód? Azt jelenti-e ez, hogy a Human kódolás a lehet legjobb tömörítés? Miért? 5.2. LZW tömörítés 1.a, Adott az {A, B, C} ábécé. Szemléltesse a LempelZivWelch (LZW) tömörít algoritmus m ködését a CBABABABCBABABAB szövegen, majd a megfelel kitömörít algoritmusét az 1, 2, 3, 4, 6, 5, 9, 7, 11 kódon! Mindkét esetben adja meg a generált szótárat, és a tömörítetlen szövegen a részszavak és a kódok megfeleltetését! 1.b, Hogyan kezeli a kitömörít algoritmus azt az esetet, amikor nem találja meg a szótárban az aktuális kódhoz tartozó sztringet? 2.a, Az {A, B} ábécével szemléltesse a LempelZivWelch (LZW) tömörít algoritmus m ködését az ABABABABA szövegen, majd a megfelel kitömörít algoritmusét az 1, 2, 2, 3, 6, 4, 7 kódon! Mindkét esetben adja meg a generált szótárat, és a tömörítetlen szövegen a részszavak és a kódok megfeleltetését! 2.b, Milyen értelemben optimális a Human kód? Hogyan lehetséges, hogy az LZW algoritmus a gyakorlatban gyorsabban és jobban tömörít? 11