Výpisky z přednášek

Transkript

Výpisky z přednášek
Teoretická informatika
Str.1
Grafy (G)
Neorientované: (NG)
H – hrany, U-uzly, ρ-incidence (jestli k němu něco vede)
Ξ neuspořádaná dvojice
ρ: H→UΞU
ρ(h) = [u,v]
Izolovaný uzel – neinciduje s ním žádná hrana
Rovnoběžné hrany – hrany se shodnou množinou krajních uzlů
Prostý (G) – neobsahuje rovnoběžné hrany
Multigraf – aspoň 1 dvojice rovnoběžných hran
Obyčejný (G) – prostý (G) bez smyček (hrana mající stejný počáteční i koncový uzel)
⎛ n⎞
⎝ 2⎠
Úplný graf – obyč. (G), mezi všemi uzly ex. jedna hrana. Značení Kn (graf o n uzlech). Počet hran = ⎜⎜ ⎟⎟
Diskrétní graf – pouze izolované uzly
Podgraf: H´⊆ H && U´⊆ U && ρ´(h) = ρ(h) pro všechna h ∈ H´
Faktor (G) = hranový podgraf G´ - množina uzlů shodná s G (má všechny uzly a jen některé (všechny) hrany)
Dva grafy, jejichž průnikem je prázdný (G) nazýváme disjunktními (G)
Rozdíl G – G1 : G2 ⊆ G pro který platí G = G1 ∪ G2 (G2 neobsahuje žádné hrany z G1, a ani žádné „zbytečné“ uzly)
Doplněk – vznikne odečtením grafu G od úplného grafu s množinou uzlů U
Izomorfismus - ϕ: grafy jsou strukturálně stejné: G1 ≅ G2
Způsob pro odhalení: Píši si k tomu posloupnosti stupňů a grafy, jejichž posloupnosti se budou rovnat proberu podrobně
Def: Nechť G1=<H1,U1,ρ1> a G2=<H2,U2,ρ2> jsou dva grafy a ϕ bijekce množiny H1 ∪ U1 na množinu H2 ∪ U2 taková,
že:
• zúžené zobrazení ϕ⏐H1 je bijekce H1 na H2 (ϕ⏐H1: H1 ↔ H2)
• zúžené zobrazení ϕ⏐U1 je bijekce U1 na U2 (ϕ⏐U1: U1 ↔ U2)
• ϕ zachovává incidenci, tzn. pro libovolné h ∈ H platí
ρ1(h) = [u,v] ⇒ ρ2(ϕ(h)) = [ϕ(u),ϕ(u)]
Zobrazení ϕ se pak nazývá izomorfismus mezi grafy G1 a G2 a grafy G1, G2, pro které tento izomorfismus lze nalézt, se
nazývá izomorfní grafy.
Stupeň uzlu – počet hran s ním incidujících δG(u). Pro každou smyčku: δ(u) = 2
δ(G), Δ(G) – min. resp. max. stupeň uzlu v (G); Σδ(u) = 2 |H|
V obec. grafu: δ(u) = poč. soused
Věta: V lib. (G) je poč. uzlů lichého stupně číslo sudé.
Sled (G) – posloupnost uzel, hrana, uzel …, hrana, uzel
– délka sledu = počet hran
– otevřený sled – různý počáteční a koncový uzel (i sled nulové délky)
– uzavřený
Tah – sled, ve kterém se neopakují hrany
Cesta – tak, ve kterém se neopakují uzly (mimo uzavřené cesty)
Kružnice – uzavřená cesta
Z lib. sledu lze vybrat cestu, ale z uzavřeného sledu nemusí jít vybrat kružnice (to lze jen pro sled liché délky)
Souvislý (G) – mezi lib. dvěma uzly ex. sled
Na souvislé propojení potřebuji min. N-1 hran
Komponenta grafu – každý jeho max. souvislý podgraf
Strom – souvislý graf bez kružnic
Kostra – faktor, který je stromem. Hrany náležející kostře jsou větve. Ty, které tam nepatří jsou tětivy. Přidáním 1 tětivy do
kostry udělám právě 1 kružnici. Kostra má h – u + 1 tětiv
T
Počet různých koster grafu G = det(ArAr ), kde Ar je matice tvořená lib. |U|–1 LN řádky matice A
Orientované (OG):
u – počáteční uzel
o(h) = (u,v)
uΓv
uzel u nazýváme předchůdcem uzlu v
Úplný symetrický (OG) v němž je každá uspořádaná dvojice uzlů spojena orient. hranou
Symetrická orientace: z
udělám
Opačně orientovaný (G) – otočíme orientaci (šipky) u všech hran
Orientované spojení; Orientovaný tah; Orientovaná cesta;
Cykl – orient. uzavřená cesta
Silně souvislý – mezi lib. dvěma uzly ex. orient. spojení
Silná komponenta – každý jeho max. silně souvislý podgraf (např.
má 2 silné komponenty)
Kondenzace grafu – prostý graf, jehož každý uzel odpovídá silné komponentě
Teoretická informatika
Str.2
Výstupní stp. uzelu δG (u), vstupní δG (u) – poč. hran, které mají uzel u za koncový
Σδ+(u) = Σδ–(u) = |H|
Kořen: δ–(u) = 0
List: δ+(u) = 0
Acyklický (G) – prostý (OG), který neobsahuje cyklus
Nalezení: Odebírám listy a kořeny
+
–
Vlastnosti grafů
Pokrytí (G) – rozložíme množinu hran tak, že jsou hrany každé třídy Hi uspořádány do tahu. Pokrytí s nejmenším počtem tříd
nazýváme minimální pokrytí
Min pokrytí – projít všechny uzly. Hrany mohu pojít jen 1x
Eulerův graf – každý uzel má sudý stupeň (skládá se z kružnic)
Věta: (G) lze pokrýt jediným uzavřeným tahem iff, je souvislým Eulerovým (G)
Věta: (G) který má 2n uzlů lichého stupně a je souvislý lze pokrýt minimálně n otevřenými tahy.
Orient. Eulerův (G) – každý uzel má stejný vstupní a výstupní stupeň
Nezávislá podmnožina uzlů – žádné dva z uzlů neincidují se stejnou hranou (nesousedící uzly); α(G)
Klika grafu – max. úplný (každý s každým) podgraf Kn
Klikovost grafu ω(G) – maximální klika (číslo n z Kn)
α(G) = ω(–G)
Dominující podmnožina – podmnožina uzlů, která svou množinou sousedů pokrývá všechny zbývající uzly (G)
Dominance grafu β(G) = min|D|
D ∈ dominující podmnožina
Věta: Nezávislá podmnožina uzlů neorient (G) je max. iff je jeho dominující podmnožinou ⇒ β(G) ≤ α(G)
Chromatické číslo χ(G) –α(G) ≥ |U|
χ(G) ≤ δmax + 1
graf bez kružnic liché délky: χ(G) = 2 (např. strom)
δmax – max. stupeň uzlu
Bipartitní (bichromatický) (G): χ(G) = 2, uplný značím Km,n
Vzdálenost d(u,v) – délka nejkratší cesty z u do v.
d(u,v) ≥ 0;
d(u,v) = 0 ⇔ u = v;
d(u,v) = d(v,u)
d(u,v) ≤ d(u,z) + d(z,v)
Def: Vzdáleností uzlů u a v v neorientovaném souvislém grafu G = <H,U,ρ> nazýváme délkou nejkratší cesty spojující
tyto dva uzly.
Průměr grafu T(G) = max d(u,v) pro všechna u, v.
- max. vzdálenost v grafu
Excentricita uzlu e(u,G) = max d(u,v) pro všechna v
- jeho vzdálenost od jemu nejvzdálenějšímu vrcholu
Poloměr r(G) = min e(u,G) u ∈ U
Střed grafu – každý uzel s excentricitou rovnou poloměru
Cyklomatické číslo: μ(G) = |H| – |U| + p,
kde p – počet komponent
udává počet tětiv grafu
Hodnost grafu: h(G) =|U| – p
Kořenový strom: kořen je propojitelný se všemi ostatními orientovanou cestou. Dálka této cesty se nazývá hloubka uzlu.
Uspořádaný strom: rozlišujeme následníky na 1., 2., .…
Pravidelný strom spt.2 s n listy obsahuje n–1 vnitřních uzlů (včetně kořene) a 2(n–1) hran
Vnější délka: E(T) = Σvšech hloubek listů
E = I (r – 1)+r*u
E = I+2n
Vnitřní délka: I(T) = Σhloubek vnitřních uzlů
r – stp.stromu,
u – počet vnitřních uzlů
Binární strom:
preorder – kořen, levý, pravý
inorder – levý, kořen, pravý
postorder – levý, pravý, kořen
Separabilita a planarita
Hranový řez – minimální množina hran, které když odeberu, tak se graf rozdělí na 2 komponenty (ne více). (⇒ nesmí sousedit
s artikulací)
Artikulace – takový uzel (jeden), kterým prochází všechny cesty mezi jistou dvojicí uzlů (⇒ podgraf bez toho uzlu má víc
komponent). Má-li graf artikulaci je separabilní. Jinak je nesaparabilní.
Planární graf: diagram lze nakreslit v E2.
Eulerova formule: počet stěn grafu (včetně vnější) r = |H| – |U| + 2
Max. planární graf má hran: |H| ≤ 3 |U| – 6
Grafy K5 a K3,3 jsou nejmenší neplanární grafy
Grafy jsou homeomorfní, jestliže jsou buď izomorfní, nebo je-li možné konečným počtem půlení hran v těchto grafech
dosáhnout toho, že vzniklé grafy jsou izomorfní.
Teoretická informatika
Str.3
Topologické uspořádání
Jde pouze pro acyklické grafy (žádný cyklus a smyčka). Uzly můžeme seřadit do horizontální úrovně a orientace všech hran
pak musí směřovat jedním směrem.
Získání: pomocí DFS prohledej a v okamžiku uzavření ulož každý uzel v na začátek seznamu uzlů, který po dokončení bude
obsahovat uzly seřazené podle požadavků topologického uspořádání.
Při zjišťování acykličnosti stačí vypouštět z grafu kořeny a listy (zůstane jen případný cyklus).
Algoritmy
Matice incidence A – do řádků uzly, do sloupců hrany – napíši jedničku tam, kde je ta hrana spojena s uzlem ⇒ v každém
sloupci 2 jedničky. Hodnost této matice o p komponent h(A) = |U| – p.
U (OG) je 1 u počátečního uzlu, –1 u koncového
Matice sousednosti V – v řádku i ve sloupci uzly – píši tam číslo, kolik hran ty uzly spojuje ⇒ matice je souměrná
Vn udává, kolik sledů délky n je v grafu G.
U (OG) prvek vik určuje hranu vedoucí z ui do uk.(matice není symetrická)
Spojová reprezentace – pole uzlů (pozice označuje číslo uzlu) ve kterém jsou ukazatele na strukturu, která obsahuje číslo uzlu,
se kterým tento sousedí a ukazatel NEXT.
Věta: Dva (NG) jsou izomorfní iff, jsou jejich matice incidence stejné až na případnou permutaci řádků a sloupců. Pro matici
sousednosti to platí také, ale uvažujeme jen stejné permutace množiny řádků a sloupců (možností je n!)
d
Matice dosažitelnosti: R =
∑ V i , kde d = min(|H|, |U| – 1)
i =0
BFS – prohledávání do šířky (nalezení stromu nejkratších cest a zjištění dosažitelnosti):
INICIALIZACE: stav dej na FRESH, vzdálenost na ∞ a předchůdce na NULL.
Otevři jeden uzel a ulož jej do fronty. Dokud není fronta prázdná vyber z ní první otevřený. Sousedy, kteří jsou FRESH
otevři, urči jim vzdálenost, předchůdce a ulož jej do fronty. Odeber ten otevřený uzel s fronty a zavři jej.
Čas složitost: O(H+U)
DFS – prohledávání do hloubky (Depth–First search)
DFS: Všechny uzly nastav jako FRESH a následníky na NULL. Pro každý FRESH uzel proveď DFS-Projdi(u)
DFS-Projdi(u): Otevři ten uzel u a dej mu čas otevření. Pro všechny jeho FRESH následníky proveď
DFS-Projdi(následník). Pak ten uzel uzavři a dej mu čas uzavření.
Otevřené uzly ukládám do zásobníku otevřených uzlů (pro nerekurzivní řeš.).
Čas složitost: O(H+U)
Použití: Když neex. zpětné hrany (tímhle to poznám), jde o acyklický graf.
Když se podívám na uzel a je FRESH ≡ stromová hrana, OPEN ≡ zpětná hrana, CLOSE ≡ dopředná nebo příčná (vede od
uzlu k nějakému jeho potomkovi v DF-lese)
DF-les se obecně skládá z několika DF-stromů. DF-strom se konstruuje pomocí předchůdců p[v] (jak se to procházelo
pomocí DFS)
Silné komponenty:
• proveď DFS(G), který určí časovou značku uzavření f[u] každého uzlu u; • vytvoř opačně orientovaný graf G–;
• proveď DFS(G–), přitom v hlavním cyklu DFS probírej uzly v pořadí klesající hodnoty f[u] (získané v prvním kroku)
• rozklad množiny uzlů podle jednotlivých stromů DF-lesa získaného v předchozím kroku určuje rozklad na silné
komponenty
Pozn: V třetím bodu se uzavírá jedna silná komponenta po druhé. Je to nejspíš tak, že nejdřív to projdu v jednom směru a
pak jdu od uzlů, které byly procházeny na konci a dívám se, kam se z nich mohu dostat (proto nejspíš G–).
Generování všech koster grafu:
Probírej hrany v lib. pořadí. Hranu, u které by se přidáním nevytvořila kružnice vlož do zásobníku a pokračuj v generování
všech možných zbytků kostry s použitím zbývajících hran (rekurze). Pak se ještě generují všechny kostry neobsahující
aktuální hranu. (2.rekurze). Kostra je celá, až má |U|–1 hran.
Zjišťování kružnic-zjišťování komponent grafu KOMP(G): Vytvoříme množiny, kde bude jediný prvek (každý uzel) ⇒
bude taky svým reprezentantem. Pokud zjistím, že 2 uzly již patří do stejné komponenty (operace FIND-SET) → nemohu
je propojit hranou (vznikla by kružnice). Pokud ne, ty dvě množiny sjednotím (operace UNION) a dám jim jednoho
reprezentanta.
Provedení: Kořenový strom, kde pro každý uzel se vytvoří samostatný podstrom (je tam sám)– otec je reprezentantem
množiny (kořenem) – operace MAKE-SET. V operaci UNION mohu kořen menšího stromu zavěsit rovnou pod kořen
většího (pak rychlé hledání). Ve FIND-SET mohu uzly, které jsem prošel při hledání kořene připojit rovnou na ten
nalezený kořen, aby se to příště hledalo rychleji.
Minimální kostry: (hranám je přiřazena nezáporná reálná délka)
Teoretická informatika
Str.4
Borůvkův-Kruskalův alg O(|H|.lg|H| ): upravený KOMP(G) – udělám MAKE-SET, uspořádám hrany do neklesající
posloupnosti, ze které pak vybírám vhodné (FIND-SET) a popř. spojuji do jednoho stromu (UNION).
Prostě vybírám hrany s min. ohodnocením (kdekoli z (G) ) a pokud bych přidáním nevytvořil kružnici, tak o nich
prohlásím, že jsou v min. kostře.
Jarníkův-Primův alg O(|H|.lg|U|): Přidávám k dosud nalezené kostře takové hrany, které sousedí s již nalezenou kostrou,
mají nejmenší ohodnocení a nevytvoří kuržnici.
Provedení: Do fronty ulož všechny uzly a urči jim nekonečnou vzdálenost od podstromu. Pouze kořen nemá předchůdce.
Dokud není fronta prázdná, vyber nejbližší uzel u a u jeho sousedů, kteří jsou ještě ve frontě zkus, zda mají blíže k u.
Pokud ano, zadej jim předchůdce u a menší vzdálenost.
Hladové programován: ke globálně optimálnímu řešení lze dospět prostřednictvím lokálně optimálních výběrů (shora dolů)
Dynamické programování: (zdola nahoru) - optimalizační problém rozkládám na podproblémy (na začátku nejsme schopni
říct, jako rozložení je to správné). Alg typu „rozděl a panuj“
Huffmanovo kódování: Aby se pravděpodobnější případy hledali rychleji než ty méně pravděpodobné.
Pro zadanou posloupnost vah se vytvoří list pro každou váhu wi a uloží se do prioritní fronty Q. (n–1)krát se opakuje
sloučení uzlů s min. vahami. Vytvoří se jejich předchůdce, kterému se jako váha dá součet vah těch dvou předchůdců.
Takto nově vzniklý uzel se vloží do Q, ze které se ti 2 zpracovaní vyjmou.
Jde o prefixový kód – začátek žádného kódového slova není stejný jako jiného.
Nejkratší cesty z jednoho uzlu:
Chceme i záporné ohodnocení hran. Pokud by cesta procházela záporně ohodnoceným cyklem (procházela by jím
donekonečna) ⇒ min.spojení neexistuje. Označujeme dw(u,v) = –∞.
dw(u,v) ≥ 0, dw(u,v) = 0 iff u = v; dw(u,v) ≤ dw(u,z) + dw(z,v)
Nejkratší cesty do jediného cílového uzlu – stačí řešit standardní úlohu, ale v opačně orientovaném grafu
Relaxace hrany alg. RELAX(u,v,w): Lze-li d[v] zmenšit (d[u]+w(u,v) < d[v]), pak to provedeme a také upravíme předchůdce
(nově nalezená cesta je menší než ta dříve nalezená)
Dijkstrův alg. O(|H|.lg|U|): ohodnocení hran musí mít nezáporné čísla; modifikované prohledáváním do hloubky
Prioritní fronta Q seřazená podle d[u]. Vem nejmenší prvek z Q, uzavři jej a pro každého jeho následovníka proveď
RELAXaci hrany (uprav jeho následovníkům vzdálenost (pro něž je to výhodné)).
Pozn: Musím postihnout to, že měním vzdálenosti prvků, které jsou v prioritní frontě a prvek tam nesmí být 2x.
Bellman-Fordův alg O(|H|.|U|): lze použít i pro záporně ohodnocené hrany
Alg: Opakovaně relaxuj ( |U|–1 krát ) všechny hrany grafu. Pro všechny hrany zkus, jestli ještě neexistuje hrana, která
zmenšuje d. Pokud ano – je zde záporný cyklus.
Upravený: Ulož počáteční uzel do fronty. Pak v cyklu, dokud je něco ve frontě, tak to vyber a všechny vycházející hrany
relaxuj: Jako původní relaxace, jen když se to povede, tak krom změny délky a předchůdce ten uzel vlož do fronty.
U záporně ohodnoceného cyklu se fronta nikdy nevyprázdní.
Pokud je graf acyklický, mohu vyhodit tu kontrolu na záporný cyklus a pak je složitost jen O(|H|+|U|).
Nejkratší cesty mezi všemi páry uzlů:
Floydův-Warshallův alg: matice předchůdců a matice D, jejíž každý prvek dij vyjadřuje w-délku nejkratší cesty z ui do uj.
3 cykly v sobě k,i,j = 1 do n. dělej
(
)
d ij( k ) = min d ij( k −1) , d ik( k −1) + d kj( k −1) . Musím také iteračně upravovat matici
předchůdců.
Odhalení nějakého záporného cyklu: na diagonále nějaké záporné číslo.
Johnsonův alg O(|H|.|U|): pro řídké grafy
Pomocí Bellmana-Forda zjistím, jestli tam jsou cykly záporné délky. Když ne, přehodnotím hrany, aby tam nebyly záporná
)
)
w = w(u,v) + h(u) – h(v). Pak provedu n-krát Dijkstra a pro všechny uzly udělej d u ,v = d (u, v) + h(v) − h(u ) .
Jak zvolit fci h: přidám do grafu uzel s orientovaně spojený se všemi ostatními hranou o w = 0. Pak h(u) = d(s,u). Ta fce
čísla
vrací nuly, jestliže tam nejsou záporné cesty.
Dynamické programování: např. vyhledání optimálního stromu (nějak, že se dělají ty horní diagonály z dolních …)
Nejdelší společná podposloupnost: Do 1. řádku a sloupce obdélníkové matice (podle délek posloupností) dám nuly. Pak
2 cykly v sobě vnořené. Je li ai = bi, tak se to použije (do toho políčka se dá velikost předchozího (na diagonále vpravo)+1).
Jinak se bere delší ze dvou uvažovaných možností.
Toky v sítích
Def: Sítí nazýváme čtveřici S = <G,q,s,t>, kde G=<H,U> je obyčejný (OG), s ∈U je zdroj sítě S, t ∈ U, t ≠ s je spotřebič sítě
S a q: H → R+ je nezáporné ohodnocení hran, nazývané kapacita sítě S. Pro každou hranu h ∈ H nazýváme příslušnou
hodnotu q(h) kapacitou hrany h.
Teoretická informatika
Str.5
+
Def: Tokem v síti S = <G,q,s,t> nazýváme takové hodnocení hran f: H → R , které splňuje následující podmínky
• pro každou hranu (u,v) ∈ H platí 0 ≤ f(u,v) ≤ q(u,v)
… tok hranou nesmí překročit její kapacitu
• pro každý uzel u sítě různý od s i od t platí:
f (u , v ) =
f ( w, u ) … tok se nehromadí v žádném vnitřním uzlu
∑
∑
( u ,v )∈H
( w ,u )∈H
Velikost toku f udává, kolik ve zdroji toku vzniká = kolik ho ve spotřebiči zaniká.
Když je tam víc zdrojů/spotřebičů, udělám jeden a od něj vedu hrany s nekonečnou kapacitou ke skutečným zdrojům.
Když má i uzel omezenou kapacitu, tak tento rozdělím na dva spojené hranou s touto kapacitou. Do jednu přivedu všechny
hrany, které do původního vstupovali a do druhého všechny, které z něj vystupovali.
Sítě s omezeným min. tokem: Síť doplníme umělým zdrojem Sa a spotřebičem ta a pro všechny hrany (u,v) mající ruv > 0
zavedeme dvojici hran (u,ta), (sa,v) s kapacitou ruv (a dolní mezí = 0)
• Snížíme kapacitu quv – ruv a dolní mez toku hranou (u,v) stanovíme = 0
• Doplníme novou zpětnou hranu (t,s) s kapacitou qts = ∞ a dolní mezí = 0
Má-li takto vzniklá síť max. tok z (sa do ta) nasycující všechny případné hrany, pak lze v původní síti nalézt tok fts. Jinak
přípustný tok neexistuje.
Řez sítě: množina hran, po jejímž odebrání se budou zdroj a spotřebič nacházet v různých komponentách.
Kapacita řezu = velikost max. toku v síti = součet jednotlivých kapacit hran, které do řezu patří.
Párováním v grafu G nazýváme takovou podmnožinu P ⊆ H jeho hran, ve které žádné dvě hrany nemají společný uzel.
Perfektní párování je, když P je faktorem grafu G. Maximální párování je takové, které obsahuje největší počet hran.
Maximální tok v síti – Alg. Fordův-Fulkersonův:
• Všechny uzly na FRESH; • pak jdu jako prohledávání do šířky, dokud nedojdu do spotřebiče; • Zapíši si zlepšující tok,
změním propustnost (teď už tam něco teče → už se tam toho vleze méně) a opakuji od 1. bodu dokud to jde.
Pokud v 2. bodu narazím na uzel, kterým už odtéká celá jeho kapacita a já bych tam tou svou cestou mohl dopravit taky
něco, tak ten původní „zkusím poslat zpět“ a jdu tam já. S daty, co jsem poslal zpět (aspoň část) zkusím projít jinudy.
Algoritmy umělé inteligence (UI)
Stavový prostor je množina všech stavů systému společně s operátory nebo akcemi, které způsobují přechody mezi těmito
stavy. Možno chápat jako (OG) → automat.
Informované hledání: hodnotící (heuristická) funkce směruje hledání určitým směrem.
Gradientní algoritmus (gradientní alg): Pomocí prohledávání do hloubky. Při expanzi se následníci seřadí podle hodnotící
funkce a do zásobníku otevřených uzlů se uloží tak, že na vrcholu bude nejperspektivnější z nich.
Alg paprskového prohledávání (beam-search): Varianta prohledávání do šířky. V každé hladině uzlů stejně vzdálených od
počátku se do fronty otevřených uzlů zařadí nejvýše k nejlepších kandidátů expanze.
Alg uspořádaného prohledávání: Jako gradientní, ale otevřené uzly ukládá do prioritní fronty. K expanzi se pak vybírá uzel
s nejmenší hodnotou f → Dijkstrův alg v němž se místo odhadované vzdálenosti od počátku používá hodnotící fce. (je-li
výpočet f(u) závislý na hodnotě f pro předchůdce uzlu, je nutné upravit relaxaci a upravovat pro dříve generované uzly jejich
ohodnocení a zařazovat je znovu do fronty otevřených uzlů.
Výhodné je hodnotící fci mít: f(u) = g(u)+h(u), kde g(u) je vzdálenost od začátku a h(u) vzdálenost od konce. Alg s takto
uspořádanou hodnotící funkcí se nazývá algoritmus A.
Přípustný alg prohledávání – algoritmus, který zaručuje nalezení nejkratší cesty řešení
Heuristické hledání:
)
Funkce h (u ) je odhad h(u) a nazývá se heuristická funkce (zcela závislá na existenci kvantifikovatelných heuristic.
pravidel).
alg A*: jako A, jen je tam ta hodnotící funkce aproximovaná.
)
alg A* je přípustný h (u ) ≤ h(u ) a ohodnocení každého operátoru je > 0.
)
)
alg A1* je lépe informovaný než A2*, když h1(u ) ≤ h 2(u ) pro každý stav u stavového prostoru. Aby to však A1 nalezl
)
)
dříve, musela by heuristická fce být konzistentní: h (u ) − h (v ) ≤ d (u , v ) , kde d(u,v) je přesná vzdálenost.
SOH (symetrické obousměrné hledání), která je přípustná a kterou lze docílit nižšího počtu expandovaných uzlů než při
prohledávání jednostranném.
Mohu použít i heuristiku se směrováním – je to hodně složité.
IDA* (iterative deepining A*): SKRIPTA: Iterativní prohlubování, při níž se na počátku nastaví prahová hodnota hodnotící
funkce a uzly s vyšší hodnotou se neuchovávají. Pokud hledání neuspěje, nový práh se nastaví na nejblíže vyšší hodnotu
dosaženou v minulém průchodu.
PŘEDNÁŠKY: Jako alg. do hloubky s omezenou hloubkou. Určím hloubku, kam až to má jít. Když se to tam nenajde,
zvětší se prohledávaná hloubka.
Teoretická informatika
Str.6
SMA* - jako A*, ale fronta je omezena velikostí. Když se fronta naplní, některé uzly vyhodím. Alg najde optimální řešení,
jestli vzdálenost toho uzlu je menší než počet míst ve frontě.
Řád růstu funkce (ASI):
n
Když mám zjisti, která z fcí roste asymptoticky rychleji: a = b, b = exp(n ln a).
Např. vyšetřit:
(
)
f ( n) = n
n
(
a g (n) =
)
( n)
n
exp n ln n ? ≥ ? exp n ln n = exp (n 12 ln n )
n ln n ? ≥ ? n 12 ln n
n ? ≥ ? 12 n
neplatí ⇒ g(n) roste řádově rychleji

