Strukture podataka i algoritmi

Vodič za strukturu podataka grafikona

Vodič za strukturu podataka grafikona
U računarstvu je graf skup čvorova povezanih vezama. Glavna razlika između stabla i grafa je u tome što stablo ima jedan korijenski čvor, dok graf ima više korijenskih čvorova. Prije dolaska ovdje trebali biste već imati osnovno znanje o strukturi podataka stabla, jer će se tamošnji pojmovi ovdje koristiti s malo ili nimalo objašnjenja. Ako nemate to znanje, pročitajte tutorial pod nazivom Vodič za strukturu podataka o drvetu za početnike na poveznici https: // linuxhint.com / tree_data_structure_tutorial_beginners /.

Čvor u grafu naziva se vrh (množina - vrhovi). Ponekad se još naziva čvorom; može se nazvati i točkom. Poveznica u grafu naziva se rub. Ponekad se još uvijek naziva poveznicom; može se nazvati i linijom.

Grafikon s mnogim značajkama

Ova slika prikazuje grafikon s mnogim značajkama:

Kružnice (diskovi) su vrhovi. Bilo koja ravna crta ili zakrivljena crta ili petlja je rub.

Značajke grafikona

Vrh

Vrh je objekt. To može biti kuća; to može biti osoba; to može biti apstraktna imenica; to može biti bilo koji objekt kojeg se možete sjetiti.

Rub

Rub je veza (relacija) između dva vrha; veza može biti apstraktna.

Petlja

Petlja je rub koji povezuje vrh sa sobom.

Arrow Edge

Razmotrimo dvoje ljudi: Ivana i Petra. Ako Ivan posudi Petru 100 dolara i ako su Ivan i Petar vrhovi, tada će posuđeni rub biti usmjeren prema Petru. Ako oba partnera zaborave da Peter duguje Johnu, a Peter posudi Ivanu 100 dolara, na drugom kraju istog ruba vrh strelice usmjerit će prema Johnu. Kad bi Peter posudio Ivanu samo 75 dolara, a ne 100 dolara, tada bi drugi rub povezao Petra s Ivanom. Ovaj drugi rub imat će vrh strelice usmjeren prema Ivanu. U drugom su slučaju dva ruba, s po jednim vrhom strelice, usmjerenim u suprotnim smjerovima.

Vrh na koji usmjerava rub je tjeme glave za taj rub. Vrh s kojeg odlazi rub, je repni vrh.

Incident

Rub povezuje dva vrha. Za rub se kaže da pada na bilo koji vrh. Rub ne mora imati vrh strijele. Ta su dva vrha poznata kao krajnje točke ruba. Moguće je imati graf gdje vrh ne pripada nijednom rubu, ali to neće biti razmatrano u ovom vodiču.

Neusmjereni grafikon

Rub može biti strelica, ili ne može. Grafikon na kojem nijedan rub nije strelica neusmjereni je graf. Rub može biti predstavljen ravnom crtom ili krivuljom ili petljom.

Usmjereni grafikon

Grafikon gdje je svaki rub strelica (smjer) usmjereni je graf. Rub strelice može se predstaviti ravnom crtom s vrhom strelice ili krivuljom s vrhom strelice ili petljom s vrhom strelice.

Odsutnost smjera na rubu neusmjerenog grafa znači da je svaki rub neusmjerenog grafa dvosmjeran.

Stupanj vrha

Broj rubova koji su upadni na vrh je stupanj vrha. Petlja ima dvije incidence na vrhu, pa se petlja broji dva puta.

Redoslijed grafikona

Redoslijed grafa je broj vrhova u grafu.

Multigraf

Multigraf je graf, gdje za neke parove vrhova postoji više od jednog ruba. Neusmjereni multigraf je takav graf u kojem rubovi nemaju smjer (nisu strelice). Usmjereni multigraf je onaj gdje je svaki rub strelica, a za parove vrhova koji imaju više od jedne strelice, jedan vrh je rep tih strelica, a drugi vrh glava istih strelica. Sljedeći dijagram prikazuje neusmjereni multigraf:

Više od jednog ruba (tj.e. više bridova) za par vrhova nazivaju se i paralelnim bridovima.

Tobolac

Tobolac je multigraf koji omogućuje petlje (jednu ili više petlji). Neki multigrafi ne dopuštaju petlje.

Jednostavan grafikon

Jednostavan graf je graf na kojem niti jedan par vrhova nema više bridova. Petlje nisu dopuštene u jednostavnom grafikonu.

Prazan grafikon

