Grafy (G) ρ(h) = [u,v]



Podobné dokumenty
Vzdálenost uzlů v neorientovaném grafu

VLASTNOSTI GRAFŮ. Vlastnosti grafů - kap. 3 TI 5 / 1

07 Základní pojmy teorie grafů

VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5

Úvod do teorie grafů

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

Použití dalších heuristik

PLANARITA A TOKY V SÍTÍCH

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Hledáme efektivní řešení úloh na grafu

Matice sousednosti NG

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

Algoritmizace prostorových úloh

TGH05 - aplikace DFS, průchod do šířky

TGH05 - aplikace DFS, průchod do šířky

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Základní pojmy teorie grafů [Graph theory]

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová

STROMY A KOSTRY. Stromy a kostry TI 6.1

Jan Březina. 7. března 2017

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd.

TEORIE GRAFŮ TEORIE GRAFŮ 1

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

5 Orientované grafy, Toky v sítích

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

řádově různě rostoucí rostou řádově stejně rychle dvě funkce faktor izomorfismus neorientovaných grafů souvislý graf souvislost komponenta

Základy umělé inteligence

Algoritmy na ohodnoceném grafu

Teorie grafů. Teoretická informatika Tomáš Foltýnek

TGH02 - teorie grafů, základní pojmy

Úloha ve stavovém prostoru SP je <s 0, C>, kde s 0 je počáteční stav C je množina požadovaných cílových stavů

GRAFY A GRAFOVÉ ALGORITMY

TGH02 - teorie grafů, základní pojmy

Drsná matematika III 10. demonstrovaná cvičení Kostry grafů

STROMY. v 7 v 8. v 5. v 2. v 3. Základní pojmy. Řešené příklady 1. příklad. Stromy

TGH02 - teorie grafů, základní pojmy

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66

Operační výzkum. Síťová analýza. Metoda CPM.

H {{u, v} : u,v U u v }

STROMY A KOSTRY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 6

TOKY V SÍTÍCH II. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Prohledávání do šířky = algoritmus vlny

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

Stromy, haldy, prioritní fronty

6. Tahy / Kostry / Nejkratší cesty

10 Přednáška ze

Úvod do informatiky. Miroslav Kolařík

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

Teorie grafů. zadání úloh. letní semestr 2008/2009. Poslední aktualizace: 19. května First Prev Next Last Go Back Full Screen Close Quit

TGH06 - Hledání nejkratší cesty

10 Podgrafy, isomorfismus grafů

GRAFOVÉ MODELY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 1

TGH10 - Maximální toky

Základní datové struktury III: Stromy, haldy

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019

4 Pojem grafu, ve zkratce

TGH09 - Barvení grafů

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Jan Březina. Technical University of Liberec. 30. dubna 2013

Jan Březina. Technical University of Liberec. 21. dubna 2015

TGH06 - Hledání nejkratší cesty

Teorie grafů. Kostra grafu. Obsah. Radim Farana Podklady pro výuku pro akademický rok 2013/2014

Metody síťové analýzy

Definice 1 eulerovský Definice 2 poloeulerovský

Dijkstrův algoritmus

TGH04 - procházky po grafech

1. část: Základy teorie grafů. Ing. Michal Dorda, Ph.D.

4EK311 Operační výzkum. 5. Teorie grafů

Algoritmy a datové struktury

Kapitola 11. Vzdálenost v grafech Matice sousednosti a počty sledů

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Teoretická informatika Tomáš Foltýnek Barvení grafů Platónská tělesa

Učební texty k státní bakalářské zkoušce Matematika Teorie grafů. študenti MFF 15. augusta 2008

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Ohodnocené orientované grafy

Grafy. 1. Základní pojmy. 1. Definice grafu. Grafy.nb 1

Výroková a predikátová logika - III

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

ALGORITMY A DATOVÉ STRUKTURY

Diskrétní matematika. DiM /01, zimní semestr 2018/2019

1 Teorie grafů. Základní informace

Matematika III 10. přednáška Stromy a kostry

Návrh Designu: Radek Mařík

Vrcholová barevnost grafu

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Rekurzivní algoritmy

II. Úlohy na vložené cykly a podprogramy

Vybíravost grafů, Nullstellensatz, jádra

Transkript:

Grafy (G) Neorientované: (NG) H hrany, U-uzly, ρ-incidence (jestli k němu něco vede) ρ: H UΞU Ξ neuspořádaná dvojice ρ(h) = [u,v] Teoretická informatika Str.1 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 Úplný graf obyč. (G), mezi všemi uzly ex. jedna hrana. Značení K n (graf o n uzlech). Počet hran = 2 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 G 1 : G 2 G pro který platí G = G 1 G 2 (G 2 neobsahuje žádné hrany z G 1, 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é: G 1 G 2 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 H 1 U 1 na množinu H 2 U 2 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)) = [ϕ(,ϕ(] 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 (. Pro každou smyčku: δ( = 2 δ(g), Δ(G) min. resp. max. stupeň uzlu v (G); Σδ( = 2 H V obec. grafu: δ( = 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 Počet různých koster grafu G = det(a r A T r ), kde A r je matice tvořená lib. U 1 LN řádky matice A Orientované (OG): o(h) = (u, u počáteční uzel 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 + (, vstupní δ G ( poč. hran, které mají uzel u za koncový Σδ + ( = Σδ ( = H List: δ + ( = 0 Kořen: δ ( = 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 H i 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 K n Klikovost grafu ω(g) maximální klika (číslo n z K n ) α(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 δ max max. stupeň uzlu graf bez kružnic liché délky: χ(g) = 2 (např. strom) Bipartitní (bichromatický) (G): χ(g) = 2, uplný značím K m,n Vzdálenost d(u, délka nejkratší cesty z u do v. d(u, 0; d(u, = 0 u = v; d(u, = d(v, d(u, d(u,z) + d(z, 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, pro všechna u, v. - max. vzdálenost v grafu Excentricita uzlu e(u,g) = max d(u, 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 E 2. 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 K 5 a K 3,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á V n udává, kolik sledů délky n je v grafu G. U (OG) prvek v ik určuje hranu vedoucí z u i do u k.(matice není symetrická) Spojová reprezentace pole uzlů (pozice označuje číslo uzl 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, kde d = min( H, U 1) i= 0 i 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( DFS-Projdi(: 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 krok 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 nahor - 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 w i 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 d w (u, =. d w (u, 0, d w (u, = 0 iff u = v; d w (u, d w (u,z) + d w (z, 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, < 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 d ij vyjadřuje w-délku nejkratší cesty z u i do u j. ( k ) ( k 1) ( k 1) ( k 1) 3 cykly v sobě k,i,j = 1 do n. dělej d = min( d, d + d ) ij ij ik kj. 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á čísla w ) = w(u, + h( h(. Pak provedu n-krát Dijkstra a pro všechny uzly udělej = d ) ( u, + h( h( ). d u, v 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( = d(s,. Ta fce 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 a i = b i, 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, H platí 0 f(u, q(u, 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, = f ( w, tok se nehromadí v žádném vnitřním uzlu ( u, H ( w, 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 S a a spotřebičem t a a pro všechny hrany (u, mající r uv > 0 zavedeme dvojici hran (u,t a ), (s a, s kapacitou r uv (a dolní mezí = 0) Snížíme kapacitu q uv r uv a dolní mez toku hranou (u, stanovíme = 0 Doplníme novou zpětnou hranu (t,s) s kapacitou q ts = a dolní mezí = 0 Má-li takto vzniklá síť max. tok z (s a do t a ) nasycující všechny případné hrany, pak lze v původní síti nalézt tok f ts. 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( 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( = g(+h(, kde g( je vzdálenost od začátku a h( 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 ) ( je odhad h( 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( h( a ohodnocení každého operátoru je > 0. ) ) alg A1* je lépe informovaný než A2*, když h1( h2( pro každý stav u stavového prostoru. Aby to však A1 nalezl dříve, musela by heuristická fce být konzistentní: h ) ( h ) ( d( u,, kde d(u, 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): Když mám zjisti, která z fcí roste asymptoticky rychleji: a n = b, b = exp(n ln a). Např. vyšetřit: exp f = n ( n) n a ( ) n g ( n) = 1 ( n ln n)??exp( nln n ) = exp( n ln n) n ln n?? n n 2 1 2 ln n 1?? n neplatí g(n) roste řádově rychleji n 2