3. gyakorlat Dinamikus programozás 1. Az 1,2,...,n számoknak adott két permutációja, x 1,...,x n és y 1,...,y n. A két sorozat egy közös részsorozata egy 1 i 1 < < i k n, és egy 1 j 1 <... < j k n indexsorozattal adható meg, ahol x im = y jm teljesül minden 1 m k esetén. Adjon O(n 2 ) lépésszámú algoritmust, ami az x és y sorozatokban meghatároz egy leghosszabb közös részsorozatot. 2. Legyen w = w 1 w 2 w n egy n betűből álló szó. Hívjuk részszónak w egy tetszőleges w i w i+1 w i+k darabját (1 i n 1, 1 k n i). Adjon algoritmust, ami O(n) lépésben meghatározza az összes a-val kezdődő és b-re végződő részszó számát. 3. Egy n n méretű táblázat minden eleme egy egész szám. A táblázat bal alsó sarkából akarunk eljutni a jobb felső sarkába úgy, hogy egy lépésben a táblázatban vagy felfelé vagy jobbra egyet lépünk. Azt szeretnénk, hogy a lépegetés során látott elemek növekvő sorrendben kövessék egymást. Egy ilyen út értéke a benne szereplő számok összege. Adjon O(n 2 ) futási idejű algoritmust, ami meghatározza, hogy az adott táblázatban a szabályok szerinti utak értékei között mekkora a legnagyobb! 4. Az n elemű A tömb egész számokkal (lehetnek negatív számok is) van feltöltve. Adjon algoritmust, ami meghatároz egy olyan (i,j),1 i j n indexpárt, amire A[i] + A[i + 1] + + A[j] maximális. (Azaz keressük a legnagyobb, folytonosan előálló összeget.) Az algoritmus futási ideje legyen O(n). 5. Legyenek a 1,a 2,...,a n tetszőleges egész számok és m < n 2 egész. Adjon algoritmust, amely a bináris alakjukkal megadott a 1,a 2,...,a n és m számokról eldönti polinom időben, hogy az a 1,a 2,...,a n számok közül kiválasztható-e néhány úgy, hogy az összegük m-mel osztva egyet adjon maradékul. 6. Egy n és egy m karakterből álló szövegben meg akarjuk találni a legnagyobb azonos darabot, azaz ha az egyik szöveg a 1 a 2 a n és a másik b 1 b 2 b m, akkor olyan 1 i n és 1 j m indexeket keresünk, hogy a i+1 = b j+1,a i+2 = b j+2,...,a i+t = b j+t teljesüljön a lehető legnagyobb t számra. Adjon erre a feladatra O(mn) lépést használó algoritmust. 7. Legyenek a 1,a 2,...,a n tetszőleges egész számok és legyen b is egész szám. Adjon algoritmust, amely a bináris alakjukkal megadott a 1,a 2,...,a n és b számokhoz O(nb) időben megadja, hogy a b szám hányféleképpen áll elő az a 1,a 2,...,a n számok közül néhány összegeként. 8. Egy n szóból álló szöveget kell sorokra tördelni. A szöveg i-edik szava l i karakterből áll, egy sor s karakter hosszú. Ha egy sor a szöveg i-edik szavával kezdődik és a j-edik szóval végződik, akkor az elválasztó szóközöket is figyelembe véve t = s (l i +l i+1 + +l j +j i) üres hely marad a sor végén. Egy ilyen sor hibája legyen t 2. A tördelés hibája a nem üres sorok hibáinak összege. Adjon O(n 2 ) lépéses algoritmust egy legkisebb hibájú tördelés meghatározására! (A szavak sorrendje rögzített.)
Algoritmusok elmélete Csima Judit 2009. március 3., kedd csima@cs.bme.hu 4. gyakorlat Szélességi bejárás, Bellman-Ford és Floyd algoritmusok 1. Adott a G irányítatlan gráf a következő éllistával : a:b,c; b:a,d; c:a,d; d:b,c,e,f; e:d,f,g; f:d,e,g,h; g:e,f,h; h:f,g; Keressünk G-ben a-ból kiinduló szélességi feszítőfát! Mennyi lesz a csúcsok a-tól való távolsága? 2. Keressen javítóutat az alábbi páros gráfban! 3. Határozza meg az A csúcsból az összes többi csúcsba vezető legrövidebb út hosszát az alábbi gráfban a Bellman-Ford algoritmussal: B 4 C 3 2 1 2 A 1 D 3 E 4. Éllistával adott a súlyozott élű G = (V, E) gráf. Tegyük fel, hogy az élek súlyai az 1,2,3 számok közül valók. Javasoljunk O(n + e) költségű algoritmust az s V pontból az összes további v V pontokba vivő legrövidebb utak hosszának a meghatározására. (Itt n a G gráf csúcsainak, e pedig az éleinek a száma. 5. Egy n n-es sakktábla néhány mezőjén az ellenfél egy huszárja (lova) áll. Ha mi olyan mezőre lépünk, ahol az ellenfél le tud ütni, akkor le is üt, de egyébként az ellenfél nem lép. Valamelyik mezőn viszont a mi huszárunk áll. Adjunk O(n 2 ) lépésszámú algoritmust, ami meghatározza, hogy mely másik mezőkre tudunk (lólépések sorozatával) eljutni a nélkül, hogy az ellenfél leütne! 6. Egy n pontú teljes gráf csúcsait kell kiszíneznünk csupa különböző színűre. Összesen k n féle szín áll rendelkezésre, de az egyes pontok színe nem teljesen tetszőleges. Minden v csúcshoz adott színeknek egy S(v) listája, a v csúcsot csak az S(v)-ben szereplő színek valamelyikére színezhetjük. Adjon O(nk 2 ) lépésszámú algoritmust, amely az S(v) listák alapján eldönti, hogy van-e a megkötéseknek megfelelő színezés, és ha van ilyen, talál is egyet. 7. Határozza meg a legrövidebb utak hosszát az A csúcsból az alábbi gráfban, a Bellman-Ford algoritmust futtatva. Lépésenként jelezze, hogyan változik az algoritmus által kitöltött T tömb. A:B(3),F(1),E(12); B:C(2); C:D(4),G(2); D:E(1); E:C(-3); F:B(-1),G(4),; G:H(2); H:D(2),E(1). 8. Nyári utazásunkra valutát akarunk váltani. A pénzváltó n különböző valutával foglalkozik, a j. fajta 1 egységéért r ij -t kell fizetni az i. pénznemben. (Pl. ha a j. a dollár, az i. a forint, akkor most r ij = 222 lehet.) Az r ij tömb felhasználásával adjon O(n 3 ) lépéses algoritmust, amely minden valutapárra meghatározza, hogy mi az elérhető legjobb átváltási arány, ha feltesszük, hogy az átváltásokért nem számolnak fel külön költséget. (Az i-ről a j-re való átváltás történhet több lépcsőben is, érdemes lehet előbb i-ről k 1 -re konvertálni, onnan k 2 -re, stb és végül j-re.) 9. A G(V, E) összefüggő, irányított gráf minden éle az 1, 2,...,k számok valamelyikével van súlyozva. Egy út értéke legyen az úton található élek súlyainak maximuma. Határozza meg, hogy ha adott két csúcs x, y V, akkor mennyi a lehető legkisebb értékű x-ből y-ba vezető út értéke. Ha G éllistával adott és e éle van, akkor a lépésszám legyen O(e log k). 10. A 3. feladatban adott gráfban határozza meg Floyd módszerével az összes pontpárra a legrövidebb utak hosszát! 11. Legyen G = (V, E) mátrixszal adott n-pontú, súlyozott élű irányított gráf. Tegyük fel, hogy G nem tartalmaz negatív összhosszúságú irányított kört, továbbá azt, hogy a G-beli egyszerű irányított utak legfeljebb 25 élből állnak. Javasoljunk O(n 2 ) költségű módszert az 1 V pontból az összes további v V pontokba vivő legrövidebb utak hosszának a meghatározására. 12. Kutyasétáltatáskor egy parkban egy gazda egy rögzített, egyenes szakaszokból álló útvonalon halad, aminek töréspontjai t 1,..., t n, a bejáratot jelölje t 0, a kijáratot t n+1. A kutyája szabadon szaladgál, de a t i pontokban találkozik a gazdájával. A t i és t i+1 pontokban való találkozás között a kutya szeretne egy fát is meglátogatni (minden i = 0, 1,..., n esetén legfeljebb egyet-egyet). Legyenek adottak az s(t i, t i+1 ) távolságok (0 i n), valamint minden fának az összes t i ponttól vett távolsága. Tegyük fel, hogy két találkozás között a kutya legfeljebb kétszer akkora távolságot tud megtenni, mint a gazda. Adjon algoritmust, ami segít a kutyának eldönteni, hogy mikor melyik fát látogassa meg ha a kutya célja, hogy minél több fánál járjon. Az algoritmus lépésszáma legyen O(n 2 f + nf 2 ), ahol f a parkban levő fák számát jelöli.
5. gyakorlat Dijkstra algoritmusa mátrixosan; Kupac 1. Egy irányított gráf csúcshalmaza {a, b, c, d, e, f}, az élek és súlyaik pedig az alábbiak: s(a, b) = 5, s(a, e) = 6, s(b, c) = 4, s(b, d) = 6, s(c, a) = 3, s(c, d) = 1, s(d, e) = 2, s(e, c) = 2, s(e, f) = 1, s(f, b) = 3, s(f, c) = 1, s(f, d) = 1. a) Dijkstra módszerével határozza meg a-ból az összes többi csúcsba vezető legrövidebb út hosszát. (Indokolni nem kell, de látszódjon, lépésenként hogyan változik a távolságokat tároló D tömb és a KÉSZ halmaz.) b) Egy él súlyát 1-gyel csökkentjük. Mely élek esetében nem változnak meg ezzel az a-tól mért távolságok? 2. (a) Építsen kupacot az órán tanult lineáris idejű módszerrel az alábbi tömbből: 31, 6, 50, 7, 2, 51. (b) Szúrja be az így kapott tömbbe az 1, majd ezután az 5 számot. (c) Hajtson végre két egymást követő MINTÖR-t az így kapott kupacon. 3. Adjuk meg az összes olyan minimális élszámú irányított gráfot (élsúlyokkal együtt), amely(ek)re az alábbi táblázat a Dijkstra algoritmusban szereplő D[ ] tömb változásait mutathatja. Adja meg a legrövidebb utakat tartalmazó P[ ] tömb állapotait is. v 1 v 2 v 3 v 4 v 5 v 6 0 2 6 7 0 2 5 9 6 0 2 5 6 9 6 0 2 5 6 8 6 0 2 5 6 7 6 4. A kezdetben üres kupacba egyenként szúrunk be n elemet. Igazolja, hogy előfordulhat, hogy a beszúrások során végzett összehasonlítások száma Ω(n log n). 5. A mátrixával adott G irányított gráf élei között van egy negatív súlyú él, a többi él súlya pozitív. A gráfban nincs negatív súlyú kör. Adjon O(n 2 ) lépésszámú algoritmust az s V (G) pontból az összes többi pontba vezető legrövidebb utak meghatározására. 6. Adjunk hatékony algoritmust egy kupac tizedik legkisebb elemének a megtalálására. Elemezzük a módszer költségét. 7. Egy irányított gráf csúcshalmaza {a, b, c, d, e, f}, az élek és súlyaik pedig a következőek: s(a, b) = 6, s(a, c) = 5, s(a, e) = 8, s(b, a) = 5, s(b, e) = 1, s(b, f) = 2, s(c, b) = 2, s(c, f) = 4, s(e, b) = 6, s(e, d) = 3, s(f, d) = 1, s(f, e) = 1. a) Dijkstra-algoritmussal határozza meg a-ból az összes többi pontba vezető legrövidebb út hosszát. (Indokolni nem kell, de lépésenként írja fel a távolságokat tartalmazó D tömb és a KÉSZ halmaz állapotát.) b) Vegyük hozzá a gráfhoz az (b, d) élet. Milyen s(b, d) 0 súlyok esetén változnának meg ezzel a legrövidebb utak hosszai? c) Egy él súlyát 1-gyel csökkentjük (az eredeti gráfban, ahol (b, d) él még nincsen). Mely élek esetében nem változnak meg ezzel az a-tól mért távolságok? 8. Egy városban teherautóval akarunk az A pontból a B pontba eljutni. Az úthálózatot ismerjük: bármely két csomópontra adott, hogy van-e közöttük közvetlen út (amelyik nem megy át más csomóponton) és ha igen, akkor milyen magas járművek haladhatnak át rajta anélkül, hogy egy híd vagy felüljáró alá beszorulnának. Az utak kétirányúak, a magasságra vonatkozó feltétel nem függ attól, milyen irányban akarunk haladni. Jelölje n a csomópontok számát. Miután megpakoltuk a teherautót és lemértük a magasságát, határozzuk meg O(n 2 ) lépésszámú eljárással, hogy el tudunk-e jutni A-ból B-be. 9. Igazoljuk, hogy egy n elemből álló bináris kupac felépítése Ω(n) összehasonlítást igényel! 10. (a) Építsen kupacot az órán tanult lineáris idejű módszerrel az alábbi tömbből: 4, 3, 5, 21, 2, 7, 12, 6. (b) Szúrja be az így kapott tömbbe az 1 számot. (c) Hajtson végre két egymást követő MINTÖR-t az így kapott kupacon. 11. A G = (V, E) irányított gráfban a csúcsok egy része fontos, ezeknek a csúcsoknak a halmaza az F V. A gráf minden éléhez tartozik egy pozitív élsúly. Az u F fontos csúcs távolsága a v F fontos csúcstól a legrövidebb olyan u-ból v-be menő út hossza, aminek nincs u-tól és v-től különböző fontos csúcsa. Legyen a gráf a mátrixával adott, és minden csúcsra adott az is, hogy fontos csúcs-e. Adjon algoritmust ami O( V 2 F ) lépésben meghatározza az összes fontos csúcspár közötti távolságot! 12. Adj O(n 4 ) futási idejű algoritmust, amely egy adott n pontú irányítatlan, nemnegatív élsúlyokkal ellátott gráfban megtalálja a legrövidebb összhosszúságú kört (ami egy ponton nem mehet át kétszer).
6. gyakorlat Dijkstra algoritmusa éllistásan; bináris keresés; beszúrásos és összefésüléses rendezés 1. Rendezze az 7,3,12,1,5,4 tömböt (a) beszúrásos rendezéssel és (b) összefésüléses rendezéssel. 2. A valós számokból álló a 1,...,a n sorozat olyan, hogy az a 2 1,a2 2,...,a2 n sorozat egy darabig nő, utána csökken. Adjon O(n) összehasonlítást használó algoritmust, ami rendezi az a 1,...,a n sorozatot. (ZH 2007. ápr. 27.) 3. Legyen adott egy csupa különböző egész számot tároló n elemű A tömb, és egy 1 k n szám. A k darab legkisebb abszolút értékű tömbbeli elemet akarjuk meghatározni. Ha több megoldás is van, elég csak egy ilyen k-ast megadni. Adjon algoritmust, ami meghatároz k darab ilyen értéket és a lépésszáma k log n esetben O(n). (ZH 2007. máj. 22.) 4. Vidéken autózunk, ahol benzinkút csak bizonyos falvakban van. Az A falubeli benzinkúttól indulunk és a B faluba akarunk elérni (ahol szintén van benzinkút). A falvak közötti utakat egy n csúcsú e élű, összefüggő, irányítatlan gráf írja le, melynek csúcsai a falvak, az élek pedig a falvak közötti utakat jelentik, egy él súlya a két falut összekötő útszakasz hossza. A gráf az éllistájával adott, és ezen kívül adott még az a k falu, amelyben van benzinkút. Adjon O(ke log n) lépésszámú algoritmust, amely meghatározza az A-ból B-be vivő legrövidebb olyan útvonalat, melynek során soha nem kell 600 kilométernél többet autóznunk két benzinkút között. (ZH 2006. ápr. 7.) 5. Legyen adott egy egészekből álló A[1 : n] tömb valamint egy b egész szám. Szeretnénk hatékonyan eldönteni, hogy van-e két olyan i,j {1,...,n} index, melyekre A[i] + A[j] = b. Oldjuk meg ezt a feladatot O(n log n) időben! 6. Az n méretű (nem feltétlenül rendezett) A tömb elemei különböző pozitív egész számok. Adjon algoritmust, amely meghatároz egy 1 k n számot és kiválaszt k különböző elemet az A tömbből úgy, hogy a kiválasztott elemek összege nem több mint k 3. Ha nincs ilyen k, akkor az algoritmus jelezze ezt a tényt. Az algoritmus lépésszáma legyen O(n log n). (Két szám összehasonlítása, összeadása vagy szorzása egy lépésnek számít.) (ZH 2004. jún. 10.) 7. Adott az A[1 : n] csupa különböző egész számot növekvő sorrendben tartalmazó tömb. (A tömbben negatív számok is lehetnek!) Adjunk hatékony algoritmust egy olyan i index meghatározására, melyre A[i] = i (feltéve, hogy van ilyen i): igyekezzünk minél kevesebb elem megvizsgálásával megoldani a feladatot! 8. A (növekvően) rendezett A[1 : n] tömb k darab elemét valaki megváltoztatta. A változtatások helyeit nem ismerjük. Javasoljunk O(n + k log k) uniform költségű algoritmust az így módosított tömb rendezésére! 9. Rendezze az 11, 3, 27, 2, 5, 1, 4, 8 tömböt (a) összefésüléses rendezéssel, (b) beszúrásos rendezéssel. 10. Az A[1... n] tömbben egész számokat tárolunk, ugyanaz a szám többször is szerepelhet. Határozzuk meg O(n log n) lépésben az összes olyan számot, amelyik egynél többször fordul elő a tömbben. (ZH 2004. márc. 29.) 11. Adott egy n n-es mátrix. Adj O(n 2 log n) összehasonlítást használó algoritmust, amely eldönti, vane két olyan sor, amelyeknek az első oszlopbeli elemei különböznek, viszont az összes többi oszlopban megegyeznek!(zh 2002. jún. 25.)
7. gyakorlat Kupacos rendezés, buborék- és gyorsrendezés: Láda- és radixrendezés 1. Rendezze az 7, 3, 12, 1, 5, 4 tömböt (a) buborékrendezéssel és (b) kupacos rendezéssel. 2. Rendezzük a következő láncokat a radix rendezés segítségével: abc, acb, bca, bbc, acc, bac, baa. 3. Adott n különböző elem, ezek közül keressük a kicsiket. A beszúrásos, az összefésüléses, illetve a kupacos rendezést a szokásos módon futtatva nagyságrendileg hány összehasonlítást végzünk, amíg megtudjuk, hogy melyik az első k darab legkisebb elem? 4. Adott egy egész számokat tartalmazó A[1..n] tömb, amelyben legfeljebb n elempár áll inverzióban egymással (két elem akkor áll inverzióban, ha a nagyobb megelőzi a kisebbet). Igaz-e, hogy a buborék-rendezés rendezi az A tömböt a) legfeljebb n összehasonlítással? b) legfeljebb n cserével? 5. Adott egy dobozban n különböző méretű anyacsavar, valamint egy másik dobozban a hozzájuk illő apacsavarok. Kizárólag a következő összehasonlítási lehetőségünk van: Egy apacsavarhoz hozzápróbálunk egy anyacsavart. A próbának háromféle kimenete lehet: apa < anya, apa = anya, vagy apa > anya; annak megfelelően, hogy az apacsavar külső átmérője hogyan viszonyul az anyacsavar belső átmérőjéhez. Szeretnénk az anyacsavarokhoz megtalálni a megfelelő apacsavarokat. Adjunk erre a feladatra átlagosan O(n log n) összehasonlítást felhasználó módszert! 6. Az A[1...n] tömbben egész számokat tárolunk, ugyanaz a szám többször is szerepelhet. Határozzuk meg O(n log n) lépésben a leggyakoribb számokat, vagyis azokat, amelyeknél többször semelyik másik szám sem fordul elő a tömbben. 7. A (növekvően) rendezett A[1 : n] tömb k darab elemét valaki megváltoztatta. A változtatások helyeit nem ismerjük. Javasoljunk O(n + k log k) költségű algoritmust az így módosított tömb rendezésére! 8. A G = (V, E) többszörös élet nem tartalmazó irányított gráf csúcsai legyenek {v 1, v 2,...,v n }. Tegyük fel, hogy a gráf olyan éllistával adott, amelyben minden csúcsnál a szomszédok tetszőleges sorrendben vannak felsorolva. Adjon algoritmust, ami O( V + E ) lépésben olyan éllistát hoz létre, amiben a szomszédok minden csúcsnál növekvő sorrendben vannak. 9. A 4 elemű I abc felett adott két szó: x = x 1 x 2 x n és y = y 1 y 2 y k, ahol 1 k n és x i, y j I. Keressük az x szóban az olyan részszavakat, amelyek anagrammái y-nak, azaz az olyan i indexeket, hogy az x i, x i+1,...,x i+k 1 betűk megfelelő sorrendbe rakva az y szót adják. Adjon algoritmust, ami x-ben az összes ilyen i helyet O(n) lépésben meghatározza. 10. Minden nap több új megmunkálandó munkadarab érkezik a műhelybe, de naponta csak eggyel végeznek. Tegyük fel, hogy M napon át minden nap M újabb munkadarab érkezik. A munkadarabok meg vannak számozva 1-től M 2 -ig, de tetszőleges sorrendben érkezhetnek. A műhelyben minden nap egy darabot, a felgyülemlett munkadarabok közül a legkisebb sorszámút csinálják meg. Jelölje A i az i-edik nap érkező munkadarabok halmazát, A i = M és A 1... A M = {1,...,M 2 }. Adjon algoritmust, amely az A i halmazokból O(M 2 ) lépésben meghatározza, hogy az M nap közül melyik nap melyik munkadarab fog elkészülni.
8. gyakorlat Bináris fák bejárásai; Bináris keresőfa; Piros-fekete fa 1. (a) Építsen beszúrásokkal bináris keresőfát az alábbi sorrendben érkező számokból: 7,3,2,9,8,12,6,4. (b) Milyen sorrendben írja ki a preorder, inorder és posztorder bejárás a csúcsokat? (c) Szúrja be az (a) résznél adott fába az 5-t, aztán törölje ki a 2,6 és 7 elemeket. 2. Építsen piros-fekete fát az alábbi sorrendben érkező számokból: 1,2,3,5,4, 6. 3. Egy bináris keresőfa valamely bejárásán mindig a {pre, in, post}-order valamelyikét értjük. (a) Mely bejárásoknál lehetséges az, hogy a tárolt elemek legnagyobbika megelőzi a legkisebbet? (b) Tegyük fel, hogy egy bináris keresőfában az 1, 2,..., n számok vannak tárolva, továbbá hogy a fa valamely bejárásánal a számok az n, n 1,..., 1 sorrendben következnek. Határozzuk meg, melyik lehetett ez a bejárás és milyen lehetett ez a bináris keresőfa! 4. Egy bináris keresőfában csupa különböző egész számot tárolunk. Lehetséges-e, hogy egy KERES(x) hívás során a keresési út mentén a 20, 18, 3, 15, 5, 8, 9 kulcsokat látjuk ebben a sorrendben? Ha nem lehetséges, indokolja meg miért nem, ha pedig lehetséges, határozza meg az összes olyan x egész számot, amire ez megtörténhet. 5. Egy piros-fekete fában valamelyik, a gyökértől egy levélig vezető úton sorban az alábbi színű pontok vannak: fekete, piros, fekete, fekete. Mennyi a fában tárolt elemek számának a minimuma? 6. Egy bináris fa inorder bejárása: preorder bejárása: Rekonstruáld a fát! j, b, k, g, i, a, c, d, f, e, h a, b, j, g, k, i, d, c, e, f, h. 7. Adott egy n csúcsú és egy k csúcsú piros-fekete fa. A két fában tárolt összes elemből O(n+k) lépésben készítsen egy rendezett tömböt. 8. Lehetséges-e, hogy egy piros-fekete fából a tárolt elemeket preorder bejárás szerinti sorrendben kiolvasva ezt kapjuk: 6, 1, 5, 3, 2, 4? 9. Tervezzen adatstruktúrát a következő feltételekkel. Természetes számokat kell tárolni, egy szám többször is szerepelhet. A szükséges műveletek: BESZÚR(i): i egy újabb példányát tároljuk TÖRÖL(i): i egy példányát töröljük MINDTÖRÖL(i): i összes példányát töröljük DARAB(i): visszaadja, hogy hány példány van i-ből ELEM(K): megmondja, a nagyság szerinti rendezésben a K-adik elem értékét. Az adatstruktúra legyen olyan, hogy ha m-féle elemet tárolunk, akkor mindegyik művelet lépésigénye O(log m). (Például ha a tárolt elemek 1,1,3,3,3,8, akkor DARAB(1)=2, ELEM(4)=3 és m =3.) 10. (a) Építsen beszúrásokkal bináris keresőfát az alábbi sorrendben érkező számokból: 7,10,8,5,3,2,1. (b) Milyen sorrendben írja ki a preorder, inorder és posztorder bejárás a csúcsokat? (c) Törölje ki a 1,5 és 7 elemeket az (a) részben kapott fából. 11. Építsen piros-fekete fát az alábbi sorrendben érkező számokból: 7,8,2,10,5,4. 12. Adott n pont a síkon, melyek páronként mindkét koordinátájukban különböznek. Bizonyítsuk be, hogy egy és csak egy bináris fa létezik, melynek pontjai az adott n pont, és az első koordináta szerint a keresőfa tulajdonsággal, a második szerint pedig a kupac tulajdonsággal rendelkezik. (Vigyázat: a kupac tulajdonságba nem értendő bele, hogy a fa teljes bináris fa legyen, mint amilyet a tanult kupacépítő algoritmus létrehoz.) 13. Egy piros-fekete fában lehetséges-e, hogy a piros-fekete tulajdonság megsértése nélkül (a) néhány piros csúcsot átváltoztathatunk feketére? (b) valamelyik, de csak egy piros csúcsot átváltoztathatunk feketére? (Mást nem változtatunk a fán.)
9. gyakorlat 2-3 fa, B-fa, vegyes adatszerkezetes példák 1. Illesszük be az alábbi 6 kulcsot egy kezdetben üres (2, 3)-fába a megadott sorrendben: D, B, E, A, C, F. Rajzoljuk le az eredményül kapott fát! 2. Egy 2-3 fába egymás után 1000 új elemet illesztettünk be. Mutassa meg, hogy ha ennek során egyszer sem kellett csúcsot szétvágni, akkor a beillesztések sorozata előtt már legalább 2000 elemet tároltunk a fában. (ZH 2003. márc. 31.) 3. Az [1, 178] intervallum összes egészei egy 2-3 fában helyezkednek el. Tudjuk, hogy a gyökérben két kulcs van, és az első kulcs a 17. Mi lehet a második? Miért? (ZH vmikor régen) 4. Egy orvosi rendelőben a regisztrációnál kell bejelentkezni, ahol az ott dolgozók eldöntik, hogy a beteg az épp rendelő két orvos közül A-hoz vagy B-hez kell kerüljön, vagy bármelyikükhöz kerülhet. Ezen kívül, a beutaló ismeretében, a beteghez egy, a sürgősséget kifejező, számot is rendelnek. Amikor valamelyik orvos végzett egy beteggel, akkor azon betegek közül, akiket nem csak a másik orvos láthat el, behívja a legnagyobb sürgősségi számút. Tegyük fel, hogy a kiosztott sürgősségi számok egymástól különbözőek. Írjon le egy olyan adatszerkezetet, ami abban az esetben, ha n beteg várakozik, akkor a regisztráción az új beteg beillesztését, illetve az orvosoknak a következő beteg kiválasztását O(log n) lépésben lehetővé teszi. (ZH 2008. márc. 28.) 5. Egy B 20 -fának (huszadrendű B-fának) 10 9 levele van. Mekkora a fa szintjeinek minimális, illetve maximális száma? 6. Írjon le egy olyan adatszerkezetet, amivel egész számok véges sok részhalmazát tárolhatjuk, ha minden tárolandó T i halmaznak véges sok eleme van. Három műveletet definiálunk, a BESZÚR lépésszáma legyen O( T i ), a másik két műveleté pedig O( T i + T j ). BESZÚR(i,x): a T i halmazhoz hozzáveszi az x egész számot METSZETMÉRET(i,j): megadja a két halmaz metszetének T i T j elemszámát UNIÓMÉRET(i,j): megadja a két halmaz uniójának T i T j elemszámát. 7. Egy kezdetben üres 2-3-fába az 1, 2,..., n számokat szúrtuk be ebben a sorrendben. Bizonyítsa be, hogy a keletkezett fában a harmadfokú csúcsok száma O(log n). (ZH 2004. márc. 29.) 8. Vázolja a 2-3 fának (és műveleteinek) egy olyan módosítását, amiben továbbra is van KERES, BESZÚR, TÖRÖL, MIN, MAX művelet, és ezeken kívül van még RANG és K-ADIK művelet is, ahol RANG(x) azt adja vissza, hogy a tárolt elemek között az x a rendezés szerint hányadik elem, a K-ADIK(i) pedig, hogy a rendezés szerint a tárolt elemek közül melyik az i-edik. A módosítás során a felsorolt szokásos műveletek lépésszámának nagyságrendeje ne változzon, és mindkét új művelet lépésszáma legyen O(logn), ahol n a tárolt elemek száma. (ZH 2008. május 9.)
10. gyakorlat Hash 1. Nyitott címzéssel hasheltünk egy 11 elemű táblába a h(k) = k (mod 11) hash-függvény és kvadratikus maradék próba segítségével. A következő kulcsok érkeztek (a megadott sorrendben): 6, 5, 7, 17, 16, 3, 2, 14. Add meg a tábla végső állapotát! Mit kaptunk volna, ha lineáris próbát használtunk volna? (ZH 2002. 06. 25.) 2. A T[0 : M] táblában 2n elemet helyeztünk el az első 3n helyen (3n < M) egy ismeretlen hash-függvény segítségével.(csak beszúrás volt, törlés nem fordult elő.) A táblában minden 3i indexű hely üresen maradt (0 i < n). Legfeljebb hány ütközés lehetett, ha az ütközések feloldására a) lineáris próbálást b) kvadratikus maradék próbálást használtunk? 3. Az 1 és 91 közötti összes 3-mal osztható egész számot valamilyen sorrendben egy M méretű hash-táblába raktuk a h(x) = x (mod M) hash-függvény segítségével, lineáris próbával. Ennek során hány ütközés fordulhatott elő, ha M = 35, illetve ha M = 36? (ZH 2008. 06. 03.) 4. A b 0...b n alakú n + 1 hosszú bitsorozatokat akarjuk tárolni. Tudjuk, hogy a b 0 paritásbit, ami a sorozatban az egyesek számát párosra egészíti ki. Ha nyitott címzésű hash-elést használunk h(x) x (mod M) hash-függvénnyel és lineáris próbával, akkor M = 2 n vagy M = 2 n + 1 méretű hash-tábla esetén lesz kevesebb ütközés? (ZH 2003. 06. 06.) 5. A T[0 : M 1] táblában rekordokat tárolunk nyitott címzésű hashelt szervezéssel. Az ütközések feloldására lineáris próbálást alkalmazunk. Tehát ha a h(k) sorszámú cella foglalt, akkor a K kulcsú rekordot a h(k) 1, h(k) 2,... sorszámú cellák közül az első üresbe tesszük. Tegyük fel, hogy a tábla használata során egy hibás törlés történt: egy cellából kitöröltünk egy rekordot a törlés-bit beállítása nélkül. (Vagyis a cellán nem látszik, hogy töröltünk belőle.) (a) Igaz-e, hogy a hibás törlés helye mindig megtalálható? (b) Adjunk hatékony (lineáris időigényű) algoritmust a tábla megjavítására. (Módosítsuk úgy a táblát, hogy megszűnjenek a hibás törlés negatív következményei.) (ZH 2005. 05. 26.) 6. Egy m méretű hash-táblában már van néhány elem. Adjon O(m) lépésszámú algoritmust, amely meghatározza, hogy egy újabb elem lineáris próbával történő beszúrásakor maximum hány ütközés történhet. (ZH 2005. 04. 08.) 7. A hash-függvény legyen f(k) = K, a táblaméret M = 7, és 1 K 20. Helyezzük el a táblában a 3, 4, 7, 11, 14, 17, 20 kulcsokat ebben a sorrendben (a) lineáris (b) kvadratikus maradék próbálást használva az ütközések feloldására. 8. A kezdetben üres M méretű hash-táblába sorban beraktuk a k 1, k 2,...,k n kulcsokat a h(x) x (mod M) hash-függvénnyel, lineáris próbával. Jelölje t 1 a keletkezett táblában az egymás melletti foglalt mezők maximális számát. (Ciklikusan értve, azaz t 1 a következő beszúráskori leghosszabb próbasorozat hossza.) Amikor ugyanezt a k 1, k 2,...,k n sorozatot ugyanabban a sorrendben egy üres 2M méretű táblába rakjuk be a h(x) x (mod 2M) hash-függvénnyel, lineáris próbával, akkor a kapott táblában legyen t 2 az egymás melletti foglalt mezők maximális száma. (a) Igazolja, hogy t 2 t 1 (b) Igaz-e, hogy t 1 2t 2?
12. gyakorlat Minimális feszítőfa 1. G irányítatlan gráf a következő éllistával (zárójelben a költségek, az élek mindkét végpontjukból fel vannak sorolva): a:b(2),c(3); b:a(2),d(2); c:a(3),d(1); d:b(2),c(1),e(2),f(4); e:d(2),f(1),g(2); f:d(4),e(1),g(2),h(1); g:e(2),f(2),h(3); h:f(1),g(3); Keressünk G-ben (a) Prim algoritmusával minimális költségű feszítőfát g-ből kiindulva! (b) Kruskal algoritmusával minimális költségű feszítőfát! (c) Boruvka módszerével minimális költségű feszítőfát! 2. A szoftverpiacon n féle grafikus formátum közötti oda-vissza konverzióra használatos programok kaphatók: az i-edik és a j-edik között oda-vissza fordító program ára a ij, futási ideje pedig t ij (ha létezik). (a) Javasoljunk módszert annak megtervezésére, hogy minden egyes formátumról a saját grafikus terminálunk által megértett formátumra a lehető leggyorsabban konvertáljunk! (Az ár nem számít.) (b) Javasoljunk módszert annak eldöntésére, hogy mely programokat vásároljuk meg, ha azt szeretnénk a lehető legolcsóbban megoldani, hogy a megvett programok segítségével bármelyik formátumról bármelyik más formátumra képesek legyünk konvertálni. (Itt a futási idő nem számít). [ZH régen] 3. Mátrixával adott egy G(V, E) irányítatlan gráf, melynek minden éléhez egy pozitív súly tartozik. A gráf minden csúcsa vagy egy raktárat vagy egy boltot jelképez, az élsúlyok a megfelelő távolságokat jelentik. Olyan G részgráfját keressük G-nek, amely minden csúcsot tartalmaz, és amelyben minden bolthoz van legalább egy raktár, ahonnan oda tudunk szállítani (azaz van köztük út a gráfban). Adjon O(n 2 ) lépésszámú algoritmust egy a feltételeknek megfelelő minimális összsúlyú G részgráf megkeresésére. [ZH 2003. 06. 06./5] 4. Legyen adva egy (egyszerű, irányítatlan, öszefüggő) n pontú G gráf éllistával, az élek súlyozásával együtt. Tegyük fel, hogy a G-ből a v 1 csúcs, valamint a v 1 -re illeszkedő élek elhagyásával keletkező G gráf még mindig összefüggő, és adott G egy minimális költségű feszítőfája. Adjunk minél hatékonyabb algoritmust a G gráf egy minimális költségű feszítőfájának az elkészítésére! (Teljes értékű megoldás: O(n log n) idejű algoritmus.) [ZH régen] 5. Éllistával adott a G = (V, E) egyszerű, összefüggő gráf. A gráf élei súlyozottak, a súlyfüggvény c : E { 1, 1}. Adjon algoritmust, ami G-ben O( V + E ) lépésben meghatározza, hogy mennyi a minimális súlya egy olyan részgráfnak, ami G minden pontját tartalmazza és összefüggő. [ZH 2008. 06. 03.] 6. Irányítatlan gráf tárolására adjon meg egy adatszerkezetet az alábbi műveletekkel: ÚJCSÚCS(v): a gráfhoz hozzáad egy új csúcsot; ÚJÉL(u,v): a már létező u és v csúcsok közé felvesz egy élet; VANÚT(u,v): igen értéket ad vissza, ha vezet az u és v csúcsok között út, egyébként pedig nem értéket. Ha a tárolt gráfnak n csúcsa van, akkor mindhárom művelet lépésszáma legyen O(log n). [ZH 2005. 06. 23./5] 7. Legyen G = (V, E) egy súlyozott irányítatlan gráf, amiben minden él súlya pozitív. Tegyük fel, hogy G összefüggő, de nem teljes gráf. A G gráfhoz egy 0 súlyú élt akarunk hozzáadni úgy, hogy a keletkező G gráfban a minimális feszítőfa súlya a lehető legkisebb legyen. Adjon algoritmust ami a mátrixával adott G gráfra O( V 3 ) lépésben meghatározza, hogy melyik két, a G-ben nem összekötött pont közé húzzuk be az új élet. [ZH 2006. 06. 12./5] 8. Éllistával adott egy összefüggő, egyszerű, irányítatlan G gráf csupa különböző élsúlyokkal. Jelöljük n-nel a csúcsok, e-vel pedig az élek számát. Mutassunk egy lineáris (azaz O(e)) költségű algoritmust, ami a G gráf egy minimális feszítőfájának [2/3n] élét előállítja! (Egy olyan [2/3n] elemszámú élhalmazt keresünk, ami biztosan része egy minimális költségű feszítőfának.) [ZH régen]
13. gyakorlat P, NP, conp, Karp-redukció 1. Bizonyítsa be, hogy az alábbi P 1, P 2, P 3 és P 5 eldöntési problémák NP-beliek, a P 4 pedig conp-beli. Melyekről tudja belátni, hogy P-ben vannak? P 1 : adott G páros gráf és k pozitív egész esetén van-e G-ben k élből álló párosítás? P 2 : adott G irányítatlan gráfban van-e Euler kör? P 3 : adott G irányítatlan gráf és k pozitív egész esetén van-e G-ben k darab független pont? P 4 : adott m egész szám prím-e? P 5 : adott (s 1,...,s n ) pozitív egészek és adott b egész pozitív szám esetén ki lehet-e választani néhány s i -t, melyek összege b? 2. Adjon Karp-redukciót a 3-SZÍN eldöntési problémáról a 4-SZÍN eldöntési problémára! 3. Bizonyítsa be, hogy P-beli a következő eldöntési probléma: egy adott 4 színnel színezhető G gráf csúcsai kiszínezhetőek-e a piros, kék, zöld, sárga színekkel úgy, hogy pontosan egy csúcs legyen piros és pontosan két csúcs kék. 4. A G irányítatlan gráf minden x pontjához tartozik egy s(x) súly. Célunk, hogy olyan feszítőfát találjunk a gráfban, amiben a levelekhez tartozó súlyok összege minimális. Fogalmazza meg a feladathoz tartozó eldöntési problémát, majd adjon Karp-redukciót a H-út feladatról erre a problémára. 5. Tegyük fel, hogy van egy olyan X eljárásunk, ami egy input G gráfra és k számra 1 lépés alatt megmondja, hogy van-e G-ben legalább k méretű független ponthalmaz. (a) Tervezz olyan, a X eljárást használó algoritmust, ami polinom időben kiszámolja α(g)-t, a független pontok maximális számát! (b) Tervezz olyan, a X eljárást használó algoritmust, amely polinom időben talál egy α(g) méretű független ponthalmazt! 6. Bizonyítsa be az alábbi két problémáról, hogy NP-beliek. Melyikről tudja belátni, hogy P-ben van? Melyikről látja, hogy conp-beli? P 1 : adott G irányítatlan gráfban van-e legfeljebb 100 élből álló kör? P 2 : adott G irányítatlan gráf és k pozitív egész esetén van-e G-ben legfeljebb k élből álló kör? 7. Tegyük fel, hogy van egy X programunk, amely egy n csúcsú G gráfról egy időegység alatt megmondja, hogy az kiszínezhető-e 3 színnel. Tervezz olyan X-t használó algoritmust, amely polinom időben megtalálja G egy 3 színnel való színezését (ha van ilyen egyáltalán)! 8. A G = (V,E) egyszerű, irányítatlan gráfban legyen X V és X = V X az X halmaz komplementere. Jelölje m(x) az olyan élek számát, melyek X és X között futnak. Legyen maxvágás az az eldöntési feladat, hogy adott G gráf és k egész szám esetén létezik-e olyan X részhalmaza a csúcsoknak, hogy m(x) k és legyen maxfelezés az az eldöntési feladat, hogy adott G gráf és k egész szám esetén létezik-e olyan X részhalmaza a csúcsokn, hogy m(x) k és X = X. Igazolja, hogy maxvágás maxfelezés.
Algoritmuselmélet Csima Judit 2009. május 12., kedd csima@cs.bme.hu 14. gyakorlat NP-teljesség 1. Mutassa meg, hogy az alábbi eldöntési probléma NP-teljes, úgy, hogy visszavezeti rá a MAXFTLEN ismerten NP-teljes problémát: adott G gráf és a,b > 0 egészek esetén van-e a G gráfnak a K a,b teljes páros gráffal izomorf feszített részgráfja? [kábé ZH. 2005.05.26/4] 2. Bizonyítsa be, hogy NP-teljes az alábbi eldöntési probléma: az adott a 1,...,a n egész számok három részre oszthatóak-e úgy, hogy mindhárom rész összege ugyanannyi legyen? [kábé ZH. 2004.06.03/4] 3. Mutassa meg, hogy az alábbi eldöntési probléma P-ben van, vagy azt, hogy NP-teljes: adott egy G(V,E) egyszerű gráf, melyre igaz, hogy E 2 V, kérdés, hogy a G gráf színezhető-e 3 színnel. [ZH. 2005.06.09/4] 4. Tudjuk, hogy P-beli annak eldöntése, hogy egy gráf síkgráf-e. Legyen a SÍK-MAXKLIKK eldöntési probléma a következő: adott egy G gráf és egy k egész, kérdés, hogy G olyan síkgráf-e, amiben van k pontú klikk. Mutassa meg, hogy ez a probléma NP-teljes, vagy mutassa meg, hogy P-ben van. 5. Jelölje P 1 azt az eldöntési problémát, hogy egy irányítatlan gráf összefüggő-e, P 2 pedig azt, hogy egy irányítatlan gráfban van-e Hamilton-kör. Lehetséges-e, hogy P 1 P 2, illetve hogy P 2 P 1? Válaszát indokolja is meg! 6. Tegyük fel, hogy P NP. Az alábbi feltételek közül melyikből következik és melyikből nem következik hogy az X eldöntési probléma nem P-beli? (a) Egy NP-teljes Y problémára X Karp-redukálható. (b) Egy NP-teljes Y probléma Karp-redukálható X-re. (c) az X probléma NP-beli. [ZH 2008.06.10] 7. Egy n emberből álló szervezetben b féle bizottság működik. Bizottsági ülések időpontját akarjuk kitűzni. Két különböző bizottság ülése akkor lehet azonos napon, ha nincs olyan ember, aki mindkét bizottságnak tagja. Legyen adott egy k pozitív egész szám és minden bizottsághoz a tagok névsora. Azt szeretnénk eldönteni, hogy a b bizottsági ülés kitűzhető-e összesen legfeljebb k különböző napra. Vagy adjon egy, a kívánt beosztást megtaláló polinomiális algoritmust vagy mutassa meg, hogy a feladathoz tartozó eldöntési probléma NP-teljes. [ZH. 2008. 05.07.] 8. Egy hivatal új épületbe fog költözni. Az épület minden emeletén ugyanakkora terület használható fel irodák kialakítására. Minden részleg megmondta, hogy összesen mekkora irodaterületre tart igényt. Azt akarjuk eldönteni, hogy meg lehet-e oldani a költözést úgy, hogy egyetlen részleg se legyen kettévágva, azaz egy részleg teljes egészében egy emeleten legyen (de egy emeletre kerülhet több részleg is). Igazolja, hogy a kapcsolódó eldöntési probléma P-ben van, vagy azt, hogy NP-teljes. [ZH. 2007. 06.19.] 9. Tekintsük a Hátizsák problémának azt a folytonos változatát, amikor a tárgyak tetszőlegesen darabolhatóak, egy s i súlyú v i értékű tárgynak vehetjük az r-edrészét (0 r 1 racionális szám), és akkor ennek a résznek rs i a súlya, rv i az értéke. Definiálja az ehhez tartozó FOLYTHÁTIZSÁK eldöntési problémát és vagy mutassa meg, hogy P-ben van vagy azt, hogy NP-teljes. [ZH. 2008. 06.03.]