Prazan graf je graf bez vrhova pa tako i bez rubova.

Mješoviti grafikon

Mješoviti graf je graf gdje su neki rubovi strelice, a drugi nisu; drugim riječima: neki rubovi imaju upute, a drugi nisu usmjereni.

Ponderirani grafikon

Moguće je imati graf u kojem je svakom rubu dodijeljen broj, poznat kao težina. Neki rubovi imaju isti broj, ali brojevi su uglavnom različiti. Takav se graf naziva ponderirani graf. Brojevi za određeni graf mogu predstavljati duljinu ili troškove (cijene) ili neku veličinu, ovisno o problemu.

Nepristojan i izvanravanjski

Rječnik, stepen i stepen primjenjivi su samo na usmjereni graf. Graf može i ne mora biti multigraf. Grafikon može imati ili nema petlje.

Broj vrhova strelica povezanih s vrhom je stepen tog vrha. Strijela s jednim vrhom strijele ima završetak glave i rep. Broj repova povezanih s vrhom izvan je stupnja tog vrha.

Napomena: Grafikon s više rubova za par vrhova, gdje su više bridova u suprotnim smjerovima, nije obrađeno u ovom vodiču.

Softverski prikaz grafa

Graf se može predstaviti u softveru onako kako je nacrtan na dijagramu. Graf se u softveru može prikazati i matematičkom matricom (dvodimenzionalni niz). Jedna od takvih matrica naziva se matrica susjedstva.

Matrica susjedstva

Matrica susjedstva je kvadratna matrica. Naslovi redaka su svi vrhovi napisani uzlaznim redoslijedom. Naslovi stupaca i dalje su isti vrhovi, napisani uzlaznim redoslijedom. Brojanje redaka ili stupaca matrice započinje od 1, a ne od nule kao kod nizova. Pri identificiranju elementa u matrici, broj retka zapisuje se prvo prije broja stupca.

Za neusmjereni graf, svaki unos (element) u matrici susjedstva je broj bridova koji povezuju dva odgovarajuća vrha. Petlju treba brojati dva puta. Za usmjereni graf svaki unos u matrici susjedstva je ili broj bridova koji napuštaju vrh reda i ulaze u odgovarajući vrh stupca ili je broj bridova koji napuštaju vrh stupa i ulaze u odgovarajući vrh reda. Izbor je na izboru programera. U ovoj situaciji (u oba slučaja), petlju i dalje treba brojati jednom.

Napomena: Grafikon je dijagram sam po sebi struktura podataka. Matrica susjedstva također je sama po sebi struktura podataka.

Neusmjereni grafikon i matrica susjedstva

Sljedeći dijagrami prikazuju neusmjereni graf i odgovarajuću matricu susjedstva:

Vodeća dijagonala matrice je dijagonala od gore lijevo dolje desno. Neusmjerena matrica simetrična je oko vodeće dijagonale. Unos matrice za redak A i stupac C je 1, što znači da postoji jedan rub koji povezuje vrh A i vrh C. Unos matrice za redak C i stupac B je 3, što znači da postoje 3 ruba koji povezuju vrh C i vrh B. Ostali unosi objašnjeni su na sličan način.

Zbroj unosa za red daje broj bridova (stupanj) za odgovarajući vrh. Zbroj unosa za redak A je 2, što znači da su 2 ruba povezana s vrhom A. Zbroj unosa za redak B je 6, što znači da je 6 bridova povezano s vrhom B. Ostali unosi objasnjeni su na sličan način.

Usmjereni grafikon i matrica susjedstva

Sljedeći dijagrami prikazuju usmjereni graf i odgovarajuću matricu susjedstva:

Matrica susjedstva za usmjereni graf nije nužno simetrična u odnosu na vodeću dijagonalu. Unos matrice za redak A i stupac C je 1, što znači da jedan rub prelazi iz vrha A u vrh C. Unos matrice za redak C i stupac B je 3, što znači da 3 ruba napuštaju od vrha C do vrha B. Ostali unosi objašnjeni su na sličan način.

Zbroj unosa za stupac daje indegre za vrh (stupac). Zbroj unosa u retku daje stupanj za vrh (redak). Zbroj unosa za stupac A je 1, što znači da je jedan rub usmjeren na vrh A. Zbroj unosa za redak B je 2, što znači da 2 ruba napuštaju vrh B. Ostali unosi objasnjeni su na sličan način.

Grafičke operacije

