Algoritmuselmélet 1. előadás. Katona Gyula Y. Budapesti Műszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz. I. B. 137/b kiskat@cs.bme.



Hasonló dokumentumok
Gyakorló feladatok ZH-ra

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Bináris keres fák kiegyensúlyozásai. Egyed Boglárka

Miskolci Egyetem GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR. Analízis I. példatár. (kidolgozott megoldásokkal) elektronikus feladatgyűjtemény

Mérések, hibák. 11. mérés. 1. Bevezető

19. Hasításos technikák (hash-elés)

STNB221 segédlet a PTE Polláck Mihály Műszaki Kar hallgatóinak. Az építész- és az építőmérnök képzés szerkezeti és tartalmi fejlesztése

Algoritmuselmélet 2. előadás

Csak felvételi vizsga: csak záróvizsga: közös vizsga: Villamosmérnöki szak BME Villamosmérnöki és Informatikai Kar május 31.

1Érkezett : 1. A KÉRELMEZŐ ADATAI A kérelmező szervezet teljes neve: Téglás Városi Sportegyesület

6. MÉRÉS ASZINKRON GÉPEK

Algoritmuselmélet 1. előadás

Algoritmuselmélet 1. előadás

PISZKOZAT. 1Érkezett : 1. A KÉRELMEZŐ ADATAI. A kérelmező szervezet rövidített neve: CKSE 2Gazdálkodási formakód:521 3Tagsági azonosítószám 1322

A rögzített tengely körül forgó testek kiegyensúlyozottságáról kezdőknek

LÁNG CSABÁNÉ SZÁMELMÉLET. Példák és feladatok. ELTE IK Budapest javított kiadás

3. gyakorlat Dinamikus programozás

Távközlési mérések Laboratórium ALCATEL OPTIKAI VÉGBERENDEZÉS MÉRÉSE

1Érkezett : 1. A KÉRELMEZŐ ADATAI A kérelmező szervezet teljes neve: Sárrétudvari Községi Sportegyesület

MEGOLDÁSOK ÉS PONTOZÁSI ÚTMUTATÓ

p j p l = m ( p j ) 1

MECHANIKA / STATIKA ÉS SZILÁRDSÁGTAN / FELADATOK

Számelméleti feladatok az általános iskolai versenyek tükrében dr. Pintér Ferenc, Nagykanizsa

1. Bevezetés. A számítógéptudomány ezt a problémát a feladat elvégzéséhez szükséges erőforrások (idő, tár, program,... ) mennyiségével méri.

Membránsebesség-visszacsatolásos mélysugárzó direkt digitális szabályozással

ELLENŐRZŐ KÉRDÉSEK LENGÉSTANBÓL: A rugóállandó a rugómerevség reciproka. (Egyik végén befogott tartóra: , a rugómerevség mértékegysége:

Algoritmuselmélet. Király Zoltán ELTE Matematikai Intézet február 18. Legfrissebb, on-line verzió:

PISZKOZAT. Ügyiratszám : be/sfphp /2014 1Érkezett : 1. A KÉRELMEZŐ ADATAI A kérelmező szervezet teljes neve: Izsáki Sárfehér SE

MKB Bank Zrt. Kockázati beszámoló. (234/2007. (IX. 4.) kormányrendelet a hitelintézetek nyilvánosságra hozatali követelményének teljesítésérıl

Algoritmuselmélet ZH április 8.

Raiffeisen Bank Zrt Budapest, Akadémia u. 6. Raiffeisen Direkt: (06-40) Fôvárosi Törvényszék Cégbírósága Cégjegyzékszám:

Matematikai programozás gyakorlatok

1Érkezett : 1. A KÉRELMEZŐ ADATAI. A kérelmező szervezet teljes neve: Első Mosonmagyaróvári Torna Egylet 1904

Izsáki Sárfehér SE ISSE

Tartalomjegyzék. 6. T keresztmetszetű gerendák vizsgálata Vasalási tervek készítése Vasbeton szerkezetek anyagai,

- IV.1 - mozgó süllyesztékfél. álló süllyesztékfél. 4.1 ábra. A süllyesztékes kovácsolás alapelve

1.1. Gyökök és hatványozás Hatványozás Gyökök Azonosságok Egyenlőtlenségek... 3

1. Számoljuk meg egy számokat tartalmazó mátrixban a nulla elemeket!

Analízisfeladat-gyűjtemény IV.

2-17. ábra ábra. Analízis 1. r x = = R = (3)

FIZIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ


Kerekegyházi SE. Nem jogosult. Adószám: Bankszámlaszám: Dr. Kelemen Márk.

ELASTO - LINE I. Vasalatlan saruk

Félévi időbeosztás (nagyjából) házi feladat beadási határidőkkel (pontosan) Valószínűségszámítás 2. matematikusoknak és fizikusoknak, 2009 tavasz



MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

A gyakorlatok HF-inak megoldása Az 1. gyakorlat HF-inak megoldása. 1. Tagadások:

Bor Pál Fizikaverseny, középdöntő 2012/2013. tanév, 7. osztály

Leggyakrabban használt adatbányászási technikák. Vezetői információs rendszerek

matematikai statisztika október 24.

Kőszegi Irén MATEMATIKA. 9. évfolyam

1. forduló (2010. február

P O R O SZ L Ó T E L E P Ü L É S R E N D E Z É S I T E R V

34.8 MFt 68.3 MFt 71.4 MFt MFt 28.9 MFt 29 MFt. 1.1 MFt 1.8 MFt 2.5 MFt MFt 2.5 MFt 3 MFt. 2 MFt 3.1 MFt 3 MFt. 32 MFt 37 MFt 37 MFt

1. SZAKASZ: Az anyag/keverék és a vállalat/vállalkozás azonosítása

Mesterséges intelligencia 1 előadások

9. LINEÁRIS TRANSZFORMÁCIÓK NORMÁLALAKJA

Természetes számok: a legegyszerűbb halmazok elemeinek. halmazokat alkothatunk, ezek elemszámai természetes 3+2=5


kétállószékes fedélszék tervezése

BLSE Sződ. Nem jogosult. Adószám: Bankszámlaszám: Mészáros Mihály.

Matematika emelt szintû érettségi témakörök Összeállította: Kovácsné Németh Sarolta (gimnáziumi tanár)

Algoritmuselmélet 6. előadás

Szombathely. Hajmási Milán Elnök. Hajmási Milán

Középszintű érettségi feladatsor Fizika. Első rész. 1. Melyik sebesség-idő grafikon alapján készült el az adott út-idő grafikon? v.

1. SZAKASZ: Az anyag/keverék és a vállalat/vállalkozás azonosítása


EÖTVÖS LORÁND TUDOMÁNYEGYETEM KLASSZIFIKÁCIÓ AZ ADATBÁNYÁSZATBAN

VI.11. TORONY-HÁZ-TETŐ. A feladatsor jellemzői

Valószín ségelmélet házi feladatok

Bursa Hungarica ösztöndíjak

TARTALOM A FIZIKA TANÍTÁSA. módszertani folyóirat










Á Á ü Ö Á Á Á ü ö ü ü ö ö ö ö ü Á ü ü

Miskolci Egyetem. Diszkrét matek I. Vizsga-jegyzet. Hegedűs Ádám Imre

Dinamika példatár. Szíki Gusztáv Áron


/CSAK ISKOLAI HASZNÁLATRA!/ GÉPELEM FELADATOK. II. rész KÉSZÍTETTE: SZEKERES GYÖRGY


Mátrixaritmetika. Tartalom:



Analízis 1. (BSc) vizsgakérdések Programtervez informatikus szak tanév 2. félév








Átírás:

. eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Február. ALGORITMUSELMÉLET. ELŐADÁS Forráok Rónyai Lajo Ivanyo Gábor Szabó Réka: Algoritmuok, TYPOT E X, 999 Feladatgyűjtemény letölthető: http://www.c.bme.hu/ kikat/algel Egyéb információk, hirdetmények ugyanitt. ALGORITMUSELMÉLET. ELŐADÁS Követelmények Zárthelyi dolgozat: 00. áprili. db 0 ponto feladat 00 percre, mindet lehet haználni. Pontozá: 0-9 pont -e, 0-9 pont -e, 0-9 pont -e, 50-0 pont 5-ö. Aláírá: Feltétele a ZH megíráa -ere. Szükég eetén pótzh. Vizga: Írábeli elméleti kérdé, példa, nem lehet emmit haználni. Pontozá: mint a ZH-n. Vizga jegy: Ha érdeme, akkor lehet a vizga ZH eredményét átlagolni az évközi eredménnyel. Ha aláírá cak pótzh-val zületett, ez a lehetőég nem áll fenn. ALGORITMUSELMÉLET. ELŐADÁS Algoritmu fogalma Egyelőre nem definiáljuk rendeen az algoritmu fogalmát. Eljárá, recept, módzer. Jól meghatározott lépéek egymáutánja, amelyek már elég pontoan, egyértelműen megfogalmazottak ahhoz, hogy gépieen végrehajthatók legyenek. ALGORITMUSELMÉLET. ELŐADÁS A zó eredete Al Khvarizimi (Mohamed ibn Múza) bagdadi matematiku a IX. zázadban könyvet írt az egézekkel való alapműveletek végzééről. algoritmu zámítógép program Javítá: Ha az így kialakult jegy nem elég jó, akkor kizárólag a vizga eredményhirdetéének időpontjában lehet zóban felelni, amivel ± jegyet lehet változtatni. ALGORITMUSELMÉLET. ELŐADÁS 5 Milyen hatékony egy algoritmu? Legtöbbzör cak a lépézám nagyágrendje érdeke. Hogyan függ a lépézám az input méretétől? Az input méretét legtöbbzör n-nel jelöljük. A lépézám ennek egy f függvénye, azaz ha n méretű az input, akkor az algoritmu f(n) lépét végez. Igazából az f függvény az érdeke. 00n vagy 0n, általában mindegy n vagy n már okzor nagy különbég, de néha mindegy n vagy n már mindig nagy különbég ALGORITMUSELMÉLET. ELŐADÁS Függvények nagyágrendje Definíció. Ha f(x) é g(x) az R + egy rézhalmazán értelmezett való értékeket felvevő függvények, akkor f = O(g) jelöli azt a tényt, hogy vannak olyan c, n > 0 állandók, hogy f(x) c g(x) teljeül, ha x n. Például: 00n + 00 = O(n), hizen n = 00, c= 0-re teljeülnek a feltételek, 00n + 00 0n, han 00 5n +n = O(n ) n +5n = O(n 5 ) n 000 = O( n ) ALGORITMUSELMÉLET. ELŐADÁS 7 Függvények nagyágrendje Definíció. Ha f(x) é g(x) az R + egy rézhalmazán értelmezett való értékeket felvevő függvények, akkor f =Ω(g) jelöli azt a tényt, hogy vannak olyan c, n > 0 állandók, hogy f(x) c g(x) teljeül, ha x n. Például: 00n 00 = Ω(n), hizen n > 00, c = 99-re teljeülnek a feltételek 5n n =Ω(n ) n 5n =Ω(n ) n =Ω(n 000 )

ALGORITMUSELMÉLET. ELŐADÁS Függvények nagyágrendje Definíció. Ha f = O(g) é f =Ω(g) i teljeül, akkor f =Θ(g). Például: 00n 00 = Θ(n) 5n n =Θ(n ) n 5n =Θ(n ) 000 n =Θ( n ) ALGORITMUSELMÉLET. ELŐADÁS 9 Függvények nagyágrendje Definíció. Legyenek f(n) é g(n) a pozitív egézeken értelmezett való értékű függvények. Ekkor az f = o(g) jelöléel rövidítjük azt, hogy Például: f(n) 0, ha n. g(n) 00n + 00 = o(n ), hizen 00n+00 0 ha n n 5n +n = o(n ) n +5n = o(n log n) n 000 = o( n ) ALGORITMUSELMÉLET. ELŐADÁS 0 Algoritmiku problémák megoldáa Algoritmiku probléma A modell B program A: pontoítá, egyzerűíté, abztrakció, lényegtelen elemek kizűrée, a lényeg kihámozáa Modell: okféle lehet, elég tág, de elég egyzerű, formalizált, ponto B: hatékony algoritmu, bemenő adatok eredmény, érdeme foglalkozni a kapott algoritmu elemzéével, értékeléével, megvizgálva, hogy a módzer mennyire hatékony ALGORITMUSELMÉLET. ELŐADÁS Arthur király civilizáció törekvéei Arthur király fénye udvarában 50 lovag é 50 udvarhölgy él. A király, aki közimert civilizáció erőfezítéeiről, elhatározza, hogy megházaítja jó lovagjait é zép udvarhölgyeit. Mindezt perze emberégeen zeretné tenni. Cak olyan párok egybekeléét akarja, amelyek tagjai kölcönöen vonzalmat éreznek egymá iránt. Hogyan fogjon hozzá? ALGORITMUSELMÉLET. ELŐADÁS Termézeteen pártfogójához, a nagyhatalmú varázlóhoz, Merlinhez fordul. Merlin rögvet felimeri, hogy itt i binári zimmetriku vizonyok ábrázolááról van zó. Nagy darab pergament vez elő, é nekilát egy páro gráfot rajzolni. A királyi paranc teljeítééhez Merlinnek élek egy olyan rendzerét kell kiválaztania a gráf éleiből, hogy a kiválaztott élek közül a gráf minden pontjához pontoan egy catlakozzon. A kiválaztott élek felelnek meg a tervezett házaágoknak. A gráfelmélet nyelvén telje pároítát kell kerenie. ALGORITMUSELMÉLET. ELŐADÁS e d a b c Közlekedéi lámpák ütemezée lámpák: ac, ad, bc, bd, ec é ed állapot: lámpák P, Z} Feladat: Mennyi a minimáli zámú állapot, ami biztonágo é nem okoz örök dugót? ac bc ec I. II. III. I. II. III. ad bd ed Gráfelméleti nyelven: Mennyi G kromatiku záma? ALGORITMUSELMÉLET. ELŐADÁS Mobil telefon átjátzók frekvencia kioztáa ALGORITMUSELMÉLET. ELŐADÁS 5 Szuperforrá kereée ALGORITMUSELMÉLET. ELŐADÁS Gyorabb algoritmu Egy adott átjátzóhoz egy adott frenkvenciát rendelnek. Egy telefon a közelben levő átjátzók közül válazt. Közel levő átjátzók frekvenciája különbözzön. Definíció. A G irányított gráf V cúca zuperforrá, ha minden -től különböző y V cúc eetén teljeül, hogy (, y) E é (y, ) E. A zuperforrá olyan cúc, amiből a gráf minden má cúcába él vezet, az -be pedig egyetlen má cúcból em megy él. i :=,j := n; while i j do if A[i, j] =then j := j A C A C A feladat a következő: tegyük fel, hogy az A adjacencia mátrixával adott a G =(V, E) irányított gráf, aminek a cúchalmaza V =,...,n}. Döntük el, hogy van-e G-ben zuperforrá. Ha igen, találjuk meg. Elő ötlet: Sorra vezük az i V cúcokat, mindegyikről megnézve, hogy zuperforrá-e. ele i := i +; (* Amikor ideérünk, már cak i lehet zuperforrá, ezt ellenőrizzük a továbbiakban. *) for k =to n do if k i é (A[i, k] vagy A[k, i] 0) then return(ninc zuperforrá) return(i zuperforrá). B A Ennek költége: az A mátrix (n n) elemét vizgáljuk meg. Jobb módzer: Ha (i, j) E, akkor j nem lehet zuperforrá, ha (i, j) E akkor i nem lehet zuperforrá Ennek költége: özeen n elemet vizgálunk meg, n -et a while cikluban, n -t az ellenőzénél Mennyire jó ez? B A

ALGORITMUSELMÉLET. ELŐADÁS 7 A költég elemzée Jelölje T (n) a legjobb (leggyorabb) algoritmu által megvizgált mátrix-elemek zámának maximumát az öze n pontú gráfra. Tudjuk, hogy T (n) n. Nyilvánvaló, hogy n T (n), mert le kell ellenőrizni, hogy zuperforrá-e. él megkérdezée legfeljebb cúcot zár ki mint lehetége zuperforrát. Egy algoritmu elő n kérdée után még legalább két cúc mondjuk i é j lehet zuperforrá. Ahhoz, hogy beláuk, hogy i zuperforrá, meg kell vizgálni az i-edik or é i-edik ozlop minden elemét. Vagy i-re vagy j-re igaz lez, hogy az elő n kérdé közül legfeljebb (n )/ kérdé vonatkozott rá. Így még n (n )/ legalább kérdé kell. Tehát T (n) n n + n =n n. Azaz a fenti algoritmu közel optimáli. ALGORITMUSELMÉLET. ELŐADÁS Rendezéi reláció Legyen U egy halmaz, é < egy kétváltozó reláció U-n. Ha a, b U é a<b, akkor azt mondjuk, hogy a kiebb, mint b. A< reláció egy rendezé, ha teljeülnek a következők:. a aminden a U elemre (< irreflexív);. Ha a, b, c U, a<b,éb<c, akkor a<c(< tranzitív);. Tetzőlege a b U elemekre vagy a<b, vagy b<afennáll (< telje). Ha < egy rendezé U-n, akkor az (U, <) párt rendezett halmaznak nevezzük. Példák: Z az egéz zámok halmaza. A < rendezé a nagyág zerinti rendezé. Az abc betűinek Σ halmaza; a < rendezét az abc-orrend adja. Az x betű kiebb, mint az y betű, ha x előbb zerepel az abc-orrendben, mint y. ALGORITMUSELMÉLET. ELŐADÁS 9 A Σ betűiből alkotott zavak Σ halmaza a zótárzerű vagy lexikografiku rendezéel. legyen X = x x x k é Y = y y y l két zó. Az X kiebb mint Y,havagyl>ké x i = y i ha i =,,...,k; vagy pedig x j <y j teljeül a legkiebb olyan j indexre, melyre x j y j. Tehát például kar < karika é bor < bot. A rendezé feladata: adott az (U, <) rendezett halmaz elemeinek egy u,u,...,u n orozata; rendezzük ezt át egy nem cökkenő v,v,...,v n orrendbe. Input: tömb, láncolt lita, (vagy bármi) Output: általában, mint az Input Lépéek: elemek mozgatáa, ceréje, özehaonlítáa A rendezé önmagában i előforduló feladat, de előjön, mint hazno adattruktúra i. Rendezett halmazban könnyebb kereni (pl. telefonkönyv). ALGORITMUSELMÉLET. ELŐADÁS 0 Kereé rendezett halmazban ALGORITMUSELMÉLET. ELŐADÁS Binári kereé ALGORITMUSELMÉLET. ELŐADÁS Binári kereé Bar Kochba játék: gondolok egy zámot 00-ig, hány eldöntendő kérdéből lehet kitalálni? Adott az (U, <) rendezett halmaz vége S = < <...< n < n} é U. rézhalmaza. Özehaonlítáokkal akarjuk eldönteni, hogy igaz-e S. Hány özehaonlítá kell? Lineári kereé Sorban mindegyik elemmel özehaonlítjuk. Költég a legrozabb eetben: n, mert lehet, hogy pont az utoló volt. Költég átlago eetben eetben: (n/) + Ozd meg é uralkodj: előzör a középő i-vel haonlítunk. Haonló feladatot kapunk egy S halmazra, amire vizont S S /. É így tovább: S S, S S,... Sk S k Pl. kereük meg, benne van-e az alábbi orozatban! 5,, 5, 7,, 5, 70, () 5,, 5, 7,, 5, 70, () 5,, 5, 7,, 5, 70, () 5,, 5, 7,, 5, 70, () Addig kell cinálni, amig S k, vagyi n. k = k n = k log n Ez k +özehaonlítá volt. = k + log n + log (n +) Tétel. Ez optimáli, ninc olyan kereő algoritmu, ami minden eetben keveebb mint log (n +) kérdét haznál. Bizonyítá: Az ellenég nem i gondol egy zámra, cak mindig úgy válazol, hogy minél többet kelljen kérdezni. Ha egy kérdét feltezek, é az igen válaz után mondjuk zóba jön x lehetőég, akkor a nem eetén zóba jön még n x lehetőég. Az ellenég úgy válazol, hogy minél több lehetőég maradjon, így el tudja érni, hogy legalább n/ marad. = k kérdé után i marad még n lehetőég. k Ha tehát n >, akkor nem tudom, hogy az-e a gondolt zám, vagy ninc benne a orozatban. k Tehát még egy kérdére zükég van. = n > = n> k = log k n>k.. eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Február. ALGORITMUSELMÉLET. ELŐADÁS Buborék-rendezé Input: A[ : n] (rendezetlen) tömb Ha valamely i-re A[i] > A[i +], akkor a két cella tartalmát kiceréljük. A tömb elejéről indulva a cerélgetve eljutunk a tömb végéig. Ekkor a legnagyobb elem A[n]-ben van. Imételjük ezt az A[ : n ] tömbre, majd az A[ : n ] tömbre, tb. procedure buborék (* az A[ : n] tömböt nem cökkenően rendezi *) for (j = n,j > 0,j := j ) do for (i =,i j, i := i +)do ha A[i +]< A[i], akkor ceréljük ki őket.} özehaonlítáok záma: n +n +...+= n(n ) cerék záma: n(n ) Java animáció: Buborék rendezé

