Reprezentácia v pamäti

Na uchovávanie grafov v pamäti počítača sa väčšinou používa niektorý z nasledujúcich prístupov:

  • Matica susednosti: Matica susednosti je dvojrozmerné pole, v ktorom je na pozícii [x][y] hodnota 1, ak v grafe máme hranu x−y, resp. hodnota 0, ak takú hranu nemáme. Pre orientovaný graf: na pozícii [x][y] je 1, ak v grafe máme hranu vedúcu z x do y, 0 inak. Pri ohodnotených grafoch môžeme použiť maticu vzdialeností, v ktorej je buď zapísané, že hrana neexistuje (napr. je tam opäť 0), alebo je tam rovno zapísaná jej dĺžka. Výhodou matice susednosti je jej jednoduchosť a prehľadnosť. Avšak pokiaľ máme riedky graf (graf s málo hranami), bude nám matica susednosti zaberať zbytočne veľa pamäte. Ďalšou nevýhodou je, že aj ak má vrchol len troch susedov, musíme prejsť celý riadok matice, aby sme ich našli. Navyše v matici susednosti si nevieme zapamätať multigraf.

  • Zoznam susedov: Pre každý vrchol si budeme pamätať zoznam vrcholov, do ktorých z neho vedie hrana. Najjednoduchší spôsob implementácie je opäť v dvojrozmernom poli, pričom susedov vrcholu i si pamätáme v poli napr. na pozíciach [i][0][i][deg(i)-1] (kde deg(i) je stupeň vrcholu i). Keďže rôzne riadky poľa potrebujú mať rôznu dĺžku, je dobré použiť polia s premenlivou veľkosťou, teda napríklad vector<vector<int> > v C++, alebo ArrayList<ArrayList<Integer> > v Jave. Pre orientovaný graf si v každom vrchole si pamätáme len hrany, ktoré z neho vychádzajú. Pre ohodnotený graf si pre každú hranu musíme pamätať dve čísla: koncový vrchol a dĺžku.

  • Objektovo orientovný prístup: V objektovo orientovaných jazykoch (ako napríklad Java) si môžeme pre každý vrchol pamätať jeden objekt, ktorý má referencie (smerníky) na svojich susedov. Potom nám stačí pamätať si iba zoznam všetkých vrcholov. V princípe nedostaneme nič iné ako zoznam susedov, môže to ale viesť k čitateľnejšiemu kódu, ak chceme s grafom robiť zložité operácie a napríklad si v každom vrchole pamätať nejakú pomocnú informáciu.