Algoritmusok bonyolultsága

Hasonló dokumentumok
Gráfelméleti feladatok. c f

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráfalgoritmusok ismétlés ősz

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Algoritmusok bonyolultsága

Diszkrét matematika 2. estis képzés

A számítástudomány alapjai

graf 2007/11/20 16:16 page 1 #1 BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR MATEMATIKAI ÉS INFORMATIKAI KAR Kása Zoltán Gráfalgoritmusok

Assignment problem Hozzárendelési feladat (Szállítási feladat speciális esete)

angolul: greedy algorithms, románul: algoritmi greedy

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Diszkrét matematika 2.C szakirány

Adatszerkezetek 2. Dr. Iványi Péter

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2. estis képzés

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Gráfok. Programozás II. előadás. Szénási Sándor.

Diszkrét matematika 2. estis képzés

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

Diszkrét matematika 2.C szakirány

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

Algoritmuselmélet 18. előadás

Diszkrét matematika 2. estis képzés

HAMILTON ÚT: minden csúcson PONTOSAN egyszer áthaladó út

Diszkrét matematika 1. estis képzés

HAMILTON KÖR: minden csúcson PONTOSAN egyszer áthaladó kör. Forrás: (

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Számítógép hálózatok, osztott rendszerek 2009

Diszkrét matematika 2.

Feladatok, amelyek gráfokkal oldhatók meg 1) A königsbergi hidak problémája (Euler-féle probléma) a

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

2. Visszalépéses keresés

Adatszerkezetek 7a. Dr. IványiPéter

Dinamikus programozás vagy Oszd meg, és uralkodj!

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Diszkrét matematika II. gyakorlat

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

EGYSZERŰ, NEM IRÁNYÍTOTT (IRÁNYÍTATLAN) GRÁF

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

Diszkrét matematika 2.C szakirány

Programozási segédlet

Algoritmuselmélet 11. előadás

Programozási módszertan. Mohó algoritmusok

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Tuesday, March 6, 12. Hasító táblázatok

Diszkrét matematika 2.C szakirány

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Gráfelmélet II. Gráfok végigjárása

Totális Unimodularitás és LP dualitás. Tapolcai János

Algoritmuselmélet 7. előadás

Bonyolultságelmélet. Monday 26 th September, 2016, 18:50

Függvények növekedési korlátainak jellemzése

Dijkstra algoritmusa

Bonyolultságelmélet. Thursday 1 st December, 2016, 22:21

Gráfelméleti alapfogalmak

2. Visszalépéses stratégia

1/ gyakorlat. Lineáris Programozási feladatok megoldása szimplex módszerrel. Pécsi Tudományegyetem PTI

A félév során előkerülő témakörök

Diszkrét matematika 2.C szakirány

A gráffogalom fejlődése

HÁLÓZAT Maximális folyam, minimális vágás

Diszkrét matematika 1. estis képzés

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Algoritmuselmélet 1. előadás

III. Gráfok. 1. Irányítatlan gráfok:

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Gráfelméleti feladatok programozóknak

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Gráf-algoritmusok Legrövidebb utak

22. GRÁFOK ÁBRÁZOLÁSA

Intelligens Rendszerek Elmélete IRE 4/32/1

Hálózatszámítási modellek

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Gauss-Jordan módszer Legkisebb négyzetek módszere, egyenes LNM, polinom LNM, függvény. Lineáris algebra numerikus módszerei

Mesterséges Intelligencia I. (I602, IB602)

Algoritmusok bonyolultsága

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Lineáris algebra gyakorlat

1. zárthelyi,

Algoritmuselmélet 1. előadás

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Speciális algoritmusok és adatstruktúrák ősz

Diszkrét Matematika MSc hallgatók számára 7. Előadás Párosítási tételek Előadó: Hajnal Péter Jegyzetelő: Kovácsházi Anna

Diszkrét matematika 2. estis képzés

Hálózati folyamok. Tétel: A maximális folyam értéke megegyezik a minimális vágás értékével.

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Diszkrét matematika 2.

Javító és majdnem javító utak

Adott: VPN topológia tervezés. Költségmodell: fix szakaszköltség VPN végpontok

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Átírás:

Algoritmusok bonyolultsága 5. előadás http://www.ms.sapientia.ro/~kasa/komplex.htm 1 / 27

Gazdaságos faváz Kruskal-algoritmus Joseph Kruskal (1928 2010) Legyen V = {v 1, v 2,..., v n }, E = {e 1, e 2,..., e m } és G = (V, E, W) egy súlyozott egyszerű gráf úgy, hogy W(e 1 ) W(e 2 ) W(e m ). KRUSKAL(E) 1. for j=1,2,..., n 2. do h j := j 3. i := 1 4. while h elemei különbözőek 5. do if (e i végpontjai v k, v l ) és (h k h l ) 6. then kiír e i 7. for j:=1, 2,..., n 8. do if h j = h l 9. then h j := h k 10. i:=i+1 2 / 27

A Kruskal-algoritmus elemzése Legrosszabb esetben Az élek rendezése: Θ(m log m). While ciklus mθ(n 2 ). Lehet javítani: 4. sor: while i m, 7 9. sor: láncolt lista: Θ(1) (konstans idő) Ekkor ez m, tehát az algoritmus Θ(m log m) legrosszabb esetben. 3 / 27

Gazdaságos faváz Prim-algoritmus Robert Clay Prim (1921 ) Legyen G = (V, E, W) egy súlyozott egyszerű gráf. Az algoritmus kezdőcsúcsként az x-et használja. PRIM(G, x) 1. A := {x} 2 B := V \ A 3. while A V 4. do legyen {a, b} E, a A, b B a legkisebb súlyú él az összes A és B közötti él közül 5. kiír {a, b} 6. A := A {b} 7. B := B \ {b} 4 / 27

A Prim-algoritmus elemzése Legrosszabb esetben Ez a változat így Θ(n 3 ). De a 4. lépésben nem kell az összes élt megvizsgálni, elég A-ból csak a legutolsót, amely átkerült. Így (n 1) + (n 2) +... 2 = Θ(n 2 ). 5 / 27

Dijkstra algoritmusa Edsger W. Dijkstra (1930 2002) Legrövidebb út keresése, pozitív súlyok esetében DIJKSTRA(G, u) 1. S := {u}, T := V \ S, l(u) := 0 2. for minden v V, v u 3. do l(v) := 4. x := u 5. while T 6. do for minden v N ki (x) T 7. do if l(v) > l(x) + W(x, v) 8. then l(v) := l(x) + W(x, v) 9. p(v) := x 10. Legyen x T : l(x) = min y T 11. S := S {x}, T := T \ {x} 12. return l, p 6 / 27

A Dijkstra-algoritmus elemzése Legrosszabb esetben: Θ(n 2 ). Ha "minden csúcsból minden csúcsba" számítjuk, akkor Θ(n 3 ). Az egyik leggyorsabb algoritmus legrövidebb út keresésére. 7 / 27

Floyd Warshall-algoritmus Robert W. Floyd (1936 2001), Stephen Warshall (1935 2006) D 0 := (d (0) ij ) i,j=1,n ahol d (0) ij = W(v i, v j ) ha {v i, v j } E 0 i = j ha {v i, v j } E, i j Kezdetben p ij := i ha d ij és i j; más esetekben p ij := 0. FLOYD_WARSHALL(D 0 ) 1. D := D 0 2. for k := 1 to n 3. do for i := 1 to n 4. do for j := 1 to n 5. do if d ij > d ik + d kj 6. then d ij := d ik + d kj 7. p ij := p kj 8. return D, p 8 / 27

Egy v i v j utat (az v i csúcsból az v j csúcsba) a következő algoritmussal határozzuk meg: 1. k := n 2. u k := j 3. while u k i 4. do u k 1 := p iuk 5. k := k 1 A keresett út: v uk, v uk+1,..., v un. Az algoritmus elemzése A három egymásba ágyazott ciklus miatt, a bonyolultság Θ(n 3 ), minden esetben. 9 / 27