ALGORITMUSELMÉLET. ELŐADÁS Bezúráo rendezé ALGORITMUSELMÉLET. ELŐADÁS Binári bezúráo rendezé lépézáma ALGORITMUSELMÉLET. ELŐADÁS Aló beclé özehaonlítá alapú rendezére Ha az A[ : k] réztömb már rendezett, akkor zúrjuk be a következő elemet A[k +]-et lineári vagy binári kereéel, majd a következőt ebbe, tb. özehaonlítá mozgatá átlago özehaonlítá átlago mozgatá lineári n(n ) (n + )(n ) n(n ) n binári n log (k +) k= (n + )(n ) n log (n +) k= n K := log + log +...+ log n n log n Jobb beclé: haználjuk fel, hogy log k +log k K<n +log +...+log n = n +log (n!) Felhaználva a Stirling formulát: n! (n/e) n πn kapjuk, hogy log n! n(log n log e)+ log n +log π n(log n, ) Ezért K n(log n 0, ) elég nagy n-re. Java animáció: Bezúráo rendezé Ugyanaz, mintha Bar Kochba-ban kellene kitalálni, hogy az elemek melyik orrendje (permutációja) az igazi orrend. Kezdetben n! lehetége orrend jön zóba. Két elemet özehaonlítva, a válaz két rézre oztja a orrendeket. Ha pl. azt kapjuk, hogy x<y, akkor az olyan orrendek, amikben x hátrébb van y-nál, már nem jönnek zóba. Ha az ellenég megint úgy válazol, hogy minél több orrend maradjon meg, akkor k kérdé után még zóba jön n! orrend. k Ha n! > nem tudjuk megadni a rendezét. = k Tétel. Minden özehaonlítá alapú rendező módzer n elem rendezéekor legalább log (n!) özehaonlítát haznál. ALGORITMUSELMÉLET. ELŐADÁS 5 Özeféülée rendezé Özeféülé (MERGE): Két már rendezett orozat (tömb, lita, tb.) tartalmának egy orozatba való rendezée: A[ : k] é B[ : l] rendezett tömbök = C[ : k + l] rendezett tömb Nyilván C[] = mina[],b[]}, pl. A[], ezt rakjuk át C-be é töröljük A-ból. C[] = mina[],b[]}, tb. ALGORITMUSELMÉLET. ELŐADÁS Példa A B C, 5, 0,,, 5, 0,,,, 5, 0,,, 0,,,, 5 0,,, 5, 0,,, 5,,,, 5,,, 0,, 5,,, 0, ALGORITMUSELMÉLET. ELŐADÁS 7 Özeféülée rendezé Alapötlet: Rendezzük külön a tömb elő felét, majd a máodik felét, végül féüljük öze. Ezt cináljuk rekurzívan. MSORT(A[ : n]) := MERGE(MSORT(A[ : n/ ]), MSORT(A[ n/ + : n])). Hogy elvarrjuk a rekurzió alját, legyen MSORT(A[i, i]) az üre utaítá. [tran= Replace ] özehaonlítáok záma: k + l, ahol k, l a két tömb hoza ALGORITMUSELMÉLET. ELŐADÁS Özehaonlítáok záma ALGORITMUSELMÉLET. ELŐADÁS 9 Kupac adatzerkezet ALGORITMUSELMÉLET. ELŐADÁS 0 Binári fa ábrázoláa tömbbel Jelöljük T (n)-el a lépézámot n hozú tömb rendezéekor. Az egyzerűég kedvéért tegyük fel, hogy n = k. T (n) n +T (n/), T (n) n +(n/ +T (n/)) = n +(n/ ) + T (n/). T (n) n +(n/ )+(n/ )+ + k (n/ k ) n log n. Felhaználva, hogy T () = 0. Az özeféülée rendezé kontan zorzó erejéig optimáli. Mozgatáok záma: n log n Tárigény: n cella (bonyolultabban megcinálva elég n + kont.) Java animáció: Özeféülée rendezé Egy (U, <) rendezett halmaz egy S vége rézhalmazát zeretnénk tárolni, hogy a bezúrá é a minimáli elem törlée (mintör) hatékony legyen. Alkalmazáok: Jobok indítáa Több rendezett halmaz özeféülée Gyor rendezéi algoritmu [tran= Box,I ]Telje binári fa: gyökér levelek A fa cúcai az A[ : n] tömb elemei. Az A[i] cúc bal fia A[i], a jobb fia pedig A[i +]. [tran= Replace ] = A[j] cúc apja A[ j/ ] Kupac tulajdonág: apa < fia 5 9 5 9

