this dir | view | cards | source | edit | dark
top
ADS: přednáška
- grafové algoritmy
- prohledávání do hloubky a do šířky
- graf G, BÚNO orientovaný
- reprezentace grafu
- matice sousednosti – prostor Θ(n2)
- seznamy sousedů – prostor Θ(n+m), kde n je počet vrcholů, m je počet hran
Prohledávání do hloubky
- stav vrcholu – neviděný / otevřený / zavřený
- DFS(v):
- stav(v) ← otevřený
- pro vw∈E:
- pokud stav(w) == neviděný:
- stav(v) ← zavřený
- inicializace: všechny vrcholy nastavíme jako neviděné
- lemma: Po doběhnutí DFS(u) je stav(v) buď neviděný, nebo zavřený. Stav(v) je zavřený ⟺∃ cesta z u do v.
- důkaz
- pozorování: neviděný → otevřený → zavřený
- v otevřený nebo zavřený ⟹v dosažitelný
- v dosažitelný ⟹v na konci zavřený
- důkaz sporem – minimálním protipříkladem
- kdyby neplatilo, existuje „špatný vrchol“ x, který je dosažitelný, ale nenalezený
- zvolíme x takový, že cesta u→x má nejméně hran
- určitě u=x
- na cestě u→x zvolíme p, což je předposlední vrchol před vrcholem u
- p je určitě „dobrý“ (hledali jsme x s nejméně hranami)
- museli jsme vstoupit do p⟹ objevit hranu px, což je spor
- lemma: DFS běží v čase Θ(n+m)
- důkaz
- pozorování: do každého vrcholu vstoupíme maximálně jednou
- dva přístupy
- Θ(∑vΘ(1+degout(v)))=Θ(n+m)
- účtujeme vrcholům a hranám
- opakované DFS
- ∀v∈v: stav(v) ← neviděn
- pro všechna v:
- je-li stav(v) == neviděn:
- opakované DFS by mělo větší složitost – ale lze převést na přidání jednoho vrcholu a jeho připojení ke všem vrcholům grafu → asymptotika je zachována
- DFS strom
- tvoří ho stromové hrany
- zpětné hrany – vede do otevřeného vrcholu (do předka)
- dopředné hrany – vede do zavřeného vrcholu, který je potomkem
- příčné hrany – vede do zavřeného vrcholu, který není potomkem; vždy zprava doleva
- klasifikace hran
- pro hranu xy může průchod vrcholy vypadat takto
- (x)x(y)y – nenastane
- (y)y(x)x – příčná
- (x(y)y)x – stromová nebo dopředná
- (y(x)x)y – zpětná
- hrana v neorientovaném grafu
- když ji vidím poprvé → stromová, podruhé zpětná
- poprvé zpětná, podruhé dopředná
- věta: DFS(u) běží v čase Θ(n+m) a prostoru Θ(n+m) a najde dosažitelné vrcholy a klasifikace hran mezi nimi.
- hledání mostů v neorientovaných grafech
- df: e je most ≡(G−e) má více komponent souvislosti než G
- pozorování: e není most ⟺e leží na kružnici
- pozorování: zpětná hrana nemůže být most
- stromová hrana xy není most ⟺∃ zpětná hrana ab, kde a leží ve stromu pod y, b leží ostře nad y
- df: low(v) := min { in(b) } (???)
- low(v) = min { low(s1), …, low(sk), in(b) | vb zpětné hrany } (???)
- DFS algoritmus umí o každé hraně v neorientovaném grafu rozhodnout, jestli je to most