Struktura podataka, poput grafa, sastoji se od skupa vrijednosti podataka ili skupa objekata, plus odnos između objekata, plus operacije (funkcije) između objekata. Odnosi na grafikonu označeni su rubovima. Nakon toga, graf bi trebao imati najmanje sljedeće operacije:

susjedni (G, x, y)

G znači graf. Ova operacija provjerava povezuje li rub vrh x i vrh y. Vrijednost i položaj unosa u matrici ukazuju na povezanost ruba (i njegovu vrstu).

susjedi (G, x)

Ova operacija vraća popis svih vrhova koji su izravno povezani s vrhom x. Vrijednost i položaj unosa u matrici ukazuju na vezu ruba.

remove_vertex (G, x)

Ova operacija uklanja vrh x s grafa. Ako vrh nije imao rub, nema problema. Međutim, ako je vrh imao poveznice, tada bi trebalo ukloniti i poveznice (rubove). Vrijednost i položaj unosa u matrici ukazuju na prisutnost određenog vrha. Ako se vrh ukloni, matricu je potrebno prilagoditi.

add_vertex (G, x)

To dodaje vrh, x bez dodavanja bridova, ili zamjenjuje vrh koji je imao rubove, ali je uklonjen. Vrijednost i položaj unosa u matrici ukazuju na prisutnost određenog vrha. Ako se doda vrh, matrica se mora prilagoditi.

add_edge (G, x, y)

Ova operacija dodaje novi rub između vrha x i vrha y ako ruba nije bilo. Vrijednost i položaj unosa u matrici ukazuju na prisutnost određenog ruba. Ako se doda rub, matrica se mora prilagoditi.

remove_edge (G, x, y)

Ovom bi se operacijom uklonio rub između vrha x i vrha y da je tamo rub. Vrijednost i položaj unosa u matrici ukazuju na prisutnost određenog ruba. Ako se rub ukloni, matricu je potrebno prilagoditi.

get_vertex_value (G, x)

Ova operacija vraća vrijednost, v povezanu s vrhom, x. Da biste to postigli, potreban vam je power set podskupova za vršne oznake i njihove vrijednosti.

set_vertex_value (G, x, v)

Ova operacija daje novu vrijednost, v za vrijednost povezanu s vrhom, x. Da biste to postigli, potreban vam je power set podskupova za vršne oznake i njihove vrijednosti.

Neki grafovi pridružuju vrijednosti i svojim rubovima. Takvi grafikoni trebaju sljedeće dodatne operacije:

get_edge_value (G, x, y)

Ova operacija vraća vrijednost, v povezanu s rubom, (x, y). Da biste to postigli, potreban vam je skup podskupova snage za rubove i njihove vrijednosti.

set_edge_value (G, x, y, v)

Ova operacija daje novu vrijednost, v za vrijednost povezanu s rubom, (x, y). Da biste to postigli, potreban vam je skup podskupova snage za rubove i njihove vrijednosti.

Zaključak

Graf je skup vrhova povezanih bridovima. Grafikon može biti usmjeren ili usmjeren. Rubovi mogu biti neusmjereni ili usmjereni. Petlje mogu biti prisutne ili odsutne na grafikonu. Ono što biste trebali sljedeće naučiti je postavljanje, podešavanje snage i multiset povezani s grafikonima. Nakon toga trebali biste naučiti različite vrste grafova, kao što su orijentirani graf, redoviti graf, cjeloviti graf, bipartitni graf, turnirski graf, graf mreže protoka itd.

Chrys

O autoru

Krizanta Forcha

Otkrivač integracije matematike iz prvih načela i srodnih serija. Magistar tehničkog obrazovanja, specijalizirao se za elektroniku i računalni softver. Dipl. Elektronika. Također imam znanje i iskustvo na magistarskoj razini iz računarstva i telekomunikacija. Od 20 000 pisaca, bio sam 37. najbolji pisac u devarticlesu.com. Na tim poljima radim više od 10 godina.

Pogledajte sve postove
Top 5 karata za hvatanje igara
Svi smo vidjeli i voljeli streaming reprodukcije na YouTubeu. PewDiePie, Jakesepticye i Markiplier samo su neki od najboljih igrača koji su zaradili m...
Kako razviti igru ​​na Linuxu
Prije deset godina malo je Linux korisnika predviđalo da će njihov omiljeni operativni sustav jednog dana biti popularna platforma za igranje komercij...
Luke komercijalnih igara s otvorenim kodom
Besplatne igre s otvorenim kodom i više platformi mogu se koristiti za igranje starih, kao i nekih prilično nedavnih naslova igara. U ovom će se člank...