ALGORITMUSELMÉLET. ELŐADÁS Kupacépíté ALGORITMUSELMÉLET. ELŐADÁS Kupacépíté költége ALGORITMUSELMÉLET. ELŐADÁS j = l i (azaz i = l j) helyetteítéel a c b f f f é f kupacok felzivárog(f) Ha mina, b} <c, akkor mina, b} é c helyet cerél Ha a c elem a-val cerélt helyet, akkor felzivárog(f ), ha b-vel, akkor felzivárog(f ) } c addig megy lefelé, amig érti a kupac tulajdonágot. Lépézám: Ha l a fa zintjeinek záma, akkor l cere é (l ) özehaonlítá kupacépíté(f) Az f fa v cúcaira lentről felfelé, jobbról balra felzivárog(v). } Binári fában:. zint: pont. zint: pont. zint: pont. l-edik zint: > é l pont = n + l i=0 i = l = l +log n Az i-edik zinten levő v cúcra felzivárog(v) költége legfeljebb l i cere é legfeljebb (l i) özehaonlítá. A cerék záma ezért özeen legfeljebb l i= (l i)i. l l j l j = l j/ j < l n. j=0 j=0 / / / /. / /... l l l Tétel. Kupacépíté költége: O(n) l < < / < / < l ALGORITMUSELMÉLET. ELŐADÁS MINTÖR ALGORITMUSELMÉLET. ELŐADÁS 5 BESZÚR ALGORITMUSELMÉLET. ELŐADÁS A kupaco rendezé A minimáli elem az f gyökérben van, ezt töröljük. A f-be tezük a fa utoló zintjének jobb zélő elemét, majd felzivárog(f). Új levelet adunk a fához (ügyelve a teljeégre), ide tezük az elemet. Ezután -et mozgatjuk felfelé, mindig özehaonlítjuk az apjával. Előzör kupacot építünk, utána n darab MINTÖR adja nem cökkenő orrendben az elemeket. [J. W. J. William é R. W. Floyd, 9] 5 9 5 9 9 5 5 9 5 9 5 9 Költég: O(n) +O(n log n)=o(n log n) Legjobb imert rendező algoritmu. Ponto implementációval: n log n +n (özehaonlítáok záma) é n log n +, 5n (cerék záma). Java animáció: Kupaco rendezé Költég: O(l) =O(log n) Költég: O(l) =O(log n). eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Február. ALGORITMUSELMÉLET. ELŐADÁS Gyorrendezé [C. A. R. Hoare, 90] ozd meg é uralkodj: véletlen elem a tömbből = PARTÍCIÓ() = -nél kiebb elemek... -nél nagyobb elemek GYORSREND(A[ : n]). Válazunk egy véletlen elemet az A tömbből.. PARTÍCIÓ(); az eredmény legyen az A[ : k], A[k +:l], A[l +:n] felbontá.. GYORSREND(A[ : k]); GYORSREND(A[l + : n]).

ALGORITMUSELMÉLET. ELŐADÁS A PARTÍCIÓ() működée ALGORITMUSELMÉLET. ELŐADÁS A k-adik elem kiválaztáa ALGORITMUSELMÉLET. ELŐADÁS Kulcmanipuláció rendezéek Legyen i :=,j := n, = i-t növeljük, amíg A[i] <teljeül = j-t cökkentjük, amíg A[j] = i j -nél kiebb elemek -nél nem kiebb elemek Ha mindkettő megáll (nem lehet továbblépni), é i<j, akkor A[i] é A[j] < = Kiceréljük A[i] é A[j] tartalmát = i := i +é j := j. Ha a két mutató özeér (már nem teljeül i < j), akkor előforduláait a felő réz elejére mozgatjuk. PARTÍCIÓ lépézáma: O(n) GYORSREND lépézáma legrozabb eetben: O(n ) GYORSREND lépézáma átlago eetben:, 9n log n + O(n) =O(n log n) Java animáció: Gyorrendezé Elő ötlet: válazuk ki a legkiebbet, majd a maradékból a legkiebbet, tb. = O(nk) lépé Máodik ötlet: Rendezzük az elemeket, vegyük ki a k-adikat = O(n log n) lépé De van jobb: Tetzőlege k-ra meg lehet kereni O(n) lépében. Nem cak özehaonlítáokat haznál. Pl. imerjük az elemek zámát, belő zerkezetét. Ládarendezé (binort) Tudjuk, hogy A[ : n] elemei egy m elemű U halmazból kerülnek ki, pl.,...,m} = Lefoglalunk egy U elemeivel indexelt B tömböt (m db ládát), előzör mind üre. elő fázi = végigolvauk az A-t, é az = A[i] elemet a B[] lita végére fűzzük. Példa: Tegyük fel, hogy a rendezendő A[ : 7] tömb elemei 0 é 9 közötti egézek: A : 5 5 9 B : 55 9 ALGORITMUSELMÉLET. ELŐADÁS 5 máodik fázi = elejétől a végéig növő orrendben végigmegyünk B-n, é a B[i] liták tartalmát vizaírjuk A-ba. B : 55 9 A : 5 5 9 Lépézám: B létrehozáa O(m), elő fázi O(n), máodik fázi O(n + m), özeen O(n + m). Ez gyorabb, mint az általáno aló korlát, ha pl. m cn. Java animáció: Láda rendezé ALGORITMUSELMÉLET. ELŐADÁS Radix rendezé A kulcok özetettek, több komponenből állnak, t...t k alakú zavak, ahol a t i komponen az L i rendezett típuból való, a rendezé lexikografiku. Példa: Legyen (U, <) a huzadik zázadi dátumok özeége az időrendnek megfelelő rendezéel. L = 900, 90,...,999}, = 00. L = január, február,..., december}, =. ALGORITMUSELMÉLET. ELŐADÁS 7 rendezzük a orozatot az utoló, a k-adik komponenek zerint ládarendezéel a kapottat rendezzük a k -edik komponenek zerint ládarendezéel tb. Fonto, hogy a ládarendezénél, az elemeket a ládában mindig a lita végére tettük. Így ha két azono kulcú elem közül az egyik megelőzi a máikat, akkor a rendezé után em változik a orrendjük. = konzervatív rendezé L =,,...,}, =. A dátumok rendezée éppen az L i típuokból zármazó lexikografiku rendezé lez. ALGORITMUSELMÉLET. ELŐADÁS Miért működik a radix jól? Ha X<Y,azelő i tag megegyezik, de x i <y i, akkor az i-edik komponen rendezéekor X előre kerül. konzervatív rendezé = kéőbb már nem változik a orrendjük. Példa: 99. jan.. 99. jan.. 955. dec.. 955. jan.. 9. dec... 99. jan.. 99. jan.. 955. dec.. 955. jan.. 9. dec.. ALGORITMUSELMÉLET. ELŐADÁS 9 Lépézám: k ládarendezé özköltége: O(kn + k i= i) Ez lehet gyorabb az általáno korlátnál k = állandó é i cn = O(kn + k i= cn) =O(k(c +)n) =O(n). pl. az [,n k ] intervallumból való egézek rendezée k =logn, i = = O(n log n +logn) =O(n log n). Java animáció: Radix rendezé ALGORITMUSELMÉLET. ELŐADÁS 0 A Batcher-féle páro-páratlan özeféülé Párhuzamo algoritmu, az özeféülée rendezé egy változata. Az özeféülé lépée különböző, a többi réz ugyanaz. A = a <...<a l é B = b <... < b m özeféülée = C= c <... < c l+m. brigád: a <a <a 5 <...é b <b <b <... = u <u <u <.... brigád: a <a <a <...é b <b <b 5 <... = v <v <v <... Tétel. c i =minu i,v i} é c i =maxu i,v i} ( i (l + m)/).. 99. jan.. 99. jan.. 955. jan.. 955. dec.. 9. dec... 9. dec.. 955. jan.. 955. dec.. 99. jan.. 99. jan..

ALGORITMUSELMÉLET. ELŐADÁS Tétel. c i =minu i,v i} é c i =maxu i,v i} ( i (l + m)/). Bizonyítá: Belátjuk, hogy C k := c,...,c k} = u,...,u k} v,...,v k}. Mivel C a növekvő A é B özeféülée = C k = a,...,a } b,...,b k }. a,...,a } U = é b,...,bk } U = k a,...,a } V = é b,...,bk } V = k Mivel / + (k )/ = / + (k )/ beláttuk az elő állítát. = c i,c i} = u i,v i} A tétel miatt U é V már egy párhuzamo lépében özeféülhető. A rendezé: MSORT(A[ : n]) := PM(MSORT(A[ : n/ ]), MSORT(A[ n/ + : n])), ahol PM a fenti párhuzamo özeféülé. Párhuzamo lépézám: O(log n) ALGORITMUSELMÉLET. ELŐADÁS Kereőfák Tároljuk az U rendezett halmaz elemeit, hogy BESZÚR, TÖRÖL, KERES, MIN, (MAX, TÓLIG) hatékonyak legyenek. Binári fa bejáráa telje fa (új def.) = az aló zint i tele van = l zintű, telje fának l cúca van. Fa cúcai elem(x), bal(x), jobb(x) eetleg apa(x) é rezfa(x) + 5 9 ha x a gyökér, y pedig a 9-e cúc, akkor bal(jobb(x)) = y, apa(apa(y)) = x, elem(bal(x)) =, rezfa(x) = 7. ALGORITMUSELMÉLET. ELŐADÁS PREORDER, INORDER, POSTORDER pre(x) in(x) pot(x) begin begin begin látogat(x); in(bal(x)); pot(bal(x)); pre(bal(x)); látogat(x); pot(jobb(x)); pre(jobb(x)) in(jobb(x)) látogat(x) end end end + Lépézám: O(n) 5 9 ha x a gyökér, y pedig a 9-e cúc, akkor PREORDER: + 5 9 INORDER: 5+9 POSTORDER: 5 9 + ALGORITMUSELMÉLET. ELŐADÁS Binári kereőfa Definíció (Kereőfa-tulajdonág). Tetzőlege x cúcra é az x baloldali rézfájában levő y cúcra igaz, hogy elem(y) elem(x). Haonlóan, ha z egy cúc az x jobb rézfájából, akkor elem(x) elem(z). 9 Házi feladat: Igazoljuk, hogy egy binári kereőfa elemeit a fa inorder bejáráa növekvő orrendben látogatja meg. Egy kényelme megállapodá: a továbbiakban feltezük, hogy nincenek imétlődő elemek a kereőfában. 0 ALGORITMUSELMÉLET. ELŐADÁS 5 9 Naiv algoritmuok KERES(,S): Özehaonlítjuk -et S gyökerével -vel. Ha =, akkor megtaláltuk. Ha <, akkor balra megyünk tovább. KERES(,S) Ha >, akkor jobbra megyünk. Ugyanezt az utat járjuk be a KERES(5,S) kapcán, de azt nem találjuk meg. Lépézám: O(l), ahol l a fa mélyége MIN: mindig balra lépünk, amig lehet MAX: mindig jobbra lépünk, amig lehet Lépézám: O(l) TÓLIG(a, b, S): KERES(a, S) = INORDER a-tól b-ig Lépézám: O(n) ALGORITMUSELMÉLET. ELŐADÁS Naiv BESZÚR BESZÚR(, S): KERES(, S)-el megkereük hova kerülne é új levelet adunk hozzá, pl. BESZÚR(,S): Lépézám: O(l) 9 = 9 ALGORITMUSELMÉLET. ELŐADÁS 7 Naiv TÖRÖL TÖRÖL(, S): Ha levél, akkor trivi, pl. TÖRÖL(,S): 9 = TÖRÖL(, S): Ha -nek egy fia van, akkor: fiú(), pl. TÖRÖL(,S): 9 = 9 9 ALGORITMUSELMÉLET. ELŐADÁS Vagy pl. TÖRÖL(,S ): 0 9 = 9 TÖRÖL(, S): Ha -nek két fia van, akkor vizavezetjük az előző eetre. helyére tegyük y := MAX(bal())-t é töröljük y-t. Pl. TÖRÖL(,S ): 0 = 9 Állítá. y := MAX(bal())-nak nem lehet két fia. 9 Bizonyítá: Ha lenne két fia, akkor lenne egy y jobb fia i. De ekkor y >y Lépézám: O(l) 0 0 ALGORITMUSELMÉLET. ELŐADÁS 9 Faépíté naiv bezúráokkal Ha pl. az,,...,norozatból építünk fát így, akkor ezt kapjuk: Az építé költége: ++...+(n ) = O(n ) n Tétel. Ha egy véletlen orozatból építünk fát naiv bezúráokkal, akkor az építé költége átlagoan O(n log n). A kapott fa mélyége átlagoan O(log n).

. eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Február 5. ALGORITMUSELMÉLET. ELŐADÁS Java animáció: Binári kereőfa Binári kereőfa ALGORITMUSELMÉLET. ELŐADÁS AVL-fák G. M. Adelzon-Velzkij, E. M. Landiz, 9 = kiegyenúlyozott binári kereőfa Jelölje m(f) az f binári fa magaágát (zintjeinek zámát), ha x az f fa egy cúca; ekkor m(x) jelöli az x-gyökerű rézfa magaágát. Definíció (AVL-tulajdonág). Egy binári kereőfa AVL-fa, ha minden x cúcára teljeül, hogy m(bal(x)) m(jobb(x)). ALGORITMUSELMÉLET. ELŐADÁS A k zintzámú minimáli cúczámú AVL-fa gyökerének egyik rézfája k, a máik k zintű; az eredeti fa minimalitáa miatt pedig mindkét rézfa minimáli cúczámú. k k k ALGORITMUSELMÉLET. ELŐADÁS Tétel. Egy n-pontú AVL-fa zintjeinek k záma nem több mint O(log n), pontoabban k. log (n +). Bizonyítá: tétel = n F k+ Fibonacci-zámokra vonatkozó aló becléből n + φ k = log φ (n +) k = k. log (n +) Mekkora a k zintű AVL-fa minimáli cúczáma? 7 G = 7 7 G = 7 7 7 G = 7 7 7 7 7 7 7 G =7 7 = rekurzió G k =+G k + G k. Tétel. G k = F k+ ha k. Bizonyítá: k =, = indukció: G k =+G k + G k =+F k+ +F k =F k+. ALGORITMUSELMÉLET. ELŐADÁS 5 Az AVL-tulajdonág megőrzée Hogyan lehet a BESZÚR é TÖRÖL eljáráokat úgy megvalóítani, hogy megtarták az AVL-tulajdonágot? = forgatá f f y g y z g x h x h bal forgatá jobb forgatá dupla forgatá i Tétel. Legyen S egy n cúcból álló AVL-fa. BESZÚR(, S) után legfeljebb f f y y g g z x h x h i ALGORITMUSELMÉLET. ELŐADÁS egy (eetleg dupla) forgatáal helyreállítható az AVL-tulajdonág. A bezúrá költége ezzel együtt i O(log n). Bizonyítá: Minden cúcban tartuk zámon m(f)-et, az f gyökerű rézfa mélyégét, ez könnyen karban tartható. KERES(, S) egítégével megkereük helyét. A kereéi utat végigjárva megkereük a legaló olyan cúcot, ahol érül az AVL-tulajdonág = x l kereéi út h x h nagyítva l f y g x h x definíciója = m(h ) m(h) feltehetjük, hogy m(h ) = l, m(h) =l Két eet van: a) az f rézfába kerül b) a g rézfába kerül ALGORITMUSELMÉLET. ELŐADÁS 7 x y a) eet: m(f) < m(g) = x-ben y x nem érül az AVL-tul. m(f) >m(g) = y-ben i h f érül az AVL-tul. = f g g h m(f) =m(g) =m(h) = = m(y) =l = jobb forgatá helyre állítja az AVL-tul. A forgatá után y mindkét rézfájának a magaága l lez, x új rézfái g é h, mindkettő zintzáma l. y feletti cúcok magaága nem változik, így az AVL-feltétel feljebb i megmarad a kereő út mentén.

ALGORITMUSELMÉLET. ELŐADÁS b) eet: a g rézfába került é az y cúc fia (l =) = dupla forgatá y x y x ALGORITMUSELMÉLET. ELŐADÁS 9 b) eet: a g rézfába került é nem az y cúc fia (l >) x z y y z h g f f g g x g h ALGORITMUSELMÉLET. ELŐADÁS 0 Törlé AVL-fából Tétel. Az n pontú AVL-fából való naiv törlé után legfeljebb. log n (zimpla vagy dupla) forgatá helyreállítja az AVL-tulajdonágot. Nem bizonyítjuk, a módzer haonló, de nem mindig elég egy forgatá. Pl.: = m(f) =l (mert y-ban az AVL-tul. teljeül), é m(g )=m(g )=l (mert z-ben inc baj az AVL-tulajdonággal) = dupla forgatá elég Költég:. log (n +)=O(log n) Java animáció: AVL-fa ALGORITMUSELMÉLET. ELŐADÁS További kiegyenúlyozott fák ALGORITMUSELMÉLET. ELŐADÁS Súlyra kiegyenúlyozott fák ALGORITMUSELMÉLET. ELŐADÁS S-fák Az AVL-tulajdonág cak egy a lehetége kiegyenúlyozottági feltételek közül. Általánoítáa: Definíció. HB[k]-fák: (C. C. Foter, 97) Legyen k egy egéz zám. Egy binári kereőfa HB[k]-fa, ha minden x cúcára teljeül, hogy = HB[]-fák AVL-fák m(bal(x)) m(jobb(x)) k. A rézfák úlya legyen a cúczámuk: (f). Definíció. Egy binári kereőfát úlyra kiegyenúlyozott fának (röviden SK-fának) nevezünk, ha minden x belő cúcára teljeül, hogy < (bal(x)) (jobb(x)) < +. Feladat: Igazoljuk, hogy a leheletnyivel zigorúbb / < (bal(x)) (jobb(x)) < korlátokat már cak az l zintből álló l pontú binári fák a teljeítik. Tétel. Egy n cúcú SK-fa mélyége log n +. Bizonyítá: x y z (x) >(y)+(z) >(y)+( )(y) = (y) Legyenek x,x,...,x k egy k-hozúágú gyökértől levélig menő út cúcai. n = (x ) > (x ) > ( ) (x ) > > ( ) k (x k)=( ) k = (k )/. = Splay-tree: D. D. Sleator é R. E. Tarjan, 9. Olyan binári fa, ami tanul: pl. gyakran kereett elemet feljebb tezi. = Hozú átlago műveletor alatt az egy lépére eő költég optimáli lez. Fő öltlet: KIFORDÍT(x, f) átzervezi az fs-fát úgy, hogy x lez az új gyökér, ha x f; különben f gyökere x valamelyik zomzédja lez: vagy maxy f; y<x} vagy miny f; y>x}. KIFORDÍT(x, f) implementációja: KERES(x, f) = ha x f, akkor majd x-et vizük fel, ha x f, akkor a kereé x egyik zomzédjánál (maxy f; y<x} vagy miny f; y>x}) ér véget, vegyük ezt. = feltehetjük, hogy x f. ALGORITMUSELMÉLET. ELŐADÁS A következő eljárá x-et maximum két zinttel vizi feljebb, addig alkalmazzuk, amig x felér. (0) Ha x gyökér, akkor kézen vagyunk. (* A továbbiakban jelölje y az x apját. *) () Ha x-nek ninc nagyapja, akkor FORGAT(x), különben z y y () ha x é y i baloldali (jobboldali) gyerek, x x akkor FORGAT(y), majd FORGAT(x), különben () ha x é y különböző oldali gyerekek, z y x akkor FORGAT(x), majd imét FORGAT(x). x y x y z z z x y z ALGORITMUSELMÉLET. ELŐADÁS 5 Műveletek az S-fákban A kereőfákra jellemző KERES(x, f), BESZÚR(x, f) é TÖRÖL(x, f) műveletek a zokáoak. A RAGASZT(f, f ) művelet az f é f S-fákból egyetlen S-fát zervez, feltéve, hogy x<yteljeül minden x f é y f kulcra. AVÁG(x, f) művelet zétvágja f-et az f é f S-fákra úgy, hogy y x z teljeül minden y f é z f cúcra. Tétel. Az imertetett műveletek mindegyike megvalóítható kontan zámú KIFORDÍT é kontan zámú elemi operáció (özehaonlítá, mutató beállítá, tb.) egítégével. Bizonyítá: Cak két művelet, a RAGASZT é a TÖRÖL eetét nézzük meg közelebbről, többi trivi. RAGASZT(f, f ) = előzör KIFORDÍT(+,f)=:f = f gyökere x az új fa legnagyobb kulca = catoljuk f -t x jobb fiának ALGORITMUSELMÉLET. ELŐADÁS TÖRÖL(x, f) = KIFORDÍT(x, f)ha a kapott fa gyökere nem x, akkor x f = Ha x az új fa gyökere, töröljük é a kapott két f é f rézfára RAGASZT(f,f ) Tétel. Egy üre S-fából induló olyan m műveletből álló orozat költége, melyben n bezúrá van, O(m log n). Java animáció: S-fa

5. eladá Algoritmuelmélet 5. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Február. ALGORITMUSELMÉLET 5. ELŐADÁS --fák Hatékony kereőfa-kontrukció Ez i fa, de a binárinál bonyolultabb: egy nem-levél cúcnak vagy fia lehet. A --fa egy (lefelé) irányított gyökere fa, melyre: A rekordok a fa leveleiben helyezkednek el, a kulc értéke zerint balról jobbra növekvő orrendben. Egy levél egy rekordot tartalmaz. Minden belő (azaz nem levél) cúcból vagy él megy lefelé; ennek megfelelően a belő cúcok egy illetve két U kulcot tartalmaznak. A belő cúcok zerkezete tehát kétféle lehet. Az egyik típu így ábrázolható: m m m Itt m,m,m mutatók a cúc rézfáira,, pedig U-beli kulcok, melyekre <.Azm által mutatott rézfa minden kulca kiebb, mint,azm rézfájában a legkiebb kulc, é minden kulc kiebb, mint. Végül m rézfájában alegkiebb kulc.előfordulhat, hogy egy cúcból az utoló két mező hiányzik: m m A fa levelei a gyökértől egyforma távolágra vannak. ALGORITMUSELMÉLET 5. ELŐADÁS Példa --fára ALGORITMUSELMÉLET 5. ELŐADÁS Kereé --fában ALGORITMUSELMÉLET 5. ELŐADÁS BESZÚR --fába 0 0 5 0 0 5 0 0 5 Tétel. Ha a fának m zintje van, akkor a levelek záma legalább m. Megfordítva, ha S = n (itt S U a fában tárolt kulcok halmaza; S megegyezik a tárolt rekordok zámával), akkor m log n +. Bizonyítá: Minde belő cúcnak legalább fia van = az i-edik zinten legalább i cúc van ( i m). = m n, = m log n. 0 0 5 Haonló, mint a binári kereő fában. Lépézám: O(m), ahol log (n) + m log (n) + Ha a gyökeret i vágni kell = új gyökér, nő a fa magaága. Lépézám: O(m), (minden zinten legfeljebb vágá ) ALGORITMUSELMÉLET 5. ELŐADÁS 5 TÖRÖL --fából ALGORITMUSELMÉLET 5. ELŐADÁS B-fák ALGORITMUSELMÉLET 5. ELŐADÁS 7 B-fa definíciója Legyen x a legaló belő cúc a kereő út mentén. Ha x-nek három fia van = ha x-nek cak két fia van ha x (valamelyik) zomzédo tetvérének fia van = egyet áttezünk x alá ha x egyik zomzédo tetvérének inc három fia = özevonunk két kette cúcot Ez i felgyűrűzhet = Lépézám: O(m) R. Bayer, E. McCreight, 97 A --fa általánoítáa. Nagy méretű adatbáziok, külő táron levő adatok feldolgozáára haználják. Több zabvány tartalmazza valamilyen változatát. Probléma: Nem az özhaonlítá időigénye, hanem az adatok kiolvaáa, de okzor egy adat kiolvaáához amúgy i kiolvaunk több má adatot, egy lapot. = A fa cúcai legyenek lapok, a költég a lapeléréek záma. Egy m-edrendű B-fa, röviden B m-fa egy gyökere, (lefelé) irányított fa, melyre érvényeek az alábbiaknak: a) A gyökér foka legalább, kivéve eetleg, ha a fa legfeljebb kétzinte. b) Minden má belő cúcnak legalább m fia van. c) A levelek a gyökértől egyforma meze vannak. d) Egy cúcnak legfeljebb m fia lehet. d) A tárolni kívánt rekordok itt i a fa leveleiben vannak; egy levélben a lapmérettől é a rekordhoztól függően több rekord i lehet, növekvő, láncolt litában. A belő cúcok haonlítanak a --fák belő cúcaira. Egy belő cúc így néz ki: m 0 m m... i m i