Podobné dokumenty

Diplomovß prßce

Diplomovß prßce Souvislý graf Graf G je souvislý pokud pro každou dvojici vrcholů grafu x, y existuje cesta z bodu x do bodu y. Jinak je nesouvislý. Pozn.: Graf G je také souvislý jsou-li stupně všech vrcholů ales...

Více

ADS3-SG

ADS3-SG Binární stromy (binary trees) jsou konečné množiny prvků, které jsou buď prázdné, nebo obsahují jeden prvek nazývaný kořen stromu (root of the tree) a všechny ostatní prvky jsou rozděleny do dvou d...

Více

Teorie grafů - Matematika pro inženýry 21. století

Teorie grafů - Matematika pro inženýry 21. století nebo (ai )ni=1 . Podobně i-tý člen (prvek) posloupnosti značíme ai místo a(i). Indexy členů posloupnosti jsou obvykle přirozená čísla, která začínají od 1. Někdy je vhodné za index prvního členu zv...

Více

Využití CASE ve vývojářské firmě

Využití CASE ve vývojářské firmě 2.1 Přínosy využití CASE nástrojů při vývoji SW Jedna z hlavním otázek, kterou si většina čtenářů položí, se týká přínosů, které jim může použití CASE nástrojů při vývoji zajistit. Mezi nejvýznamně...

Více

teorie grafů - Matematika pro inženýry 21. století

teorie grafů - Matematika pro inženýry 21. století text, který právě čtete, vznikl v rámci projektu „Matematika pro inženýry 21. století – inovace výuky matematiky na technických školách v nových podmínkách rychle se vyvíjející informační a technic...

Více

ADS4-TT

ADS4-TT Tabulky patří mezi abstraktní datové typy, velmi často používané při programování. Z hlediska dalších potřeb stačí, pokud definujeme tabulku jako množinu prvků, které lze identifikovat pomocí tzv. ...

Více