Példa v 1 2 v 3 5 1 1 3 4 v 1 v 4 8 3 2 v 5 A gráf szomszédsági mátrixa és a megfelelő P mátrix kezdeti értéke: 0 1 3 8 0 1 1 0 1 0 1 5 0 0 2 0 2 D 0 = 0 1 P 0 = 0 0 0 3 0 0 2 0 0 0 0 4 4 0 0 0 5 0 0 10 / 27

v 1 2 v 3 5 1 1 3 4 v 1 v 4 8 3 2 v 5 Az algoritmus eredménye a D és P mátrixok: D = 0 1 2 3 5 0 1 2 4 0 1 3 6 0 2 4 5 0 P = 0 1 2 3 4 0 0 2 3 4 0 0 0 3 4 0 0 5 0 4 0 0 5 3 0 Keressük a v 1 v 4 utat: u 5 = 4, u 4 = 3, u 3 = 2, u 2 = 1. Az út: v 1, v 2, v 3, v 4. 11 / 27

Legrövidebb utak algoritmusainak összehasonlítása algoritmus bonyolultság bonyolultság minden csúcsból minden csúcsba Moore Θ(n 2 ) Θ(n 3 ) Dijkstra Θ(n 2 ) Θ(n 3 ) Ford Θ(n 3 ) Θ(n 4 ) Bellman Kalaba Θ(n 3 ) Θ(n 4 ) Floyd Warshall Θ(n 3 ) Θ(n 3 ) 12 / 27

Zárt Euler-vonal Fleury-algoritmus (1883) FLEURY(G, u) 1. válasszunk ki egy u-hoz illeszkedő e élt, amelyiknek másik végpontja v 2. i := 1 3. w i := e 4. töröljük ki a gráfból az e élt 5. u := v 6. while van még él a gráfban 7. do válasszunk ki egy u-hoz illeszkedő e élt, amelyiknek másik végpontja v, és amelyik csak akkor lehet híd, ha nincs más lehetőség 8. i := i + 1 9. w i := e 10. töröljük ki a gráfból az e élt 11. u := v 12. return w k, k = 1, 2,..., i 13 / 27

Fleury-algoritmus elemzése A 6. sort m-szer (élek száma) végezzük el. Híd ellenőrzése (pl. szélességi bejárással, komponens keresésével): Θ(m). Így az algoritmus legrosszabb esetben Θ(m 2 ). Ez, jobb hídkereső algoritmussal, valamelyest javítható. 14 / 27

Zárt Euler-vonal Hierholzer-algoritmus (1873) HIERHOLZER 0 (G, w) // w a kezdő csúcs 0. u := w 1. válasszunk ki egy u-hoz illeszkedő e élt, amelyiknek másik végpontja v 2. i := 1 3. e i := e 4. töröljük ki a gráfból az e élt 5. u := v 6. while v w 7. do válasszunk ki egy u-hoz illeszkedő e élt, amelyiknek másik végpontja v 8. i := i + 1; e i := e 9. töröljük ki a gráfból az e élt 10. u := v 11. return e k, k = 1, 2,..., i 15 / 27

Hierholzer-algoritmus és elemzése HIERHOLZER-algoritmus: Alkalmazzuk a HIERHOLZER 0 algoritmust egy tetszőleges csúcsból kiindulva. Ha a kapott zárt vonal nem tartalmazza a gráf minden élét, kiválasztunk a vonalon egy olyan csúcsot, amelyhez illeszkedik egy, a vonalon kívüli él is. Innen elindulva ezen az élen, újra alkalmazzuk a HIERHOLZER 0 algoritmust. Mindaddig folytatjuk, amíg az összes élt nem felhasználjuk. Elemzés: Ha megőrizzük (pl. listában) a vonalon kívüli, de hozzá illeszkedő éleket, akkor az algoritmus bonyolultsága Θ(m), azaz lineáris az élek számához viszonyítva. 16 / 27

Hamilton-kör A Hamilton-kör keresése NP-teljes feladat. (Wikipédia) nincs szükséges és elegséges feltétel Dirac Gábor tétele: Egyszerű gráfban, ha minden csúcs foka n/2, akkor létezik Hamilton-út. Ore tétele: Egyszerű gráfban, ha minden nem szomszédos csúcspárra ϕ(x) + ϕ(y) n, akkor létezik Hamilton-út. nincs polinomiális algoritmus 17 / 27