ALGORITMUSELMÉLET 5. ELŐADÁS A B-fa zintzáma ALGORITMUSELMÉLET 5. ELŐADÁS 9 Szófák ALGORITMUSELMÉLET 5. ELŐADÁS 0 Hah-elé Tegyük fel, hogy egy B-fának n levele é k zintje van, é kereünk özefüggét e két paraméter között. A kici fáktól eltekintve a gyökérnek legalább két fia van, a többi belő cúcnak pedig legalább m. = n m k, = log m n + k k log n log m +. Minden művelet lépézáma: log n log m = O(log n), de a kontan kici, ha m nagy. Például: Például, ha m =, n = 0 (itt n az aló zint lapjainak záma), akkor k 9 +< 7. Egy rekord kereée tehát legfeljebb lap eléréét igényli. Java animáció: B-fák Legyen Σ egy vége halmaz, Σ a Σ-beli elemekből alkotott vége hozú orozatok. Σ egy rézhalmazát (zavak egy halmazát) zeretnénk tárolni. KÖR, KÖVÉR, KAPOS, KAP, KALAP = L A P A P O S K Ö R V É R azt jelenti, hogy itt a zó vége A zófa adatzerkezet érzéketlen a bezúráok orrendjére, a fa alakja cak a tárolt zavak özeégétől függ. A tömbbel megvalóított zófában való kereé: a zóbeli betűk záma ALGORITMUSELMÉLET 5. ELŐADÁS Hah-elé ALGORITMUSELMÉLET 5. ELŐADÁS Hah-elé alapvető ötelete ALGORITMUSELMÉLET 5. ELŐADÁS Vödrö hah-elé Nem tételezzük fel a lehetége kulcok özeégének (az U univerzumnak) a rendezettégét. Olyan módzercalád, amely a kereé, bezúrá, törlé é módoítá gyor é egyzerű megvalóítáát tezi lehetővé. Ninc rendezé = ninc MIN, MAX,... Cél = S U kulchalmazzal azonoított állomány megzervezée úgy, hogy a fenti műveletek átlago értelemben hatékonyak legyenek. Példa: Magyar állampolgárok zemélyi nyilvántartáa = kulc= jegyű zemélyi zám lehetége zemélyi zámok = 0 0 millió darab elég lefoglalni millió rekordnak helyet Olyan h függvény kell, ami minden zemélyi zámhoz rendel egy egézet a [0, 0 ] intervallumból. Jó lenne ha, K K eetén h(k) h(k ) teljeülne, de ez nem lehetége. = ütközéek elkerülhetetlenek Vezünk egy alkalma h hah-függvényt, előnek a K kulcú elemet a h(k) cellába próbáljuk illezteni. Ha kéőbb érkezik egy K elem, amire h(k) =h(k ), akkor ütközé van. Az ütközéek feloldáára több módzer i van, próbálunk má helyet találni K -nek. Fonto kérdé a megfelelő hah függvény kiválaztáa i, pl. h(k) =kont. nyilván nem praktiku. Főleg külő táron tárolt, nagy állományok kezeléére. Minden elemet, amelyre h(k) =i betezük V (i)-be, ha több ilyen i van, láncolt litaként. V [0 : M ] vödörkatalógu, V [i] mutató egy vödörbe, amiben az elemek litái (lapláncai) vannak. (A vödrök mérete általában kici.) K 0 h(k) M V K egy vödör lapjai ALGORITMUSELMÉLET 5. ELŐADÁS Kulcok a vödörben ALGORITMUSELMÉLET 5. ELŐADÁS 5 Hah-elé költége ALGORITMUSELMÉLET 5. ELŐADÁS Hahelé nyitott címzéel Hogyan helyezzük az új kulcot a vödörbe? Az elő zabad helyre tezük, ha kell új lappal bővítünk (az elején). Kulc zerint rendezve vannak, bezúrákor a helyére tezük. Kereé a hah-táblában Kizámítjuk h(k)-t A V [h(k)] vödörben kereünk zekvenciálian, addig megyünk, amig megtaláljuk, vagy véget ér. Törlé ugyanígy. Külő tára zerkezet = lapeléréek záma. M vödör van, é l-lapnyi rekordot tárolunk = egy vödörbe átlagoan l/m lap kerül = átlago lánchoz = Kereé áltago lépéhoza: +l/m Hogyan válazuk meg M-et?: l/m legyen kb., de hagyjunk rá 0%-ot Példa: 000 000 rekordból álló állományt zeretnénk láncoláo módzerrel kezelni, egy lapon 5 rekord fér el. Ekkor l = 000 000/5 = 00 000 = M 0 000 0 000 = kereé átlago költége valamivel lapeléré alatt marad. Cak belő memóriá módzerként haznoak. Fő ötlet: ha h(k) már foglalt, kereünk egy üreet valamilyen módzerrel. Legyen 0,h (K),h (K),...,h M (K) a 0,,...,M zámok egy permutációja = végigpróbálgatjuk a h(k) +h i(k) (mod M) orzámú cellákat (i =0,,...,M ) azelő üre helyig, ahol a rekordot elhelyezzük. = Ha ninc üre, a tábla betelt. 0 K h(k) h(k) +h(k) h(k) +h(k) h(k) +h(k) M

ALGORITMUSELMÉLET 5. ELŐADÁS 7 h i (K) := i Lineári próbálá Vizafelé lépkedünk egyeével h(k)-tól indulva az elő üre helyig. Sikere kereé átlago költége: C N = Sikertelen kereé átlago költége: ( + ) α C N = ( ( ) ) + α ahol α = N/M a telítettégi (betöltöttégi) tényező, N a táblában levő rekordok záma, M a tábla celláinak záma ALGORITMUSELMÉLET 5. ELŐADÁS Példa: M = 7,h(K) := K beilleztendő:,, 9,, 0 α / 0, 0, 9 C N 5, 5 C N 5 50, 5 (mod 7), lineári próba, 0 5 0 9 Ha mot töröljük a 9-et, akkor kéőbb nem találnánk meg a -et. = 9 helyére egy peciáli TÖRÖLT jelet pl. -ot tezünk. = 0 5 0 Lineári próba hátránya: Ha már ok cella tele van, kialakulnak egybefüggő comók, megnő a kereéi, beilleztéi út = elődlege comóodá Java animáció: Hah-elé lineári próbával. eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Márciu. ALGORITMUSELMÉLET. ELŐADÁS Hah-elé álvéletlen próbával A 0,h (K),h (K),...,h M (K) próbaorozat a 0,,...,M zámoknak egy a K kulctól független álvéletlen permutációja. A orozatnak gyoran é hatékonyan reprodukálhatónak kell lennie véletlen Ha h(k) =h(l), akkor a K é L kulcok telje próbaorozata i megegyezik = máodlago comóodának Kvadratiku maradék próba Legyen M egy k +alakú prímzám, ahol k egy egéz. Ekkor a próbaorozat legyen ( ) M ( ) M 0,, ( ),, ( ),...,,. = Belátjuk, hogy ez tényleg permutáció. ALGORITMUSELMÉLET. ELŐADÁS Tétel. Ha M egy k + alakú prímzám, akkor ninc olyan n egéz, melyre n (mod M). Bizonyítá: Indirekt tegyük fel, hogy n egy egéz zám é n (mod M). = ( ) M n M n M (mod M). Az utoló lépénél a ki Fermat-tételt haználtuk. Ha 0 i<j M, akkor i j (mod M). = j i =(j i)(j + i) felbontá egyik tényezője em lehet oztható M-mel, tehát a zorzatuk em Ugyanígy = i j (mod M). i j (mod M) = (ij ) (mod M) ALGORITMUSELMÉLET. ELŐADÁS Sikere kereé költége: Sikertelen kereé költége: C N log( α) α C N α log( α) ( α) Ezek az özefüggéek valamivel általánoabban érvényeek az olyan módzerekre, amelyekre h i(k) =f i(h(k)); vagyi ahol a h(k) érték már az egéz próbaorozatot meghatározza. ALGORITMUSELMÉLET. ELŐADÁS Kettő hah-elé G. de Balbine, J. R. Bell, C. H. Kaman, 970 körül. Lényeg: h mellett egy máik h hah-függvényt i haználunk a h (K) értékek relatív prímek legyenek az M táblamérethez A K kulc próbaorozata: h i(k) := ih (K). Ha M é h (K) relatív prímek = 0, h (K), h (K),..., (M )h (K) orozat elemei mind különbözők modulo M Fonto ajátoága: különböző K é K kulcok próbaorozatai jó eéllyel akkor i különbözők leznek, ha h(k) =h(k ). A legjobb imert implementációk időigénye (empiriku adatok alapján) ALGORITMUSELMÉLET. ELŐADÁS 5 A kettő hah-elé kiküzöböli mindkét-féle comóodát Sikertelen kereé eetén minden érdeke α-ra gyorabb, mint a lineári próbálá Sikere kereékor cak az α 0, tartományban lez gyorabb a lineári próbálánál. C N α log ( α) é C N α.

ALGORITMUSELMÉLET. ELŐADÁS Hah-függvények ALGORITMUSELMÉLET. ELŐADÁS 7 Oztómódzer ALGORITMUSELMÉLET. ELŐADÁS Szorzómódzer legyen könnyen (gyoran) zámítható é minél keveebb ütközét okozzon. A máodik követelmény elég nehezen megfogható, mert a gyakorlatban előforduló kulchalmazok egyáltalán nem véletlenzerűek. hazno tanácok = h(k) értéke lehetőleg a K kulc minden bitjétől függjön é a h értékkézlete a telje [0,M ] címtartomány legyen Legyen h(k) :=K (mod M), ahol M a tábla vagy a vödörkatalógu mérete. Feltezük, hogy a kulcok egéz zámok. A h(k) zámítáa gyor é egyzerű. A tábla mérete em teljeen közömbö. Például ha M a egy hatványa, akkor h(k) cak a kulc utoló néhány bitjétől függ. AjóM értékeket illetően van egy zéle körben elfogadott recept: D. E. Knuth javalata = M-et prímnek válaztjuk, úgy, hogy M nem oztja r k +a-t, ahol r a karakterkézlet elemzáma (pl., vagy 5) é a, k kici" egézek. M prím = lényege feltétel a kvadratiku maradék próbánál. Könnyű hozzájuk relatív prím zámot találni = kettő hah-elé β egy rögzített paraméter h(k) := M βk}. x} jelöli az x való zám törtrézét Szemléleteen = βk} kizámítáával a K kulcot véletlenzerűen" belőjük a [0, ) intervallumba = az eredményt felkálázzuk a címtartományba. Hatékonyan zámítható peciáli eet: M = t, w =, é legyen A egy a w-hez relatív prím egéz. Ekkor β = A válaztá mellett h(k) igen jól zámolható. w A zámok binári ábrázoláával dolgozva lényegében egy zorzát é egy eltolát kell elvégezni. ALGORITMUSELMÉLET. ELŐADÁS 9 A zorzómódzer jól vielkedik zámtani orozatokon pl. termék, termék, termék,...eetében Megmutatható, hogy a h(k),h(k + d),h(k + d)...orozat közelítőleg zámtani orozat lez, azaz h jól zétdobja" a kulcok zámtani orozatait. Tétel (T. Só Vera, 957). Legyen β irracionáli zám, é nézzük a 0, β}, β},..., nβ} pontok által meghatározott n +rézintervallumot [0, )-ben. Ezek hozai legfeljebb különböző értéket vehetnek fel, é (n +)β} a leghozabbak egyikét fogja két rézre vágni. a [0, )-beli zámok közül a legegyenleteebb elozlát a β = φ = 5 =0.09...é a β = φ = φ értékek adják. = érdeme a zorzómódzernél az A-t úgy válaztani, hogy A w közel legyen φ -hez. = Fibonacci-hah-elé ALGORITMUSELMÉLET. ELŐADÁS 0 A kettő hah-elé máodik függvénye Olyan h függvény kell, melynek értékei a [0,M ] intervallumba enek, é relatív prímek az M-hez Ha M prím = h (K) :=K (mod M ) +. = h (K) é M relatív prímek = elég ok különböző próbaorozatot ad Java animáció: Hah-elé ALGORITMUSELMÉLET. ELŐADÁS Szekvenciáli kereé Ha egy állomány (tömb, lita, tb.) zegénye zerkezetű = ninc jobb, mint elejétől a végéig" bejárni, vagy legalábbi addig, amíg a kereett adatot meg nem találjuk. Ha egyenlő eéllyel kell kereni az elemeket = Sikere kereé átlago költége: ++ + N = N +. N Sikertelen kereé költége: N Ha az állományban az elemek nagyág zerint rendezettek = Sikere kereé átlago költége: N+. Sikertelen kereé költége: ++ + N +N + N = N N + + N N + < N +. ALGORITMUSELMÉLET. ELŐADÁS Tegyük fel, hogy cak ikere kereéekkel van dolgunk, é legyen p i annak a valózínűége, hogy az R i rekordot kereük. = Sikere kereé átlago költége: C N = p +p +p + + Np N. Hogy érdeme orba rendezni az R i rekordokat? = cökkenő orrendben Különböző elozláok eetén: Egyenlete: p i = N = CN = N+ Egy nagyon ferde elozlá: p i = i = C N = N ALGORITMUSELMÉLET. ELŐADÁS Zipf elozlá: p i = ih N, ahol H N =+ + +...+ =logn +0.557...+ o() n = N N C N = ip i = i = N N ih i= i= N H N log N 0-0 zabály: Tapaztalat = Az adateléréi igények 0%-a a rekordoknak körülbelül cak 0%-át érinti. p i = c i ϑ, ahol log 0, ϑ = log 0, 7, c = é H ( ϑ) H ( ϑ) N =+ + + ( ϑ) N ( ϑ) N = C N 0, N ALGORITMUSELMÉLET. ELŐADÁS Önzervező módzerek Mit tehetünk abban az eetben, ha a p i kereéi valózínűégeket nem imerjük, vagy eetleg azok idővel változnak? A kereett (é megtalált) R i elemet a tábla elejére vizük. Az eredmény: R i R R... R N A kereett (é megtalált) R i elemet felceréljük a megelőzővel. R... R i R i... R N Ha az elozlá időben változik, akkor az elő megoldá ajánlato. Ha a p i} elozlá tabil, azaz időben nem változik, akkor a máodik heuriztika eredményeebb.

