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

Gráfok ábrázolása teljesen láncoltan

Hasonló előadás


Az előadások a következő témára: "Gráfok ábrázolása teljesen láncoltan"— Előadás másolata:

1 Gráfok ábrázolása teljesen láncoltan
Készítette: Mihály Balázs Attila

2 Gráf ábrázolási módjai: - Mátrix (csúcsmátrix)
- Gyors elérhetőség - Ritka gráf esetén sok fölösleges adat - Optimális sűrű, telített gráfok tárolására - Éllista - Élek lassabban érhetőek el - Kevés fölösleges adadt - Optimális ritka gráfok tárolására - Teljesen láncolt - Csúcsok és élek lassan érhetőek el - Nincs fölösleges adat - Optimális sűrűn módosított gráfok tárolására

3 Élbeszúrás műveletigénye (a továbbiakban egyszerű, irányított gráfra)
Mátrixos ábrázolás esetén az aktuális mátrixelem módosítása. => Egy adattag módosítása O(1) műveletigénnyel Éllistás ábrázolás esetén az aktuális csúcshoz tartozó éllistába elem beszúrása. => Beszúrás rendezetlen listába O(1) műveletigénnyel Teljesen láncolt ábrázolás esetén meg kell keresni a csúcslistában az él kiindulópontját, és a hozzá tartozó éllistába beszúrni a végpontot. => Keresés listában és beszúrás listába O(n) műveletigénnyel

4 Éltörlés műveletigénye
Mátrixos ábrázolás esetén ugyanaz, mint beszúrásnál: az aktuális mátrixelem módosítása. => Egy adattag módosítása O(1) műveletigénnyel Éllistás ábrázolás esetén az aktuális csúcshoz tartozó éllistából elem törlése. => Keresés és törlés listából O(n) műveletigénnyel Teljesen láncolt ábrázolás esetén meg kell keresni a csúcslistában az él kiindulópontját, és a hozzá tartozó éllistából törölni a végpontot. => Keresés listában és törlés listából O(n) műveletigénnyel

5 Csúcsbeszúrás műveletigénye
Mátrixos ábrázolás esetén a beszúrandó csúcs mögül mindent alrébb kell tolni, azaz az egész mátrix megváltozik (esetleg a mátrix méretét is növelni kell). => egy üres sor és oszlop az új csúcsnak, a csúcs mögötti értékek alrébb csúsztatása, összesen O(n2) műveletigény (Meg lehet csinálni, hogy előre elég nagy mártixot veszünk föl, melyben az összes lehetséges csúcs helyét lefoglaljuk, de ez bizonyos esetekben fölöslegesen fogal helyet. Ekkor ez a művelet O(1) lépésből áll.) Éllistás ábrázolás esetén a csúcsok tömbjét kell bővíteni (esetleg a tömb méretét módosítani). => a csúcs mögötti elemek alrébb csúsztatása O(n) műveletigénnyel (Esetleg a csúcstömböt szintén fölvehetjük előre, ekkor ez is O(1) lépés) Teljesen láncolt ábrázolás esetén a csúcslistába kell szúrni egy elemet. => beszúrás listába O(1) műveletigénnyel

6 Csúcstörlés műveletigénye
Fontos, hogy a törlendő csúcsba vezető éleket is törölnünk kell a gráfból. Mátrixos ábrázolás esetén a törlendő csúcs mögül előrébb kell hozni a többi sort, oszopot. Az csúcsba vezető élek keresése és törlése a többi csúcsnál. => csúcs mögötti értékek előrébb csúsztatása, összesen O(n2) műveletigény (Élek keresése a többi csúcsnál és törlés: O(n) lépés) (A kevésbé helytakarékos esetben inaktiváljuk a csúcsot: O(1)) Éllistás ábrázolás esetén a csúcsok tömbjéből elem törlése (mögötte lévő elemek mozgatása), valamint élek keresése és törlése. => a csúcs mögötti elemek előrébb csúsztatása O(n) műveletigénnyel, minden csúcsnál él keresése (és törlése) O(n2) (Esetleg a csúcs inaktiválása O(1) lépés) Teljesen láncolt ábrázolás esetén törlés listából és az élek törlése => törlés listából O(n), élek keresése és törlése O(n2) műveletigénnyel

7 A műveletigények összefoglalva
Csúcsok, élek elérése A gráfon végzett algoritmusok alkalmazásánál fontos a gráf egy csúcsának, élének elérési műveletigénye.

8 A teljesen listás ábrázolásról részletesebben
Egy jó implementálási mód, ha a gráfot fejelemes listák listájaként ábrázoljuk. A fejelem tartalmaz egy csúcsot, a lista többi tagja pedig a fejelemben lévő csúcsból kiinduló élek végpontjait.

9 Példa teljesen láncolt ábrázolásra
Egy, a bal oldalon látható irányított gráfot a jobb oldali listaszerkezetben ábrázolhatjuk.

10 Csúcs beszúrása

11 Él beszúrása

12 Csúcs törlése

13 Él törlése

14 A gráfelemek elérésének műveletigénye
A listákban szereplő műveletigényeket javíthatjuk, ha minden lista helyett bináris keresőfát - mondjuk AVL fát - használunk. Ekkor az AVL fa műveletei alapján az eléréséhez már csak O(log2n) lépésre van szükség, a beszúrás és a törlés mind a csúcsok és élek esetén ezek szerint módosul. (A műveleteket könnyen leírhatjuk, ha az imént bemutatott listaműveleteket lecseréljük az AVL fa műveleteire)

15 Példa AVL fával ábrázolt gráfra

16 A csúcsokhoz tartozó éleket tartalmazó fák

17 A szakall.web.elte.hu/graf címről letölthetőek:
- a bemutató fóliái - forráskód (tesztprogrammal) listával ábrázolt gráfhoz (c++) - forráskód (tesztprogrammal) AVL fával ábrázolt gráfhoz (c++)


Letölteni ppt "Gráfok ábrázolása teljesen láncoltan"

Hasonló előadás


Google Hirdetések