Predstavljanje grafova BFS algoritam Grafovski algoritmi Mnogi računarski problemi definisani u terminima grafova; Graf G = (V, E); V neprazan skup čije elemente nazivamo čvorovi grafa; E V V skup čije elemente nazivamo grane grafa; Vreme neophodno za izvršenje graf algoritma obično zavisi od broja čvorova ( V ) grafa i broja grana grafa ( E ). Elementarni graf algoritmi predstavljanje i pretraživanje grafa; Algoritam pretraživanja može da otkrije puno o strukturi grafa. Predstavljanje grafa dva standardna načina: kolekcija listi susedstva matrica susedstva
Predstavljanje grafova BFS algoritam Lista susedstva Lista susedstva češći način za predstavljanje grafova; Dobar način za predstavljanje retkih grafova, E V 2. Matrica susedstva pogodna za guste grafove, E V 2 Reprezentacija od G = (V, E) listom susedstva niz Adj koji se sastoji od V listi od kojih svaka odgovara po jednom čvoru iz V. u V, Adj[u] = {v (u, v) E} skup svih suseda čvora u u G (može da sadrži i pokazivače na čvorove) Za usmereni graf G suma dužina svih listi susedstva je E ; Za neusmereni graf G suma dužina svih listi susedstva je 2 E ; U oba slučaja u memoriji je potrebno O(V + E) prostora.
Predstavljanje grafova BFS algoritam Lista susedstva (cont.) Lista susedstva može biti prilagodjena predstavljanju težinskih grafova; Težinski grafovi svakoj grani se pridružuje težina zadata funkcijom w : E R w težinska funkcija; (u, v) E, w(u, v) težina grane koju u listu susedstva reči u smeštamo sa čvorom v Nepovoljnost ovakvog predstavljanja ne postoji mogućnost brzog ispitivanja da li v Adj[u]. Ovo se prevazilazi predstavljanjem grafa matricom susedstva.
Predstavljanje grafova BFS algoritam Matrica susedstva Za predstavljanje grafa matricom susedstva pretpostavka da su čvorovi numerisani sa 1, 2,..., V proizvoljnim redom; A matrica susedstva dimenzije V V ; A = (a ij ) V i,j=1 a ij = Neophodna memorija O( V 2 ) { 1, (i, j) E 0, u protivnom Za neusmerene grafove A = A T ; Kod težinskih grafova težinu grane w(u, v) smestamo u vrstu u i kolonu v matrice susedstva Za nepostojeće grane NIL, 0 ili.
Predstavljanje grafova BFS algoritam BFS algoritam-pretraživanje grafa po širini - Jedan od najjednostavnijih algoritama za pretraživanje grafa (prototip za mnoge važne graf algoritme); Primer: Prajmov algoritam za nalaženje minimalnog razmakau stablu, Dijkstrov algoritam najkraćeg puta iz jednog izvora Za dati graf G = (V, E) i fiksirani izvorni čvor s, BFS se sistemski kreće niz grane grafa G da otkrije svaki čvor koji je dostižan iz s. Istovremeno algoritam računa distancu (najmanji broj grana) iz s u svaki dostižni čvor.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.) BFS algoritam proizvodi prvo-po-širini stablo iz s u v, koje odgovara najkraćem putu izmedju čvorova s i v. Algoritam radi i na usmerenim i na neusmerenim grafovima. Pretraživanje je dobilo ovakav naziv, jer ukazuje na granicu izmedju otkrivenih i neotkrivenih čvorova, uniformno po širini te granice. To znači da algoritam najpre otkriva sve čvorove koji su na distanci k od s, pre otkrivanja svih čvorova na distanci k + 1. Da bi davao informaciju o tome koji su čvorovi otkriveni, a koji nisu, algoritam ih boji belo, sivo ili crno. Tokom pretraživanja, čvor na koji se prvi put nailazi (koji je prvi put otkriven) je obojen belo.sivi i crni čvorovi su ranije otkriveni i granica medju njima utvrdjuje se ponašanjem u algoritmu.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.) Opis: Ako su (u, v) E i ako je čvor u crn, čor v je ili siv ili crn, što znači da su svi susedni čvorovi crnog čvora već otkriveni. Sivi čvorovi za susede mogu imati i bele čvorove. BFS algoritam pretraživanja konstruiše, takozvano, prvo po širini stablo inicijalizovano u izvornom čvoru s.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.) Kako algoritam radi? Kada otkrijemo beli čvor v u toku skeniranja liste susedstva već otkrivenog čvora u, čvor v i grana (u, v) dodaju se u stablo. Kaěmo da je u prethodnik, roditelj čvora v u stablu. Čvor se otkriva samo jedan put, pa svaki čvor može imati najviše jednog roditelja. Veze sa prethodnikom i sledbenikm u prvom po širini stablu definisane su u odnosu na koren s: ako je čvor u na putu od s do čvora v, onda je u prethodnik od v i v je sledbenik od u. BFS procedura podrazumeva da je ulazni graf G = (V, E) predstavljen listama susedstva.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.) Ova procedura čuva nekoliko dodatnih informacija za svaki čvor u grafu. Boja svakog čvora u smeštena je u promenljivoj u.color, prethodnik od u smešten je u promenljivoj u.π. Ako u nema prethodnika (u = s ili u nije otkriven), onda je u.π = NIL. Distanca od izvora s do čvora u smešta se u promenljivu u.d. Algoritam koristi FIFO kju Q da bi olakšao upravljanje sivim čvorovima.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.)
Predstavljanje grafova BFS algoritam BFS algoritam (cont.) Rezultat pretraživanja BFS algoritma može da zavisi od redosledakojim se posećuju susedi datog čvora, pa stablomože da varira, ali distanca koja se algoritmom računa ne.
Predstavljanje grafova BFS algoritam BFS algoritam (cont.)
Najkraći putevi Napomena: Pre nego što dokažemo različite osobine BFS pretraživanja, analiziraćemo njegovo prolazno vreme na ulaznom grafu G = (V, E). Posle inicijalizacije svaki je čvor smešten u kju najviše jednom. Operacije ENQUEUE i DEQUEUE uzimaju O(1) vremena, pa je kompletno vreme posvećeno kju operacijama O(V). Obzirom da selistasusedstva svakog čvora skenira samo kada se čvor ukloni iz kjua, svaka se lista susedstva skenira najviše jednom. Suma dužina svih listi je O(E), odakle je jasno da je prolazno vreme BFS algoritma O(V+E).
Najkraći putevi Najkraći putevi Definicija: Definisaćemo distancu najkraćeg puta δ(s, v) izmedju čvorova s i v kao minimalni broj grana na proizvoljnom putu iz s u v. Ako put iz s u v ne postoji stavićemo δ(s, v) =. Put dužine δ(s, v) iz s u v je najkraći put. Pokazaćemo da distanca koju računa BFS jeste upravo distanca najkraćeg puta. Lema 1: Neka je G = (V, E) usmeren ili neusmeren graf i s V proizvoljan čvor. Tada za granu (u, v) E važi δ(s, v) δ(s, u) + 1.
Najkraći putevi Najkraći putevi (cont.) Dokaz: Ako je čvor u dostižan iz s, dostižan je i iz v. U ovom slučaju najkraći put iz s u v ne može biti duži od najkraćeg puta iz s u u plus grana (u, v), pa u ovom slučaju nejednakost važi. Ako u nije dostižan iz s onda je δ(s, u) = i, u ovom slučaju, nejednakost važi. Napomena: Cilj nam je da pokažemo da je v.d = δ(s, v), zaproizvoljan čvor v V ulaznog grafa G.
Najkraći putevi Najkraći putevi (cont.) Lema 2: Neka je G = (V, E) usmeren ili neusmeren graf i pretpostavimo da BFS prolazi kroz G od izvornog čvora s V. Tada, za svaki čvor v V vrednost v.d koja se izračunava algoritmom ograničava odozgo δ(s, v), tj.v.d δ(s, v). Dokaz: Koristimo indukciju po broju ENQUEUE operacija.polazna induktivna pretpostavka je kada ses ukloni iz kjua. U ovom slučaju je s.d = 0 = δ(s, s) i v.d = δ(s, v), za svaki v V \ {s}. Pretpostavimo daje posle vadjenja čvora u iz kjua u.d δ(s, u).
Najkraći putevi Najkraći putevi (cont.) Da bi učinili induktivni korak, uočimo beli čvor v, koji je otkriven za vreme ispitiǎnja čvora u. Prema induktivnoj pretpostavci je u.d δ(s, u) i v.d = v.u + 1 δ(s, u) + 1 δ(s, v). Čvor v je umetnutu kju sada i nikad više, jer je samo sada obojen u sivo. Zato se vrednost v.d više ne menja i induktivna pretpostavka je očuvana. Lema 3: Pretpostavimo da za vreme izvršenja BFSa na grafu G = (V, E) kju Q sadrži čvorove v 1, v 2,... v r, gde je v 1 glava od Q, a v r rep. Tada je v r.d v 1.d + 1, v i.d v i+1.d, za i {1, 2,... r 1}.
Najkraći putevi Najkraći putevi (cont.) Dokaz: Izvodimo indukcijom po broju kju operacija. Inicijalno, kada kju sadrži samo s lema sigurnovaži. Moramo da pokažemo da lema važi posle ubacivanjai brisanja čvora iz kjua.ako je glava v 1 kjua uklonjena v 2 postaje nova glava. Prema induktivnoj pretpostavci je v 1.d v 2.d, a tada imamo i v r.d v 1.d + 1 v 2.d + 1, tako da lema važi i kadaje v 2 glava. Ubacivanje čvora zahteva bliže ispitivanje koda. Kada ubacimo čvor v u kju Q, on postaje v r+1. U to vreme većsmo iz kjua izbacili čvor u, čija je lista susedstva upravo počela da se skenira. Prema indukcijskoj pretpostavci, za novu glavu v 1 je u.d v 1.d.
Najkraći putevi Najkraći putevi (cont.) Tako dobijamo v r+1.d = v.d = u.d + 1 v 1.d + 1. Takodje važi v r.d u.d + 1 = v.d = v r+1.d. Posledica: Pretpostavimo da su za vreme izvršenja BFS algoritma na grafu G = (V, E) čvorovi v i i v j ubačeni u kju Q i da je v i ubačeno pre v j. Tada je v i.d v j.d, u vremenu kada je v j ubačeno.
Najkraći putevi Najkraći putevi (cont.) Teorema: Neka je G = (V, E) usmeren ili neusmeren graf i da se BFS izvršava od izvornog čvora s V. Tada BFS otkriva svaki čvor v dostižan iz s i odredjuje distancu v.d = δ(s, v). Štaviše, za svaki čvor v s dostižan iz s jedan od najkraćih puteva jeste najkraći put iz s u v.π iza koga je grana (v.π, v). Dokaz izvodimo kontrapozicijom. Pretpostavimo da postoji čvor čija distanca v.d u BFSu nije jednaka distanci najkraćeg puta i neka je v prvi čvor za koji je v.d > δ(s, v). Znači da v mora biti dostižan iz s, jer je, u protivnom, δ(s, v) = > v.d. Neka je u neposredni prethodnik od v.
Najkraći putevi Najkraći putevi (cont.) Tada je δ(s, v) = δ(s, u) + 1. Kako je δ(s, u) < δ(s, v) i kako je u pronadjen pre v važi u.d = δ(s, u), pa je v.d > δ(s, v) = δ(s, u) + 1 = u.d + 1. U ovom slučaju i vremenu čvor v može biti beo, siv ili crn. Pokazaćemo da svaki od ovih slučajeva dovodi do kontradikcije. Ako je v beo v.d = u.d + 1 što je nemoguće. Ako je v crn, znači da je već udaljen iz kjua, pa je v.d u.d, što je takodje kontradikcija. Ako je v siv, obojen je posle izbacivanja nekog čvora w koji je uklonjen iz kjua pre u. Dakle, v.d = w.d + 1 u.d + 1,
Najkraći putevi Najkraći putevi (cont.) pa nas i ovaj slučaj dovodi do kontradikcije. Prema tome, v.d = δ(s, v). Svi čvorovi dostižni iz s su otkriveni BFS algoritmom. Ako je v.π = u, to je v.d = u.d + 1. Tako je najkraći put iz s u v, najkraći put iz s u v.π plus put niz granu (v.π, v).
-Pretraživanje grafa po dubini Strategija DFS pretraživanja podrazumeva pretraživanje po dubini grafa. DfS pretraživanje otkriva grane koje izlaze iz čvora v, koji je najskorije otkriven. Kada se sve grane iz v otkriju, koristimo "backtrack" za pretraživanje grana koje napuštaju čvor iz koga je v otkriven. Ovaj proces se nastavlja sve dok ne otkrijemo sve čorove dostižne iz izvornog čvora. Ako ima još neotkrivenih čvorova, jedan od njih se koristi kao izvorni čvor i ispitivanje se ponavlja iz tog izvora. Postupaknastavljamo dok svi čvorovi nisu otkriveni.
Razlike u odnosu na BFS U ovom pretraživanju može da se formira nekoliko stabala jer pretraživanje može da se vrši iz nekoliko izvora, Prethodnik (praizvor) u ovom pretraživanju definiše se drugačije: G π = (V, E π ), gde je E π = {(v.π, v) v V, v.π NIL}, Podgraf prethodnika u DFS obrazuje depth-first forest koja se sastoji od nekoliko depth-first stabala. E π skup grana tih stabala.
(cont.) Kao i u BFS algoritmu, čvorovi se tokom pretraživanja boje, čime se identifikuje njihov status. Inicijalno je svaki čvor beo, posivi kada se otkrije i pocrni kada je završen (kada je lista susedstva kompletno ispitana). Ova tehnika garantuje da se svaki čvor završava u tačno jednom depth-first stablu. Pored formiranja depth-first šume, DFS takodje svakom čvoru pridružuje dva vremenska koraka: - Prvi, v.d koji snima kada je čvor v prvi put otkriven (obojen sivo) - Drugi, v.f koji pamti kada je lista susedstva za v završena (obojen crno)
(cont.) Ovi vremenski koraci se koriste u mnogim graf algoritmima. DFS beleži kada je čvor u otkriven u promenljivoj u.d i kada je čvor u završenu promenljivoj u.f. Ovi vremenski koraci su celi brojevi izmedju 1 i 2 V, jer postoji jedan dogadjaj otkrivanja i jedan završavanja za svaki od V čvorova. Za svaki čvor u je u.d < u.f i čvor je beo - pre u.d; siv - izmedju u.d i u.f; crn - posle u.f. Ulazni graf u DFS može biti usmeren ili neusmeren.
(cont.) Overviev
(cont.) Overviev
(cont.) Pri inicijalizaciji u DFS algoritmu uvodi se globalni brojač vremena time. Zatim se proverava svaki čvor i kada je nadjen algoritam prelazi na proceduru VISIT. Svaki put kada pozivamo ovu proceduru u postaje koren novog stabla u DF šumi. Procedure u DFS uzimaju O(V) vremena. Procedura VISIT poziva se tačno jednom za svaki čvor v V, jer se poziva samo za bele čvorove koji se odmah farbaju u sivo. U toku izvršenja DFS-VISIT(v) petlja se izvršava Adj[v] puta. Kako je Adj[v] = O(E), v V prolazno vreme procedure je O(E). Dakle, prolazno vreme za DFS je O(V+E).