ALGORITMUSELMÉLET. ELŐADÁS 5 Információtömöríté ALGORITMUSELMÉLET. ELŐADÁS 0 ALGORITMUSELMÉLET. ELŐADÁS 7 Huffman-kód A b,...,b n betűkből álló zöveget zeretnénk bitorozatként kódolni. 0 0 Optimáli ilyen fa: uniform kódolá = log n a legrövidebb lehetége kódhozúág egy betűre A 0 E F Kezdetben n izolált cúcpontunk van. b i címkéje legyen q i. eltérő hozú kódzavak = dekódolá problémáabb Definíció. Egy bitorozatokból álló kód prefix kód, ha egy betű kódja em prefixe (kezdőzelete) egy máik kódjának. Formálian: ha x é y két különböző betű kódja, akkor ninc olyan z bitorozat, melyre xz = y. Egy prefix-tulajdonágú kóddal leírt üzenet egyértelműen vizafejthető. B 0 C Probléma: Adott egy zöveg, melyben a b i karakter q i-zer fordul elő. Kereünk olyan fát, amelyre a q ih(b i) özeg minimáli, ahol egy x cúcra h(x) a gyökértől x-ig vezető úton bejárt élek záma. D Tegyük fel, hogy már megépítettük az S,...,S k fákat, ezek gyökérpontjai x,...,x k, utóbbiak címkéi az r,...,r k zámok. Ekkor vezük a két minimáli címkéjű gyökeret (legyenek ezek x i é x j). Ezek fölé egy új y gyökérpontot tezünk, melynek fiai x i é x j.azy címkéje r i + r j. A fák záma eggyel cökken. Megállunk, ha már cak egy fa marad. Özeen n ilyen özevonó lépé zükége. ALGORITMUSELMÉLET. ELŐADÁS 0 0 0 7 0 0 0 A B C D E F 5 5 ALGORITMUSELMÉLET. ELŐADÁS 9 KAKUKKMADARAMNAK = 7 betű = uniform kódoláal betűnként bit, özeen bit. 0 0 0 0 0 0 0 N R D U M A K 5 5 A betűk kódjai: K:, A: 0, M: 0, U: 00, D: 000, N: 000, R: 00 kódzó: 00000000000000000 KAKUKKMADARAMNAK özeen 0 bit ALGORITMUSELMÉLET. ELŐADÁS 0 Optimáli kód Tétel. A Huffman-fa optimáli. Pontoabban fogalmazva, a Huffman-fa eetén az I = q ih(b i) özeg minimáli azon binári fák között, amelyek levelei b,...,b n. Bizonyítá: A Huffman-fa által adott I érték legyen H(q,q,...,q n). kontrukció = H(q,...,q n)=h(q + q,q,...,q n)+q + q Jelölje Opt(q,q,...,q n) a q i gyakoriágok eetén elérhető optimáli I-értéket. Lemma. Legyen továbbra i q q a két legkiebb gyakoriág. Ekkor Opt(q,q,...,q n)=opt(q + q,q,...,q n)+q + q. ALGORITMUSELMÉLET. ELŐADÁS Bizonyítá: Minden belő cúcnak két fia van. Legyen mot x egy levél az optimáli fánkban, melyre h(x) a lehető legnagyobb, x-nek van a fában egy y tetvére, címkéik q é q. Töröljük az x é y cúcokat, é írjuk az új levélbe a q + q címkét. AfaI-értéke legyen J. = Opt(q,q,...,q n)=j (h(x) )(q + q )+q h(x) +q h(x) = J + q + q, = az új fának i optimálinak kell lennie a q + q,q,...,q n gyakoriágokra vonatkozóan, hizen, ha J-n tudnánk javítani, akkor az eredeti fán i. Bizonyítá: (Tétel) Indukció, n = Tegyük fel, hogy legfeljebb n betű eetén igaz = Az indukció feltevé zerint 7. eladá Algoritmuelmélet 7. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Márciu. Opt(q + q,q,...,q n)=h(q + q,q,...,q n) = Opt(q,q,q,...,q n)=h(q,q,q,...,q n) Java animáció: Huffman-fa

ALGORITMUSELMÉLET 7. ELŐADÁS Múltkori animációk ALGORITMUSELMÉLET 7. ELŐADÁS A Lempel Ziv Welch-módzer ALGORITMUSELMÉLET 7. ELŐADÁS LZW kódolá Java animáció: Hah-elé Java animáció: Huffman-fa A. Lempel é J. Ziv, 970; T. Welch 9 Haználja: GIF, v.bi, compre; ZIP, ARJ, LHA Nem betűnként kódól, hanem a zöveg bizonyo zavaiból zótárat épít. = S az egybetű zavak, azaz Σ elemei mind benne vannak S-ben; ha egy zó benne van a zótárban, akkor annak minden kezdődarabja i benne van; a zótárban tárolt zavaknak fix hozúágú kódjuk van; az x S zó kódját c(x) jelöli. Gyakorlatban a kódok hoza -5 bit. az özenyomni kívánt zöveget S-beli zavak egymáutánjára bontjuk a zavakat a zótárbeli kódokkal helyetteítjük Az eredeti zöveg olvaáakor egyidőben épül, bővül az S zótár ninc optimalizálá, de a gyakorlatban jól működik A zótár egyik zokáo tárolái módja a zófa adatzerkezet. Ha az olvaá orán egy x S zót találunk, aminek a következő Y betűvel való folytatáa már ninc S-ben, akkor c(x)-et kiírjuk a kódolt zövegbe. Az xy zót felvezük az S zótárba. A zó c(xy ) kódja a legkiebb még eddig az S-ben nem zereplő kódérték lez. Ezután az Y betűvel kezdődően folytatjuk a bemeneti zöveg olvaáát. ALGORITMUSELMÉLET 7. ELŐADÁS Legyen z egy zó típuú változó, K egy betű típuú változó. A z változó értéke kezdetben az özenyomni zánt állomány elő betűje. Végig teljeül, hogy z S. (0) Olvauk a bemenő állomány következő betűjét K-ba. () Ha az előző olvaái kíérlet ikertelen volt (vége a bemenetnek), akkor írjuk ki c(z)-t, é álljunk meg. () Ha a zk zó i S-ben van, akkor z zk, é menjünk viza (0)-ra. () Különben (azaz ha zk S) írjuk ki c(z)-t, tegyük a zk zót S-be. Legyen z K, majd menjünk viza (0)-ra. A c(x) kódok rögzített hozúágúak. Ha például ez a hozúág bit, akkor az S zótárba özeen 09 zó kerülhet. = Ha a zótár betelt, nem bővítünk tovább, úgy folytatjuk. ALGORITMUSELMÉLET 7. ELŐADÁS 5 Példa LZW-re Legyen Σ=a, b, c} é c(a) =, c(b) =, c(c) =. ababcbababaaaaaaa 50 0000 000 00 000 000 000 0000 00 00 0000 Szótár a b c ab ba 5 abc cb 7 bab baba 9 aa 0 aaa aaaa ALGORITMUSELMÉLET 7. ELŐADÁS Dekódolá Elvégezhető puztán az egybetű zavak kódjainak, valamint a kódok képzéi zabályának imeretében, nem kell tárolni S-et. Pl. Ha a kódolt zöveg: 50é tudjuk, hogy c(a) =, c(b) =, c(c) = = Ez elő két jel betű kódja = ab ab nem volt a kezdeti S-ben, de az eleje igen; = a kódoló algoritmu ezt c(ab) =értékkel S-be tette = abab = ba volt a következő zó, ami S-be került = c(ba) =5... Haitttartunk 50 ababcba a b c ab ba 5 abc cb 7 Java animáció: LZW-kódolá Laczay Bálint féle GIF animáció a -a kódú zó ba alakú, = következő betű bizto b c(bab) = ababcbabab ALGORITMUSELMÉLET 7. ELŐADÁS 7 Gráfalgoritmuok ALGORITMUSELMÉLET 7. ELŐADÁS Adjacencia-mátrix ALGORITMUSELMÉLET 7. ELŐADÁS 9 Súlyozott adjacencia-mátrix irányított gráfok: G =(V, E) irányított él, irányított út, irányított kör élúlyok: c(e) lehetnek negatívak i Definíció. A G =(V, E) gráf adjacencia-mátrixa (vagy zomzédoági mátrixa) a következő av elemeivel indexelt n-zer n-e mátrix: 0 ha (i, j) E, A[i, j] = ha (i, j) E. Irányítatlan gráfok eetén a zomzédoági mátrix zimmetriku lez (azaz A[i, j] =A[j, i] teljeül minden i, j cúcpárra). Ha költégek i vannak = 0 ha i = j, C[i, j] = c(i, j) ha i j é (i, j) éle G-nek, különben. A B C 9 D 0 F 9 I 9 7 E 5 G H K 7 J L 5 v v v 5 v v 5 0 0 0 0 0 0 0 A = 0 0 0 0 0 0 0 0 0 0 0 5 v v v 5 v 5 0 5 0 C = 0 0 5 0 v Hátránya = a mérete (n tömbelem) teljeen független az élek zámától.

