1 / 17

Gráfok ábrázolása teljesen láncoltan Készítette: Mihály Balázs Attila (szakall@elte.hu)

Gráfok ábrázolása teljesen láncoltan Készítette: Mihály Balázs Attila (szakall@elte.hu). 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

Télécharger la présentation

Gráfok ábrázolása teljesen láncoltan Készítette: Mihály Balázs Attila (szakall@elte.hu)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gráfok ábrázolása teljesen láncoltan Készítette: Mihály Balázs Attila (szakall@elte.hu)

  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++)

More Related