Graf (struktura podataka)

U računarstvu je graf vrsta podatkovne strukture kojom se implementira matematički koncept grafa.

Graf sa 6 čvorova i 7 rubova

Graf se uglavnom sastoji od konačnog (moguće i promjenjivog) skupa uređenih parova koji se nazivaju rubovi ili lukovi (eng. edge), ili od entiteta koji se zovu čvorovi. Kao i u matematici, rub je definiran polaznom i krajnjom točkom, pa kažemo da "pokazuje" ili "ide" od x do y. Čvorovi mogu biti dio strukture grafa ili mogu biti vanjski entiteti predstavljeni pomoću cjelobrojnih indeksa ili referenci.

Operacije uredi

Osnovne operacije koje omogućava graf G uključuju

  • adjacent(G, x,y): provjerava postoji li rub od x do y.
  • neighbors(G, x): izlistava sve čvorove y za koje postoji rub od x do y.
  • add(G, x,y): dodaje rub od x do y, ako ne postoji
  • delete(G, x,y): briše rub od x do y, ako postoji

Strukture koje povezuju vrijednosti za rubove su:

  • get_value(G, x,y): vraća vrijednost vezana za rub (x,y).
  • set_value(G, x,y,v): postavlja vrijednost vezanu za rub (x,y) u v.

Reprezentacije uredi

Dvije su glavne strukture za reprezentaciju grafova koje se koriste u praksi.

Prva se naziva lista susjedstava (en:adjacency list) i implementira se kao niz s jednom vezanom listom za svaki izvorni čvor, a sadrži destinacijske čvorove rubova koji izlaze iz svakog čvora. Drugi je dvodimenzionalna Booleova matrica susjedstava, koja pokazuje postoji li rub između svakog pojedinog para čvorova. Liste susjedstava su bolji izbor za rijetke (sparse) grafove, dok su za guste grafove (en:dense graphs) bolji izbor matrice susjedstava.

Za grafove koji pokazuju neku pravilnost u položaju rubova, simbolički su grafovi također dobar izbor.