ALGORITMUSELMÉLET 7. ELŐADÁS 0 Éllitá megadá G =(V, E) gráf minden cúcához egy lita tartozik. Az i V cúc litájában tároljuk az i-ből kimenő éleket, é ha kell, ezek úlyát i. Az i litáján egy élnek a lita egy eleme (cellája) felel meg. i j c(i,j) n -ből kimenő élek cellái egy tipiku cella Az (i, j) élnek megfelelő cella tartalmazza a j orzámot, a c(i, j) úlyt (ha van), egy mutatót a következő cellára, é eetleg még egyet az előzőre i. Tárigény: n + e cella, Irányítatlan gráfoknál: n +e cella ALGORITMUSELMÉLET 7. ELŐADÁS A legrövidebb utak problémája Legyen adott egy G =(V, E) irányított gráf a c(f), f E élúlyokkal. Feladat. Mekkora a legrövidebb út egy adott pontból egy máik adott pontba? Feladat. Mekkora a legrövidebb út egy adott pontból az öze többibe? Feladat. Mekkora a legrövidebb út bármely két pont között? A G gráf egy u-t v-vel özekötő (nem feltétlenül egyzerű) u v irányított útjának a hoza az úton zereplő élek úlyainak özege. Legrövidebb u v út = egy olyan u v út, melynek a hoza minimáli a G-beli u v utak között. u é v cúcok (G-beli) d(u, v) távolága: 0, hau = v;, ha ninc u v út egyébként pedig a legrövidebb u v út hoza. Vigyázat, itt u é v nem felcerélhető: ha az egyik cúc valamilyen távol van a máiktól, akkor nem bizto, hogy a máik i ugyanolyan távol van az egyiktől! ALGORITMUSELMÉLET 7. ELŐADÁS Dijktra módzere Feladat. A legrövidebb utak problémája (egy forrából): Adott egy G =(V, E) irányított gráf, a c : E R + nemnegatív értékű úlyfüggvény, é egy V cúc (a forrá). Határozzuk meg minden v V -re a d(, v) távolágot. D[ ] = Egy a G cúcaival indexelt tömb az eljárá orán addig megimert legrövidebb v utak hoza Felő közelítée a kereett d(, v) távolágnak A közelítét lépéről lépére finomítjuk, végül d(, v)-t érjük el. ALGORITMUSELMÉLET 7. ELŐADÁS Tegyük fel, hogy a G gráf az alábbi alakú C adjacencia-mátrixával adott: 0 ha v = w, C[v, w] = c(v, w) ha v w é (v, w) éle G-nek, különben. Kezdetben D[v] :=C[, v] minden v V cúcra. Válazuk ki ezután az cúc zomzédai közül a hozzá legközelebbit, vagyi egy olyan x V \} cúcot, melyre D[x] minimáli Bizto, hogy az egyetlen (, x) élből álló út egy legrövidebb x út, (az élúlyok nemnegatívak!). A KÉSZ halmaz azokat a cúcokat tartalmazza, amelyeknek -től való távolágát már tudjuk. = x-et betehetjük ( mellé) a KÉSZ halmazba. ALGORITMUSELMÉLET 7. ELŐADÁS Ezek után módoítuk a többi cúc D[w] értékét, ha az eddig imertnél rövidebb úton el lehet érni oda x-en kereztül, azaz ha D[x] +C[x, w] <D[w]. x C[x, w] Újra válazunk ki a v V \ KÉSZ cúcok közül egy olyat, amelyre D[v] minimáli. Ezen cúc D[ ]-értéke már az -től való távolágát tartalmazza. Majd megint a D[ ]-értékeket módoítjuk, é így tovább, míg minden cúc be nem kerül a KÉSZ halmazba. w ALGORITMUSELMÉLET 7. ELŐADÁS 5 Dijktra algoritmua adjacencia-mátrixzal () KÉSZ := } for minden v V cúcra do D[v] :=C[, v] ( a d(, v) távolág elő közelítée ) () for i := to n do begin Válazunk olyan x V \ KÉSZ cúcot, melyre D[x] minimáli. Tegyük x-et a KÉSZ-be. () for minden w V \ KÉSZ cúcra do D[w] :=mind[w], D[x] +C[x, w]} ( d(, w) új közelítée ) end Definíció. különlege út: egy z irányított út különlege, ha a z végpontot kivéve minden pontja a KÉSZ halmazban van. A különlege úttal elérhető pontok éppen a KÉSZ-ből egyetlen éllel elérhető pontok. ALGORITMUSELMÉLET 7. ELŐADÁS Tétel. A () ciklu minden iteráció lépée után érvényeek a következők: (a) KÉSZ pontjaira D[v] a legrövidebb v utak hoza. (b) Ha v KÉSZ, akkor van olyan d(, v) hozúágú (má zóval legrövidebb) v út i, amelynek minden pontja a KÉSZ halmazban van. (c) Külő (vagyi w V \ KÉSZ) pontokra D[w] a legrövidebb különlege w utak hoza. Bizonyítá: (a) Indukcióval () előtt Tegyük fel, hogy igaz a j-edik iteráció után. Belátjuk, hogy igaz a j +-edik iteráció után i. Tegyük fel, hogy az algoritmu a j +. iteráció lépében az x cúcot válaztja a KÉSZ-be. ALGORITMUSELMÉLET 7. ELŐADÁS 7 y x Indirekt: mi van, ha D[x] nem a d(, x) távolágot jelöli, azaz van ennél rövidebb x út? Ezen út eleje" különlege = D[y] d(x, ) <D[x] (b) Elég x-re = KÉSZ korábbi pontjaira az indukció feltevéből Láttuk, hogy d(, x) =D[x], ez egy különlege x út hoza volt a j +. iteráció előtt (itt a (c)-re vonatkozó indukció feltevét haználtuk) annak végeztével az út minden pontja KÉSZ-beli lez. ALGORITMUSELMÉLET 7. ELŐADÁS x (c) A j +. iteráció előtt D[w] = min d(, v) +C[v, w]}. v KÉSZ\x} Utána D[w] = min d(, v) +C[v, w]}. v KÉSZ = Elég megnézni, hogy D[w] vagy d(, x) +C[x, w] nagyobb Lépézám: () ciklu O(n), ez lefut n -zer = O(n ) w

. eladá Algoritmuelmélet. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Márciu. ALGORITMUSELMÉLET. ELŐADÁS Dijktra animációk Java animáció: Dijktra-algoritmu, máik, harmadik ALGORITMUSELMÉLET. ELŐADÁS Dijktra algoritmua éllitával Ha kevé él van = gráfot éllitával tároljuk. V \KÉSZ cúcait kupacba rendezve tartjuk a D[ ]érték zerint. Kupacépíté O(n) költég, () cikluban minimumkereét O(log n) költégű MINTÖR A D[ ]értékek újrazámoláát é a kupac-tulajdonág helyreállítáát cak a válaztott cúc zomzédaira kell elvégezni. Minden cúcot pontoan egyzer válaztunk ki, é a zomzédok zámának özege e. = Özidőigény O((n + e)logn). Java animáció: Dijktra-algoritmu Sűrű gráfokra = d-kupac. = O(n + nd log d n + e log d n) Ha n,5 e n é legyen d = e/n = d n = log d n. = O(n+nd log d n+e log d n)=o(n+nd+e) =O(n+n e/n+e) =O(e). ALGORITMUSELMÉLET. ELŐADÁS A legrövidebb utak nyomon-követée Minden pontra tárolunk é karbantartunk egy P [x] cúcot i, ami megadja egy az eddig imert hozzá vezető legrövidebb úton az utoló előtti cúcot. Kezdetben P [v] := minden v V -re. = () ciklu belejében, ha egy külő w cúc D[w] értékét megváltoztatjuk, akkor P [w] :=x. Lépézám: O(n ) ALGORITMUSELMÉLET. ELŐADÁS A Bellman Ford-módzer Feladat. Egy pontból induló legrövidebb utak (hozának) meghatározáára, ha bizonyo élúlyok negatívak. De feltezük, hogy G nem tartalmaz negatív özhozúágú irányított kört. Ha van negatív özhozúágú irányított kör, akkor a legrövidebb út. Legyen a G =(V, E) úlyozott élű irányított gráf a C adjacencia-mátrixával adott az i, j helyzetű elem a c(i, j) élúly, ha i j éle G-nek, a többi elem pedig ). Legyen V =,,...,n} é = = -ből induló utakat kereük Dijktra irányítatlan gráfokra i működik. ALGORITMUSELMÉLET. ELŐADÁS 5 Módzer = egy T [ : n, : n] táblázat orról orra haladó kitöltée. ( ) T [i, j] = a legrövidebb olyan j irányított utak hoza, melyek legfeljebb i élből állnak. = T [n,j] a legrövidebb j utak hoz A T [,j] or kitöltée = T [,j]=c[,j] Tegyük fel ezután, hogy az i-edik ort már kitöltöttük = T [i, ],T[i, ],...,T[i, n] értékekre ( ) igaz. = ( ) T [i +,j]:=mint [i, j], mint [i, k] +C[k, j]}} k j ALGORITMUSELMÉLET. ELŐADÁS Lépézám: Egy érték ( ) zerinti zámítáa n özeadá é ugyanennyi özehaonlítá (minimumkereé n elem közül) = O(n ) műveletet Java animáció: Bellman-Ford algoritmu ALGORITMUSELMÉLET. ELŐADÁS 7 Floyd módzere Feladat. Miként lehet egy irányított gráfban az öze pontpár távolágát meghatározni? 0 élúlyok = ha a Dijktra-algoritmut minden cúcra mint forrára lefuttatjuk = no(n )=O(n ) Van olyan, ami nem laabb é működik negatív élúlyokra i, ha ninc negatív özúlyú kör. Feladat. Adott egy G =(V, E) irányított gráf, é egy c : E R úlyfüggvény úgy, hogy a gráfban ninc negatív özúlyú irányított kör. Határozzuk meg az öze v, w V rendezett pontpárra a d(v, w) távolágot. = Ugyani egy legfeljebb i +élből álló π = j út kétféle lehet: (a) Az útnak keveebb, mint i +éle van. Ekkor ennek a hoza zerepel T [i, j]-ben. (b) Az út éppen i +élből áll. Legyen l a π út utoló előtti pontja. Ekkor a π út l zakaza i élből áll, é minimáli hozúágú a legfeljebb i élű l utak között = π hoza T [i, l] +C[l, j].

ALGORITMUSELMÉLET. ELŐADÁS A G gráf a C adjacencia-mátrixával adott. Egy zintén n n-e F mátrixot fogunk haználni a zámítához. Kezdetben F [i, j] :=C[i, j]. = ciklu = k-adik lefutáa után F [i, j] azon i j utak legrövidebbjeinek a hozát tartalmazza, amelyek közbülő pontjai k-nál nem nagyobb orzámúak Az új F k[i, j] értékeket kizámíthatjuk ha imerjük F k [i, j]-t i, j-re Egy legrövidebb i j út, melyen a közbülő pontok orzáma legfeljebb k, vagy tartalmazza a k cúcot vagy nem. igen = F [i, j] :=F [i, k] + F [k, j] nem = F k[i, j] =F k [i, j] k i j ALGORITMUSELMÉLET. ELŐADÁS 9 FLOYD algoritmua () for i := to n do for j := to n do F [i, j] :=C[i, j] () for k := to n do for i := to n do for j := to n do F [i, j] :=minf [i, j],f[i, k] +F [k, j]} Tétel. F [i, j] a ()-beli iteráció k-adik menete után azon legrövidebb i j utak hozát tartalmazza, amelyek belő cúcai,,...,kközül valók. k = n = F [i, j] =d(i, j) Lépézám: n-zer megyünk végig a táblázaton, minden helyen O() lépé = O(n ) Java animáció: Floyd algoritmu ALGORITMUSELMÉLET. ELŐADÁS 0 A legrövidebb utak nyomon-követée Menet közben karbantartunk egy n n-ep tömböt. Kezdetben P [i, j] :=0. Ha egy F [i, j] értéket megváltoztatunk, mert találtunk egy k-n átmenő rövidebb utat, akkor P [i, j] :=k. = Végül P [i, j] egy legrövidebb i j út középő" cúcát fogja tartalmazni. i j út özeállítáa rekurzív = procedure legrövidebb út(i, j:cúc); var k:cúc; begin k := P [i, j]; if k =0then return; legrövidebb út(i, k); kiír(k); legrövidebb út(k, j) end; ALGORITMUSELMÉLET. ELŐADÁS Tranzitív lezárá ALGORITMUSELMÉLET. ELŐADÁS Warhall algoritmu ALGORITMUSELMÉLET. ELŐADÁS Alkalmazá Floyd módzerére Bemenet: G =(V, E) irányított gráf. Cak arra vagyunk kívánciak, hogy mely pontok között vezet irányított út. Floyd = ha a végén F [i, j], akkor van út, különben ninc. Kicit egyzerűbb korábbi algoritmu: S. Warhall Definíció. [tranzitív lezárt] Legyen G =(V, E) egy irányított gráf, A az adjacencia-mátrixa. Legyen továbbá T a következő n n-e mátrix: ha i-ből j elérhető irányított úttal; T [i, j] = 0 különben. Ekkor a T mátrixot illetve az általa meghatározott gráfot az A mátrix illetve az általa meghatározott G gráf tranzitív lezártjának hívjuk. Feladat. Adott a (Boole-mátrixként értelmezett) A adjacencia-mátrixával a G =(V, E) irányított gráf. Adjuk meg a G tranzitív lezártját. () cikluban a kezdőértékek beállítáa helyett ha i = j vagy A[i, j] =, T [i, j] := 0 különben. A () cikluban F értékeinek változtatáa helyett (ugyanazt megfogalmazva logikai műveletekkel) (+) T [i, j] :=T [i, j] (T [i, k] T [k, j]). Bizonyítá ugyanúgy. Lépézám: O(n ) A úlyozott élű G irányított gráf v cúcára legyen e(v) =maxd(w, v) : w V }. A v cúc centruma G-nek, ha e(v) minimáli az öze v V között. Feladat. Kereük meg a G gráf centrumát. Algoritmu centrum kereéére: () Előzör Floyd módzerével kizámítjuk a G-beli pontpárok közötti távolágokat. = O(n ) művelet () Az előző lépében kapott F mátrix minden ozlopában meghatározzuk a maximáli értéket ( = e(v)). = n-zer kereünk maximumot n elem közül = özeen O(n ). () Végül megkereük az n darab e(v) érték minimumát. = O(n). ALGORITMUSELMÉLET. ELŐADÁS Mélyégi bejárá Gráf bejárá = minden pontot felorolunk, bejárunk Mélyégi bejárá (depth-firt-earch, DFS), Széleégi bejárá (breadth-firt-earch, BFS) Pl. lámpagyújtogató algoritmu Mélyégi kereé Mohó menetelé, addig megyünk előre, amíg tudunk, cak aztán fordulunk viza. Java animáció: Mélyégi kereé G =(V, E) egy irányított gráf, ahol V =,...,n}. L[v] a v cúc éllitája ( v n). bejárva[ : n] logikai vektor = jártunk-e már ott ALGORITMUSELMÉLET. ELŐADÁS 5 Mélyégi kereé algoritmua procedure bejár ( elvégzi a G irányított gráf mélyégi bejáráát ) begin for v := to n do bejárva[v] :=hami; for v := to n do if bejárva[v] =hami then mb(v) end procedure mb (v: cúc) var w: cúc; begin () bejárva[v] :=igaz; ( meggyújtjuk a lámpát ) for minden L[v]-beli w cúcra do () if bejárva[w] =hami then mb(w) ( megyünk a következő még ötét lámpához ) end Lépézám: O(n + e)mélyégi zámok é befejezéi zámok ALGORITMUSELMÉLET. ELŐADÁS Definíció. [mélyégi zámozá] A G irányított gráf cúcainak egy mélyégi zámozáa a gráf v cúcához azt a orzámot rendeli, mely megadja, hogy az mb eljárá () orában a cúcok közül hányadikként állítottuk bejárva[v] értékét igaz-ra. A v cúc mélyégi zámát mzám[v] jelöli. Definíció. [befejezéi zámozá] A G irányított gráf cúcainak egy befejezéi zámozáa a gráf v cúcához azt a orzámot rendeli, mely megadja, hogy a cúcok közül hányadikként ért véget az mb(v) hívá. A v cúc befejezéi zámát bzám[v] jelöli. Előző algoritmu ki módoítáal:

