Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.

Hasonló előadás


Az előadások a következő témára: "Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít."— Előadás másolata:

1 Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít Megvalósítás pl. láncolt listákkal HalmaztKészít(x):Képviselő egy olyan új halmazt hoz létre, amely egyetlen eleme x. X nem lehet eleme egyetlen más halmaznak sem Egyesít(x,y):Képviselő az x-et tartalmazó S x és az y-t tartalmazó S y halmazokat egyesíti HalmaztKeres(x):Képviselő visszaadja azon halmaz képviselőjének a mutatóját, amelynek x egy eleme

2 Mohó algoritmusok Optimalizációs problémák Globális  lokális optimalizálás A mohó stratégia csak helyi optimalizálást végez Bizonyos problémákra bebizonyíthatóan (globálisan is) optimális eredményt ad Más problémákra csak szuboptimális a mohó eredmény Példa: erőforrás lefoglalási probléma. Tfh adott egy S=(S 1,…,S n ) eseményhalmaz, amelyekhez egy k i kezdő és egy b i befejező időpont rendelhető. Két esemény kompatibilis, ha a kezdő vagy befejező pillanatukon kívül nincs átfedő időpillanat. Az optimálás célja: minél több (rövid) eseményt rendeljünk az erőforráshoz.

3 Az algoritmus lényege: 1. a versenyző eseményeket a befejező időpont szerint rendezzük 2.vesszük a legkorábban befejeződőt (a legrövidebbet) 3. ciklusban vesszük a befejeződött esemény után kezdődő (és a sorban a leghamarabb befejeződő) eseményt A mohó stratégiát a sorbaállítás és a leghamarabb befejeződő esemény kiválasztása jelenti. Ez esetben a mohó (lokálisan optimális) megoldás választása egyben globálisan is optimális megoldást ad.

4 Gráfalgoritmusok – Optimális feszítőfa Súlyozott gráfok: az élekhez hozzárendelt w:E  R függvény. Def: egy G irányítatlan gráf feszítőfája: egy olyan fa, amely az eredeti csomóponthalmazából, és az élek egy részhalmazából áll. Minimális: az élek minimális (súlyú) részhalmazából áll Mind a mélységi, mind a széltében keresés létrehoz egy feszítőfát (feszítő erdőt). Prim és Kruskal algoritmusa (mohó algoritmusok) Példa: a fa teljes súlya 37. a b h i c g d f e 9 10 1411 21 8 4 6 2 7 8 7 Vágat 4

5 Minimális feszítőfa növelése Alapötlet: valamelyik csúcspontból kiindulva élenként növelve. Nyilvántartjuk a minimális feszítőfa eddig felderített részét. Mohó stratégia: lépésenként egy „optimálisnak látszó” élt választunk ki. Azt az élt, amelyet a felderített fához hozzáveszünk, biztonságos élnek nevezzük, ha a fa még mindig optimális marad. Def: egy gráf egy vágata a csúcspontjainak két halmazba osztása. Léteznek a vágatot keresztező és kikerülő élek. Def: Egy vágatban könnyű élnek nevezzük a legkevesebb súlyú(ak)at.

6 Általános MinimálisFeszítőfaNövelő algoritmus pszeudokódja MinFFa FFa={} while FFa nem feszítőfa keresünk egy biztonságos (u,v) élt FFa-ra nézve FFa=FFa+{(u,v)} Return FFa Tétel: Ha G=(V,E) a w:E  R függvénnyel súlyozott gráf, és A olyan részhalmaza E-nek, ami egy minimális feszítőfa része is. Ha (u,v) egy könnyű él a FFa-t kikerülő vágatban, akkor az biztonságos is FFa-ra nézve Biz….. Nem bizonyítjuk be Vagyis: a mohó algoritmus egyben globálisan optimális is

7 Kruskal algoritmusa Az általános MinFFa algoritmuson alapul A már megtalált élek halmaza nem fa, hanem erdő Növekvő sorrendben vesszük a gráf éleit, úgy, hogy fa/erdő maradjon a b h i g d f e 9 10 1411 21 8 4 6 2 7 8 7 c 4

8 Kruskal algoritmusa MinFFaKruskal FFa={} for minden u  V-re do HalmaztKészít(u) Élek rendezése súly szerint növekvő sorrendben for minden (u,v)  E élre növekvő sorrendben do if HalmaztKeres(u)<>HalmaztKeres(v) then FFa=FFa+{(u,v)} Egyesít(u,v) return FFa Futási idő: elsősorban a diszjunkt halmaz megvalósítástól függ. Megfelelő megvalósítás esetén O(|E|*log(|E|))

9 Prim algoritmusa Egyetlen gyökérpontból indul ki, egyetlen fát épít Kezdetben a bejáratlan csúcsok  V, az induló csúcs súlya pedig 0 Minden lépésben a még bejáratlan legkönnyebb élt vesszük hozzá a halmazhoz. A bejáratlan csomópontokat prioritásos sorban tároljuk, amely a kulcs tulajdonság szerint van sorbaállítva (az odavezető él súlya) Ha egy csúcsot már elértünk, és az új irányból könnyebb élt találunk, akkor lecseréljük a kulcs értékét és a Szülő értéket Az eredmény a Szülő vektorban tárolt fa lesz

10 Prim algoritmusa a b h i g d f e 9 10 1411 21 8 4 6 2 7 8 7 c 4 Hatékonysága: az elsőbbségi sor hatékonyságán múlik - az első ciklus V-szer fut le - a második ciklus szintén V-szer fut le, a KiveszMin művelet időszükséglete O(logV) - a for ciklus össz időszükséglete O(E) - a kulcsot csökkent művelet időszükséglete O(logV) - össz. While*KiveszMin+For*KulcsotCsökkent, azaz O(VlogV+ElogV)=O((V+E)logV) Fibonacci-kupacok esetén javítható O(E+VlogV)-re…

11 MinFFAPrim(r) Bejáratlan=V for minden v  V-re do kulcs[v]=végtelen kulcs[r]=0 Szülő[r]=NIL while Bejáratlan<>{} do u=Bejáratlan.KiveszMin for minden v  u.Szomszéd-ra do if v  Bejáratlan and w(u,v)<=kulcs[v] then Szülő[v]=u kulcs[v]=w(u,v) return Szülő


Letölteni ppt "Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít."

Hasonló előadás


Google Hirdetések