Matematikai Algoritmusok és Felfedezések I.

10. Előadás: Gráfok és algoritmusok

2021 április 12.

Gráf adatstruktúra

Több lehetőség is van, mindnek megvannak az előnyei és hátrányai.

Első lehetőség: élek listája

Egy listában tároljuk a gráf éleit.

Második lehetőség: szomszédsági lista

Minden csúcshoz felírjuk a szomszédait.

Harmadik lehetőség: szomszédsági mátrix

Mikor melyiket válasszuk?

Mint mindig a helyzettől függ, mindegyiknek van előnye is és hátránya is.

interpreted

Szomszédsági mátrix

Szomszédsági lista

Gráf algoritmusok

Szélességi bejárás

Mélységi bejárás

Negyedik lehetőség: valami, amit már megírtak, NetworkX

Több modul van, ami kifejezetten a gráfok kezelésére készült, ebből nézünk meg most egyet.

NetworkX a háttérben szomszédsági listákkal reprezentálja a gráfot:

"The graph internal data structures are based on an adjacency list representation and implemented using Python dictionary datastructures. The graph adjacency structure is implemented as a Python dictionary of dictionaries; the outer dictionary is keyed by nodes to values that are themselves dictionaries keyed by neighboring node to the edge attributes associated with that edge. This “dict-of-dicts” structure allows fast addition, deletion, and lookup of nodes and neighbors in large graphs. The underlying datastructure is accessed directly by methods (the programming interface “API”) in the class definitions. All functions, on the other hand, manipulate graph-like objects solely via those API methods and not by acting directly on the datastructure. This design allows for possible replacement of the ‘dicts-of-dicts’-based datastructure with an alternative datastructure that implements the same methods."

Négy gráf adatszerkezet:

Attribútumok

Bármilyen gráfhoz, élhez és csúcshoz tudunk attribútumokat rendelni. Ez sokszor hasznos, például, amikor súlyozott gráfokkal dolgozunk.

Adatok elérése, iterálás

Beépített algoritmusok NetworkXben

Teljes lista: Itt

Rajzolás

Ötödik lehetőség: gráf algoritmusok gráfok nélkül

Sokszor nem éri meg külön felépíteni egy gráfot, végrehajthatjuk az algoritmust magán az adatokon. Példaképpen most készítünk egy labirintust mélységi bejárás segítségével.