Folyamfeladatok A Ford Fulkerson-algoritmus elemzése Tekintsük a következő példát: 2 [100] [100] 1 [1] 4 [100] [100] 3 18 / 27

A Ford Fulkerson-algoritmust alkalmazva a megoldást két lépésben megkaphatjuk. Nulla értékű folyammal indulva, az 1, 2, 4 úton növelni lehet a folyamot 100-zal, aztán hasonlóképpen az 1, 3, 4 úton is. Tehát a maximális folyam értéke 200. 2 [100] [100] 100 100 1 4 0 [1] 100 [100] 100 [100] 3 19 / 27

De az algoritmus ugyanúgy választhatja először az 1, 3, 2, 4 utat, amelyen a folyam 1-gyel növelhető. Ezután, a 1, 2, 3, 4 láncot használva, a folyamot szintén 1-gyel lehet növelni. 2 [100] 0 [100] 1 2 [100] 1 [100] 1 1 [1] 1 4 1 [1] 0 4 [100] 1 [100] 0 [100] 1 3 [100] 1 3 2 [100] 1 [100] 2 2 [100] 2 [100] 2 1 [1] 1 4 1 [1] 0 4 [100] 2 [100] 1 3 [100] 2 [100] 2 3 20 / 27

Így folytatva, az eredményt 200 lépésben kapjuk meg. Az algoritmus bonyolultsága ily módon függ a folyam értékétől. Ha m = E(G), a hálózat éleinek száma, v(f ) pedig a folyam értéke, akkor az algoritmus bonyolultsága O(mv(f )) vagy O(n 2 v(f )), ha n a hálózat csúcsainak a száma (pszeudopolinomiális algoritmus). Az algoritmus javítható, ha minden alkalommal a lehetséges láncok közül a legrövidebbet (legkevesebb élből állót) választjuk. Ha a javítóláncot szélességi kereséssel határozzuk meg, akkor mindig a legrövidebbet kapjuk. A Ford Fulkerson-algoritmusnak ezt a változatát Edmonds Karp-algoritmusnak nevezzük. Ennek a bonyolultsága O(nm 2 ) vagy O(n 5 ). Cormen Leiserson Rivest Stein: Új algoritmusok 21 / 27

A magyar módszer Minimális értékű maximális párosítás Súlyozott teljes páros gráfokat vizsgálunk. A párosítás értéke = a párosítás élei súlyának az összege A magyar módszer teljes, súlyozott gráf esetében: K n,n 1. Minden sorból és oszlopból kivonjuk a legkisebb értéket, hogy legyen legalább egy 0 mindegyikben. 2. Keressünk maximális számú független 0-t. 3. Amíg a független 0-k száma nem n, végezzük el: 3.1. Minimális lefedés, módosítás. 3.2. Keressünk maximális számú független 0-t. Az algoritmus bonyolultsága: O(n 3 ). 22 / 27

Példa. 6 2 5 8 6 7 1 6 6 3 4 5 5 4 3 4 Kivonunk 2-t az első sorból, 1-et a másodikból, 3-at a harmadik és negyedik sorból. 4 0 3 6 5 6 0 5 3 0 1 2 2 1 0 1 23 / 27

Kivonunk 2-t az első sorból, 1-et a 4. oszlopból: 2 0 3 5 3 6 0 4 1 0 1 1 0 1 0 0 Csillaggal megjelölünk max. számú független 0-t. Három (zöld) vonallal (két függőleges, egy vízszintes) lefedjük a 0-kat. 2 0 3 5 3 6 0 4 1 0 1 1 0 1 0 0 24 / 27

Az elemek módosítása (Kivonunk 1-et a legkisebb fedetlen elem az összes fedetlen elemből, nem módosítjuk az egy vonallal lefedett elemeket, hozzáadunk 1-et a kétszer lefedett elemekhez.) Csillaggal megjelölünk max. számú független 0-t. 1 0 3 4 2 6 0 3 0 0 1 0 0 2 1 0 A max. párosítás értéke: 2 + 1 + 6 + 4 = 13. 25 / 27