ALGORITMUSELMÉLET. ELŐADÁS 7 procedure begin mz := 0; bz := 0; for v := to n do bejárva[v] :=hami; mzám[v] :=0; bzám[v] :=0; for v := to n do if bejárva[v] =hami then mb(v) end procedure mb (v: cúc) var w: cúc; begin () bejárva[v] := igaz; mz := mz + ; mzám[v] := mz; for minden L[v]-beli w cúcra do () if bejárva[w] =hami then mb(w); bz := bz + ; bzám[v] := bz; end Java animáció: Mélyégi é befejezéi zámok ALGORITMUSELMÉLET. ELŐADÁS Mélyégi fezítő erdő Definíció. [faél] A G =(V, E) irányított gráf v w éle faél (az adott mélyégi bejárára vonatkozóan), ha megvizgáláakor a () orban a (bejárva[w] =hami) feltétel teljeül. Jelölje T azt a gráfot, amelynek cúchalmaza V, élei pedig a faélek. = ez erdő Definíció. [mélyégi fezítő erdő, fezítőfa] Az előbb meghatározott T gráfot a G gráf egy mélyégi fezítő erdejének nevezzük. Ha T cak egy komponenből áll, akkor mélyégi fezítőfáról bezélünk. Definíció. [élek oztályozáa] Tekintük a G irányított gráf egy mélyégi bejáráát é a kapott T mélyégi fezítő erdőt. (Ezen bejárá zerint) G egy x y éle faél, ha x y éle T -nek; előreél, ha x y nem faél, y lezármazottja x-nek T -ben, é x y; vizaél, ha x lezármazottja y-nak T -ben (a hurokél i ilyen); kereztél, ha x é y nem lezármazottai egymának. ALGORITMUSELMÉLET. ELŐADÁS 9 5 0 7 9 faél előreél vizaél kereztél ilyen ninc faél, előre él: kiebb mélyégi zámúból nagyobb mélyégi zámúba mutat vizaél, kereztél: nagyobb mélyégi zámúból kiebb mélyégi zámúba mutat vizaél: kiebb befejezéi zámúból nagyobb befejezéi zámúba mutat ALGORITMUSELMÉLET. ELŐADÁS 0 x y egy ha az él vizgálatakor - faél mzám[y] =0 - vizaél mzám[y] mzám[x] é bzám[y] =0 -előreél mzám[y] > mzám[x] - kereztél mzám[y] < mzám[x] é bzám[y] > 0. Tétel. A G irányított gráf mélyégi bejáráa beleértve a mélyégi, a befejezéi zámozát é az élek oztályozáát i O(n + e) lépében megtehető. 9. eladá Algoritmuelmélet 9. előadá Katona Gyula Y. Budapeti Műzaki é Gazdaágtudományi Egyetem Számítátudományi Tz. I. B. 7/b kikat@c.bme.hu 00 Márciu. ALGORITMUSELMÉLET 9. ELŐADÁS Mélyégi fezítőerdő Legyen T a G =(V, E) irányított gráf egy fezítő erdeje. Legyen x V egy tetzőlege cúc, é jelölje T x a fezítő erdő x-gyökerű rézfájának a cúchalmazát. Legyen S x = y V van olyan G-beli x y irányított út, amelyen a cúcok mélyégi záma legalább mzám[x] Tétel. Tetzőlege x V cúc eetén érvénye a T x = S x egyenlőég. }. ALGORITMUSELMÉLET 9. ELŐADÁS Tétel. Tetzőlege x V cúc eetén érvénye a T x = S x egyenlőég. Bizonyítá: T x éppen azokból a pontokból áll, amelyek x-ből faélek mentén elérhetők. = faélekre mindig nő a mélyégi zám = T x S x Fordított irány indirekt: tegyük fel indirekt, hogy létezik egy y S x \ T x Legyen x y egy az S x meghatározáában zereplő irányított út, feltehetjük, hogy az út utoló előtti v pontja T x-ben van. Az y S x feltétel zerint mzám[y] >mzám[x] = y T x miatt azt jelenti, hogy y-t valamikor a T x pontjai után látogatjuk meg = (v, y) faél vagy előre él = y T x = S x T x Következmény. Tegyük fel, hogy a G =(V, E) gráf x cúcából minden pont elérhető irányított úton. Tegyük fel továbbá, hogy a G mélyégi bejáráát x-zel kezdjük. Ekkor a mélyégi fezítő erdő egyetlen fából áll. ALGORITMUSELMÉLET 9. ELŐADÁS Irányított körmente gráfok Definíció. Egy G irányított gráf DAG, ha nem tartalmaz irányított kört. Directed Acyclic Graph Alkalmazáai például: Teendők ütemezée = PERT Várakozái gráfok = adatbáziok Fonto, hogy egy irányított gráfról el tudjuk dönteni, tartalmaz-e irányított kört. Bizonyítá: mzám[x] = = S x = V = T x = V

ALGORITMUSELMÉLET 9. ELŐADÁS 7 9 faél előreél vizaél kereztél DAG Ha a gráf egy mélyégi bejáráa orán találunk vizaélet akkor a gráf nyilván tartalmaz irányított kört, azaz nem DAG. Tétel. Legyen G = (V, E) egy irányított gráf. Ha G egy DAG, akkor egyetlen mélyégi bejáráa orán inc vizaél. Fordítva: ha G-nek van olyan mélyégi bejáráa, amelyre nézve ninc vizaél, akkor G egy DAG. 5 0 Bizonyítá: = = tegyük fel, hogy G nem DAG = van benne irányított kör = vegyük ennek a legkiebb mélyégi zámú v cúcát, a kör előző pontja legyen u = mzám[v] < mzám[u] = viza- vagy kereztél de u elérhető v-ből irányított úton ; (rézfa lemma) = u a v lezármazottja = vizaél ALGORITMUSELMÉLET 9. ELŐADÁS 5 DAG topologiku rendezée Definíció. Legyen G =(V, E) ( V = n) egy irányított gráf. G egy topologiku rendezée a cúcoknak egy olyan v,...,v n orrendje, melyben x y E eetén x előbb van, mint y (azaz ha x = v i,y = v j, akkor i<j). Tétel. Egy irányított gráfnak akkor é cak akkor van topologiku rendezée, ha DAG. Bizonyítá: : Ha G nem DAG, akkor nem lehet topologiku rendezée, mert egy irányított kör cúcainak nyilván ninc megfelelő orrendje. : G-ben van olyan cúc, amibe nem fut be él (forrá) Indukció pontzámra = hagyjunk el egy forrát, ez legyen az elő pont = a többit az indukció miatt rendezhető w,...,w n = x, w,...,w n ALGORITMUSELMÉLET 9. ELŐADÁS Topologiku rendezé mélyégi kereéel Tétel. Végezzük el a G DAG egy mélyégi bejáráát é írjuk ki G cúcait a befejezéi zámaik zerint növekvő w,...,w n orrendben. A w n,w n,...,w orrend a G DAG egy topologiku rendezée. Bizonyítá: Azt kell belátnunk, hogy ha w i w j éle G-nek, akkor i>j. Ha volna olyan w i w j, amire j = bzám[w j] > bzám[w i]=i, akkor az cak vizaél lehetne. Lépézám: O(n + e) ALGORITMUSELMÉLET 9. ELŐADÁS 7 Legrövidebb utak DAG-ban Legrövidebb utak egy forrából: Bellman-Ford = O(n ) Ha ninc negatív élúly: Dijktra: = O(n ) Vegyünk egy topologiku rendezét: x,x,...,x n Feltehetjük, hogy = x = d(, x i)= min d(, xj) +c(xj,xi)}, (x j,x i) E Ezt orban elvégezzük minden i-re. Lépézám: O(n + e) x i... ALGORITMUSELMÉLET 9. ELŐADÁS Leghozabb utak DAG-ban Leghozabb út = egyzerű út Általában nehéz, nem imert rá gyor algoritmu. DAG-ban van: Tétel. Ha G egy éllitával adott úlyozott élű DAG, akkor az egy forrából induló legrövidebb é leghozabb utak meghatározáának feladatai O(n + e) lépében megoldhatók. Bizonyítá: DAG-ban minden út cak előre megy = l(, x i)= max l(, xj) +c(xj,xi)}. (x j,x i) E ahol l(, x i) a leghozabb x i út hoza Alkalmazá: PERT ALGORITMUSELMÉLET 9. ELŐADÁS 9 Erően özefüggő (erő) komponenek Definíció. Egy G =(V, E) irányított gráf erően özefüggő, ha bármely u, v V pontpárra létezik u v irányított út. Definíció. Legyen G =(V, E) egy irányított gráf. Bevezetünk egy relációt V -n: u, v V -re legyen u v, hag-ben léteznek u v é v u irányított utak. Ez ekvivalenciareláció = Definíció. A reláció ekvivalenciaoztályait a G erően özefüggő (erő) komponeneinek nevezzük. ALGORITMUSELMÉLET 9. ELŐADÁS 0 Tétel. Egy irányított gráf két erő komponene között az élek cak egy irányba mehetnek. Bizonyítá: Ha menne él a C C é C C -be i, akkor C é C ugyanabban az erő komponenben volna. C C C C C Definíció. Legyen G =(V, E) irányított gráf. G redukált gráfja egy irányított gráf, melynek pontjai a G erő komponenei; a C,C komponenek között akkor van C C él, ha G-ben a C komponen valamely pontjából vezet él a C komponenbe. A redukált gráf mindig DAG lez. = C C C k C irányított kör a redukált gráfban azt jelentené, hogy C C C k a G ugyanazon erő komponenében van. C ALGORITMUSELMÉLET 9. ELŐADÁS Erően özefüggő komponenek meghatározáa () Mélyégi bejáráal végigmegyünk G-n, közben minden pontnak orzámot adunk: a befejezéi zámát () Elkézítjük a G ford gráfot, melyet úgy kapunk G-ből, hogy minden él irányítáát megfordítjuk. Pontoabban: G ford := (V, E ), ahol u v E akkor é cak akkor, ha v u E. () Bejárjuk a G ford gráfot mélyégi bejáráal, a legnagyobb orzámú cúccal kezdve (az ()-beli befejezéi zámozá zerint). Új gyökérpont válaztáakor mindig a legnagyobb orzámú cúcot vezük a maradékból. ALGORITMUSELMÉLET 9. ELŐADÁS Tétel. A () pontban kapott fák leznek G erő komponenei, azaz G-ben x y pontoan akkor igaz, ha x é y egy fában vannak. Bizonyítá: : Azt kell belátni, hogy egy erő komponen pontjai egy fába kerülnek Legyen K egy erő komponen, é legyen x a K legkiebb mélyégi zámú pontja. = K S x = rézfa-lemma v : Tegyük fel, hogy x é y egy fában vannak a () pont zerinti mélyégi bejárá után. Azt kell belátnunk, hogy ekkor x y a G gráfban, azaz x é y egymából irányított úton elérhetők. G ford Legyen a v cúc a gyökere annak a fának, mely y x-et é y-t i tartalmazza. = G ford gráfban van v x irányított út, = G x gráfban van egy L irányított út x v-be. Legyen x az L-nek az a pontja, amelynek az elő bejárá zerinti mélyégi záma a legkiebb. rézfa-lemma = L-nek az x v darabjában levő cúcok az () bejáránál x lezármazottjai leznek.