Professional Documents
Culture Documents
10.1.1.25.1590 (1) Prevod
10.1.1.25.1590 (1) Prevod
Sažetak
1. Uvod
Predstavljamo razvoj novog linearnog algoritma za pronalaženje blokova (i vrhova i ivica) grafa. Tradicionalni
algoritam koristi stek da "iskoči" ivice bloka. Ovo traje O(#V + #E) vremena da se dobije skup ivica, a zatim dobijanje
skupa vrhova iz skupa ivica traje O(#V #I ) vremena, gde je #I broj blokova. Također se obično prikazuje u formi
programa i nakon toga se uspostavljaju svi operativni detalji i odgovarajuća svojstva. Ovo je prilično zbunjujuće i
neintuitivno. Ovdje koristimo moderne ideje za razvoj programa i dokaz. Osnovni princip je strukturirati algoritam
tako da odražava teoriju na kojoj se zasniva [GRI 88]. Algoritam smo izgradili na način odozgo prema dolje i uvijek
smo predstavljali svojstva na kojima je izvršeno sljedeće obnavljanje, prije nego što izvršimo obnavljanje.
Ovaj rad je organiziran na sljedeći način. Odjeljak 2 predstavlja naše oznake zajedno sa nekim osnovnim
teoretskim terminima i konvencijama. Odjeljak 3 daje opći pregled algoritma bez posebne reprezentacije. Poglavlje
4 predstavlja neka željena svojstva reprezentacije i obnavlja algoritam uzimajući ih u obzir. Odjeljak 5 pokazuje kako
promijeniti graf u onaj koji zadovoljava ova svojstva. Poglavlje 6 govori o izračunavanju nekih od povezanih funkcija.
Odjeljak 7 pronalazi skup vrhova za svaki blok, a dio 8 skup ivica. Odjeljak 9 daje detalje implementacije i analizira
vremensku složenost. Odjeljak 10 završava se raspravom.
2 Notacija
Boolean i, ili i ne predstavljaju ^, _ i : respektivno. Za Speciers/Quantiers slijedimo [DRO 89] (str. 64-69). Često
korišteni kvantieri su egzistencijalni kvantit 9, univerzalni kvantier 8, a speciers su brojeći specier #, union specier S ,
sumiranje
1
Machine Translated by Google
Machine Translated by Google
G Gfcg
(9 u; v : (u; v) 2 V : (u ^ v) ^ :(u ^ v))).
Za neusmjereni graf se kaže da je bikonektan i da nema sječenih vrhova. Dvopovezane
komponente (ili blokovi) su maksimalni bipovezani podgrafovi grafa G. Može se pokazati da je
graf dvopovezan i svaki par ivica leži na zajedničkom ciklusu [HAR 69].
Definirajte relaciju R na skupu rubova E od G na sljedeći
način e1Re2 , (e1 = e2) ^ cyc(e1 ; e2).
Svaki skup u particiji E induciran sa R daje blok od G [AHU 84].
Imajte na umu da je dovoljno da razvijemo algoritam za povezani graf pošto je svaki graf a
unija povezanih podgrafova.
Tem može pripadati više od jednog bloka dok ivica pripada tačno jednom. Ovo sugerira
rudimentarni algoritam bikonektivnosti koji koristi gornju činjenicu za izračunavanje skupova
vrhova i rubova svakog bloka u različitim stilovima.
Algoritam 3.1 sadrži operaciju u kojoj imamo izbor. Može postojati nekoliko mogućih rubova koji
predstavljaju blok. Sada deniramo prikaz grafa na kojem je već napravljen izbor.
Originalni graf G je bio neusmjeren. Sada usmjeravamo ivice, particioniramo skup rubova E = T
[ F i ponovo numeriramo vrhove. Usmjerene ivice, particija i prenumerirani vrhovi moraju zadovoljiti
sljedeća svojstva.
Kako se spoj gornja tri svojstva često koristi, bilježimo ga kao svojstvo 4.4.
Grafikon D = (V ; T ; F ) koji zadovoljava svojstva 4.1 i 4.2 naziva se grafik dlana. Rubovi u T
nazivaju se lukovi drveća, a oni u F nazivaju se listovi. Putanja razdvojenog lista je niz od nula ili više
ivica razdvojenog stabla (lukova stabla) praćenih tačno jednim listom.
Neke korisne funkcije grafa dlana su opisane u nastavku.
3
Machine Translated by Google
ch:v = S (u : u 2 V : (v; u) 2 T )
T
Od 4.3, odvajanjem slučajeva za nulu i za veće dužine u v ! w dobijamo
!
Teorema 4.1 Svaki blok B ima tačno jedan nezavisni vrh i takav da je (p(i); i) ivica tog bloka.
Dokaz:
Tvrdnja : Neka je c najmanji vrh bloka B. Dijete od c koji pripada bloku B je traženi nezavisni vrh i.
Dokaz: Ako je j 2 ch(p(i)) i j 6= i onda bilo koji put od i do j u neusmjerenom grafu mora proći
kroz p(i) (iz svojstava 4.1 i 4.2). Ne postoji ciklus koji sadrži i i j i stoga oni ne leže u jednom
bloku [HAR 69]. Stoga p(i) ima samo jedno dijete koje pripada bloku B.
QED (lema)
Ako je j(6= i) nezavisno i (p(j); j) je u bloku B, tada je prema gornjoj lemi p(j) potomak od i.
Dakle, p(j) i. Imamo i low(j) p(j). Dakle, (p(i); i) i (p(j); j) nemaju
4
Machine Translated by Google
1 10
9 6
2 3 7
4
5
(a) Grafikon G
1 10 9 (8) 3 4
(6)
(2) 3 3 7 (4)
7 (5)
(b) Blokovi G
1 10
9 6
2 3 7
4
5
I = { 2, 4, 5, 6, 8}; p = (-, 1, 2, 3, 4, 3, 6, 7, 7, 3)
(e) Na slici (b), za svaki blok, vrh od I koji se koristi za njegovo imenovanje je numerisan u zagradi.
5
Machine Translated by Google
Može se pokazati da se prvo pretraživanje po dubini može koristiti za efikasnu konstrukciju grafa
dlana. U ovom odeljku pokušavamo da sistematski razvijemo algoritam prve pretrage dubine na
osnovu karakterizacije palme. Budući da4.1,(Vprelazak
; T ) treba
mora
da bude
pokriti
usmjereno
skup vrhova,
stablo
imati
prema
dosljedan
svojstvu
način usmjeravanja ivica u odnosu na smjer prelaska i mora izbjegavati konstruiranje ciklusa sa
T ivicama. Jedna prirodna shema je označavanje posjećenih rubova i vrhova i usmjeravanje
rubova u smjeru kretanja, tako da se ciklusi mogu spriječiti izbjegavanjem ponovnih posjeta.
Svojstvo 4.2 implicira da ne bismo trebali dodavati list osim ako između krajnjih tačaka postoji
staza drveta. Ovo se može zadovoljiti nastavljanjem putovanja od posljednjeg posjećenog vrha
sve dok se ne naiđe na već posjećeni vrh, tako da putanja
T
prelaska novih vrhova obezbediće v ! u put potreban za gornji uslov. Sve dok zadnji posjećeni
vrh ima još nekolicinu nepohodenih susjeda, može se izabrati jedan od njih. Ali ako su svi
susjedi već posjećeni, možda ćemo morati tražiti prethodno posjećene vrhove. Vrhove
numeriramo redoslijedom kojim se posjećuju, primjećujući da vrh prvo posjeti luk stabla. Mi
pohranjujemo ovu numeraciju u nizupre. Predstavljamo algoritam dajući samo relevantne
korake i odlažemo neke detalje implementacije (izjave A, B, C, D i E) na kasnije odeljke.
! T
(8 u; v : (u; v) 2 F ^ u; v 2 S : v ! u)^ (S,T)
je usmjereno stablo ^ H (odloženo na odjeljak 9)
g do (iako nisu sve l ivice uzeti u obzir)! (v; u) :
!
var usmjerena ivica; (v;
! !
F := F [ f (v u) g;
6
Machine Translated by Google
Machine Translated by Google
Machine Translated by Google
v := v + 1;
od
f postcondn : I = fuj low:up:ugg
Sada obnavljamo korak 2 algoritma 3.1. Neka je BV :i skup svih vrhova bloka definiranih nezavisnim
vrhom i.
Iz demencije slijedi da je svaki član BV :i, osim p:i, potomak od i (lema 4.1). Ali ne pripadaju svi
potomci i u BV :i. Skup BV :i je dat sa
T T T
= fp:ig [ fuj (i ! u) ^ (8 j : (j 2 I ) ^ (i ! u))g !+ j) : :(j BV :i (5)
T
Za vrh v, skup njegovih potomaka des(v) = fu=v ! ug and
T
invarijantno : BV :i = fp:ig [ fuj (u < v) ^ (i ! u) ^
T T
(j 2 I ) ^ (i ! u))g !+ j) : :(j (8 j :
9
Machine Translated by Google
od
f postcondn : jednačina 5 g
v := v + 1;
od
f postcondn : (8 i : i 2 I : jednadžba 5) ^ (8 i : i 2= I : BV :i = ) g
Dakle
nd:v = 1 + X (nd:u : u 2 ch:v : istina) (7)
Moramo izračunati nd vrijednosti djece prije roditelja. Sumiranje nad skupom djece izbjegava se tako
što svako dijete doprinosi svom roditelju. U početku je nd vrijednost za svaki vrh postavljena na 1, pošto je
svaki vrh sam po sebi potomak.
invarijantno : (8 u : u 2 V :
10
Machine Translated by Google
Machine Translated by Google
Machine Translated by Google
STK.0;
od
Sa svim ovim dodacima možemo proširiti invarijantu algoritma 5.1 postavljanjem H na 8 i; j : 0 i < j #ST
K-1 : (pre:((ST K:i):1) pre:((ST K:j):1))
U svim našim algoritmima skupovi se mogu implementirati kao sekvence. Kako izvodimo samo
disjunktne unije, operacija unije na skupovima se može prevesti u konkatenaciju nizova.
Inicijalizacije u algoritmu 5.1 uzimaju O(#V) vremena i petlja obrađuje svaki rub dvaput dajući
vremensku složenost O(#V + #E).
U obnavljanju algoritma 6.1, provjera se može izvršiti gledanjem u A:u i provjerom da li je w >
u gdje je w u A:u. Inicijalizacija traje O(#V) vremena, a ukupan broj provjera listova traje O(#E)
vremena. Stoga je vremenska složenost O(#V + #E).
Petlja u algoritmu 6.2 obrađuje sve vrhove jednom. Dakle, uz pretpostavku dostupnosti low i
p, ovo traje O(#V ) vremena.
9.4 Compute BV
U algoritmu 7.2, inicijalizacija traje O(#V) vremena. Provjera v 2 I može se prevesti u low:vp:v. Algoritam 7.1 se zove #I
puta. Uz pretpostavku dostupnosti nd i obračuna za sve ove pozive zajedno, može se provjeriti da se naredba v := v +
nd:v u algoritmu 7.1 izvršava #I puta i da se naredbe koje ažuriraju BV :i izvršavaju (#V + #I ) puta.
U algoritmu 7.3, inicijalizacija traje O(#V) vremena i petlja se kreće preko skupa vrhova.
Stoga se nd(:) može izračunati u O(#V) vremenu. Tako se skupovi vrhova svih blokova mogu
izračunati u O(#V + #I) vremenu.
9.5 Izračunaj BE
10 Zaključci
Predstavili smo razvoj linearnog algoritma za pronalaženje dvopovezanih komponenti (i vrhova i skupova ivica)
neusmjerenog jednostavnog grafa. Naš razvoj pratio je dobro poznati princip programiranja da dokaz ispravnosti i
program treba da idu ruku pod ruku.
Vjerujemo da će napori poput našeg i ovog u [GRI 88] biti daleko u pružanju boljeg razumijevanja zamršenosti teorije
algoritamskih grafova.
13
Machine Translated by Google
Reference
[AHU 84] Aho, Hopcroft i Ullman. Strukture podataka i algoritmi, Addison Wesley, MA, SAD
1984.
[GRI 88] Gries D i Xue J. Algoritam planarnosti Hopcroft Tarjan - Prezentacije i poboljšanja, Univerzitet
Cornell, Tech Report, 88-906, 1988.
[HAR 69] Harary Frank. Teorija grafova, Addison Wesley, MA, SAD 1969.
14