Milí řešitelé! Potrhlý syslík 6 bodů

Rozměr: px
Začít zobrazení ze stránky:

Download "Milí řešitelé! Potrhlý syslík 6 bodů"

Transkript

1 Milí řešitelé! Jetadypodzimasnímdruhásérienašehosemináře.TentokrátVámpřišla bez opravené první série. Nicméně dříve, než budete muset tuto druhou sérii odevzdat, dostanete spolu se zadáním třetí série i Vaše opravená řešení série první. Prostě podzim: ) Pokud chcete posílat svá řešení elektronickou cestou, prosím držte se instrukcí, které můžete najít na Řešení, která přišla mailem, jsme přijali pouze výjimečně. Termín odeslání Vašich řešení druhé série jest stanoven na 12. prosince 2005 a naše adresa je stále stejná: Korespondenční seminář z programování KSVIMFFUK Malostranské náměstí Praha1 Aktuální informace o KSP můžete nalézt na stránkách dotazy organizátorům můžete posílat em na adresu ksp@mff.cuni.cz. Zadání druhé série osmnáctého ročníku KSP Potrhlý syslík 6 bodů Syslík Potrhlík dostal jednoho dne podle svého soudu přímo úžasný nápad, jak zbohatnout bude chovat krokodýly a všechna ostatní zvířátka se na ně budou chodit dívat. AprotožetobylvelkýPotrhlík,hnedběželzažabákem Skrblikvákem, který vlastnil nedalekou bažinu, a když doběhl, udýchaně volal: Krokoběh! Půjč mi bažinu, postavímekrokoběhabudemebohatí! Cože, jaký kroko-běh? Ty chceš běhat nebo krokovat? Co toblábolíšzanesmysly?tyužsesmuselúplnězbláznit! Alenezbláznil,játitovysvětlím. Kdepak,stakovým potrhlýmsyslemsenebudubavit. Taksenaněcozeptej, aťvíš,žejsemsenezbláznil,ajátitopakvysvětlím. Skrblikvák se tedy zahloubal a vymyslel pro Potrhlíka následující zkoušku: Vzal Potrhlíka do zatemněné místnosti, vekteréjenapodlaze50mincí,ztoho18ležínahorulícemazbytekrubem.potrhlíkjemázaúkolrozdělitnadvě (ne nutně stejně velké) části tak, aby počet mincí ležících nahoru lícem byl v obou těchto částech stejný. koupit krokodýly a krokodýlí žrádlo, musíme výběh postavit, uplatit stavební komisi Bažinové Unie, koupit stánek se zmrzlinou,... Když si Skrblikvák sepsal, co všechno budou muset s Potrhlíkem zaplatit, zajímala ho celková výše jejich výdajů. Protožealenemělpřirucesvůjkvakulátor,poprosilVásoněj. Skrblikvák se snaží zapsat hodnotu zlomku a/b jako desetinné číslo. Zjistil, že někdy může být tento desetinný zápis nekonečný(1/3= ),alevždy,kdyžsetostane, nějakáčástčíslasepakmusíopakovat(1/3=0.3).tato opakující část čísla se nazývá perioda. Skrblikvák by po vás chtěl program, který mu pro zadané celočíselná a a b řekne, jak je dlouhá perioda desetinného zápisu čísla a/b. Pokud zápis čísla a/b periodický není, je délka periody evidentně nula. Můžete počítat s tím, že čísla a a b se vejdou do longintu. Příklad:Délkaperiodyčísla1/3jejedna,učísla1/8jenula aperiodačísla123/456mádélku18. Bonus: Pokud váš program bude potřebovat jenom konstantně mnoho pomocných proměnných(žádné pole délky závisléna aab)anezhorší-lisetímjehočasovásložitost, dostanete bonus až +3 body Jeřábník Evžen 15 bodů Potrhlík může kterékoliv mince libovolně otáčet, ale protože jetmaamincestaré,nijaknemůžezjistit,kteréminceleží nahoru lícem a které rubem. Když tedy nějakou minci otáčí, sámneví,jestlibude rubemnebolícem, víjenom,žeji otočil.sámsialemocnevírady pomůžetemu? Vaším úkolem je vymyslet pro Potrhlíka postup, který vždy dokáže mince rozdělit na dvě části tak, aby počet mincí ležící lícem vzhůru byl v obou částech stejný.(pro počet mincí ležících nahoru rubem to už platit nemusí.) Kvakulátor 5 bodů No, když jsi ty mince tak pěkně rozdělil, nebudeš úplně blázen,potrhlíku.cototedyjetenkroko-běh? Krokoběh je přece krokodýlí výběh! Postavíme ho v bažině a všichni senanějbudouchoditdívat. Hm,špatnýnápadtonení. Ale budeme na to potřebovat určitě hodně peněz. Musíme 1 Poté, co se Skrblikvák a Potrhlík dohodli, začali hned stavět. Budemepotřebovatjeřábníka.Nevědělbysoněkom? AcoEvžen,tenpelikán?Častostojívbažiněnasvýchvysokýchnohách.Ovládatvysokýjeřábpronějbudehračka. Brzysealeukázalo,žedemoličníjeřábjeinavysokéhopelikána trochu moc komplikovaný(možná proto, že ovládat páky zobákem nebo volant křídly moc dobře nejde). Protože určitě nechcete, aby Evžen zdemoloval celou bažinu (nebo sebe v kabině), měli byste mu pomoci.

2 Jeřáb si představte jako N segmentů, každý je libovolné délky.prvnísegmentjezapuštěnývzemiastojístálevzhůru a mezi každými dvěma sousedními segmenty je ohebný kloub. Na konci posledního segmentu je těžká ocelová koule (je to demoliční jeřáb). Na začátku je jeřáb celý vzpřímený. VkaždémkrokusiEvženvyberenějakýkloub1až N 1 atenotočíozadanýpočetstupňů.zajímáho,kampřesně se po každém kroku ocelová koule dostane. Napište program, který dostane N (počet segmentů jeřábu),dále l 1,...,l N (délkysegmentů1až N)aM (počet otočení, které Evžen s jeřábem udělá). Následuje M dvojic (k i, u i ),každáznichznamenáotočitkloubčíslo k i (jemezisegmenty k i a k i +1)ou i stupňůvesměruhodinových ručiček.navícihnedponačteníkaždédvojice(k i, u i )musí váš program s přesností na dvě desetinná vypsat, kam se ocelová koule(konec jeřábu) přesune. Na začátku je celý jeřábvzpřímenýabod(0,0)jespodekjeřábu. Příklad:Jeřábmá4segmentydélky5,10,2a8, M= Poprovedeníoperace(3, 90 )sedostanekoulenasouřadnice[ 8.00;17.00],po(1,90 )na[12.00;13.00]apoprovedení(2, 45 )na[5.76;12.07] Stavbyvedoucí 9 bodů Hned, jak byla příslušná část bažiny Evženem zdemolována (ať už podle plánu nebo ne), mohla začít stavba krokoběhu. Stavbyvedoucím se stal Potrhlík a všichni ostatní zvířecí stavitelé si u něj mohli objednávat materiál. Když si konečně všichni nadiktovali, co chtěli, měl už Potrhlík pěkně dlouhý seznam. U každého předmětu ze seznamu sipotrhlíkpamatuje Núdajůakaždýpředmětmázapsanývseznamunajednéřádce.Celýseznamjetedytabulka, kterámá Nsloupcůatolikřádek,kolikjepředmětů. Všichni stavitelé si ovšem(stejně jako učitelé) myslí, že jejich předměty jsou ty nejdůležitější, a tak každý chce, aby byly všechny řádky tabulky setříděny podle jejich požadavku. Každý požadavek je číslo údaje(sloupce), podle kterého by se měly všechny řádky setřídit.(neboli je to číslo sloupce, podle kterého bychom měli setřídit celou tabulku.) Chudák Potrhlík nakonec obdržel M požadavků, tedy M žádostí o setřídění dle určitého sloupce. Rozhodl se, že řádkysetřídínejprvepodle1.požadavku,potompodle2.,..., až M-téhopožadavku.Navíckdyžbudouvnějakémkroku dvě řádky podle zpracovávaného požadavku stejné, jejich vzájemné pořadí zůstane stejné jako před tímto tříděním. Počet třídících požadavků je ale opravdu velký a často se v něm opakují čísla sloupců, takže Potrhlíka napadlo, že byste mu mohli pomoci jeho úkol zjednodušit. Zajímalo by ho, jestli by nemohl provést setřídění řádků podle menšího počtu třídících požadavků. Tato kratší posloupnost třídících požadavků by měla být s původní posloupností ekvivalentní, čili ať je seznam předmětů na začátku uspořádán libovolně, setřídění podle původní posloupnosti požadavků a podle kratší posloupnosti požadavků musí dát vždy stejné výsledky(stejně setříděný seznam). Zkuste napsat program, který dostane N(počet sloupců seznamu), M(počet třídících požadavků) a jednotlivé třídící 2 požadavky a najde nejkratší posloupnost třídících požadavků, která je zadané posloupnosti ekvivalentní. Pokud je minimálních posloupností více, stačí vypsat libovolnou z nich. Příklad:Pro N=3aM=7požadavků3,3,1,1,2,3,3 je hledaná nejkratší posloupnost požadavků třeba 1, 2, Krokoběh 11bodů Jakmile byl potřebný materiál nakoupen a staviteli rozebrán(takzvaně rozkraden), mohlo se začít se stavbou krokoběhu. Krokoběh se skládá z několika jezírek, ve kterých mohou krokodýli odpočívat, a kanálů mezi nimi. Kanály jsou obousměrné, vedou vždy mezi dvěma jezírky a žádné dva kanály se mimo jezírka neprotínají(mimoúrovňově ale mohou). Nějaká jezírka a kanály jsou již postaveny. Pokud se ovšem stane, že se krokodýl nemůže dostat do nějakého jezírka (nevedekněmužádnácesta),jevelminerudnýažerevše kolem.(kvák!) Protože Potrhlík nechce dopadnout stejně jako Skrblikvák, chtěl by dostavět potřebné kanály tak, aby byli krokodýli spokojení. Ti budou spokojení, pokud i když jeden libovolný kanál vyschne, pořád se budou moci dostat z každého jezírka do kteréhokoliv jiného. A protože stavba krokoběhu Potrhlíka finančně velmi vyčerpala, chtěl by postavit nových kanálů co nejméně. Váš program dostane na vstupu popis už existujícího krokoběhu.tenseskládázn >2jezírekaMkanálů,každý kanál spojuje dvojici jezírek. Vaším cílem je zjistit, kolik nejméně kanálů je třeba přidat, aby i když libovolný jeden kanál vyschne, bylo pořád možné dostat se z každého jezírka do každého. Příklad:Pro N=6jezírekaM=4kanályvedoucímezi jezírky(1,2),(2,3),(3,1)a(4,5)jetřebapostavitalespoň další3kanály.(jsoutonapříklad(1,4),(5,6),(6,2).) Dominující komplikátory 10 bodů Vprvnímdíleseriálujsmesipopsaliavyzkoušeli,jakfunguje front-end překladače. Ve zbytku seriálu si budeme povídatooptimalizacíchkóduvpřekladačíchaotom,jakse tyto optimalizace implementují. První překladače zpracovávaly programy po jednotlivých příkazech. V rámci jednoho příkazu se dají provést pouze jednoduché optimalizace lze například vyhodnotit aritmetické výrazy s konstantními operandy a zjednodušit je použitím algebraických identit. Produkovaný kód však nebude příliš dobrý, mimo jiné proto, že některé hodnoty(třeba adresy proměnných) budeme zbytečně počítat opakovaně v každém příkazu. Aby se vyřešil tento problém, začaly se optimalizace provádět nad většími kusy programu. Některé optimalizace lze provádět nad basic blocky. Basic block je úsek programu, který se vždy vykonává sekvenčně, tj. neobsahuje skoky, anedáseskočitdojehovnitřku,tj.neobsahujelabely.nad basic blocky se provádí například propagace konstant a kopií a nahrazování společných podvýrazů. Většina moderních překladačů pracuje převážně nad jednotlivými funkcemi. Na této úrovni lze provádět navíc optimalizace typu mazání výpočtů, jejichž hodnota není použita, odstraňování invariantů ze smyček a mnoho dalších. V posledních 5 10 letech se začaly prakticky používat optimalizace pracující nad celými programy, například změny v rozložení dat v paměti či interprocedurální propagace konstant.

3 Jednou ze základních datových struktur pro práci s celou funkcí je Control Flow Graph(CFG). CFG je orientovaný graf, jehož vrcholy jsou basic blocky a hrany odpovídají skokům. Z vrcholu tedy většinou vedou jedna nebo dvě hrany(podle toho, zda příslušný basic block končí nepodmíněným nebo podmíněným skokem). Občas se vyskytnou vrcholy s větším počtem výstupních hran, například pokud basicblockkončípříkazemcasevpascalučiswitchvc. Jeden z vrcholů CFG je počáteční, v jemu odpovídajícím basic blocku začíná vykonávání funkce. Některé optimalizace jsou přímo manipulace s hranami a vrcholy CFG, například odstraňování nedosažitelného kódu spočívá v odstranění vrcholů, do nichž nevede cesta z počátku. Mnohé další optimalizace používají CFG při analýzách nutných pro jejich provedení. Úloha Jednou z vlastností vrcholů CFG, kterou mnohé optimalizace potřebují znát, je dominance. Říkáme, že basic block A dominuje basic block B, jestliže každá cesta z počátečního vrcholu do B prochází přes A. Speciálně počáteční vrchol dominuje všechny vrcholy CFG. Podívejme se na následující příklad: (BB0) b := 0; if y = 5 then (BB1) a := 1; end else (BB2) a := 2; b := 6; alenepostačující,napříkladpoužitíbvbb3mádvědefinice(v BB0aBB2),přestožedefinicevBB0dominuje BB3. Efektivní algoritmy pro určení dominance jsou ovšem velmi komplikované, proto se jimi nebudeme podrobněji zabývat. Předpokládejte, že už máte nějak relaci dominance pro všechny dvojice vrcholů spočtenu. Vaším úkolem v této úloze je navrhnout datovou strukturu, v níž lze tento výsledek reprezentovat. Chceme, aby tato datová struktura zabírala co nejméně místa, a přitom umožnila rychle pro libovolné dva basic blocky A a B rozhodnout, zda A dominuje B. Recepty z programátorské kuchařky V dnešním vydání známého bestselleru budeme péci grafy souvislé i nesouvislé, orientované i neorientované.řekneme si o základním procházení grafem, komponentách souvislosti, topologickém uspořádání a dalších grafových algoritmech. Abychom ale mohli začít, musíme si nejprve říci, s čím budeme pracovat. Ingredience Neorientovaný graf je určen množinou vrcholů V a množinou hran E, což jsou neuspořádané dvojice vrcholů. Hrana e={x, y}spojujevrcholy xay.většinoupožadujeme,aby hrany nespojovaly vrchol se sebou samým(takovým hranám říkáme smyčky) a aby mezi dvěma vrcholy nevedla více než jedna hrana(pokud toto neplatí, mluvíme o multigrafech). Obvykle také předpokládáme, že vrcholů je konečně mnoho. Neorientovaný graf většinou zobrazujeme jako body pospojované čarami Æ ÓÖ ÒØÓÚ Ò Ö ÑÙÐØ Ö 5 4 (BB3) test (b); b := 8; if y > 5 then (BB4) a := 3; end else (BB5) a := 4; (BB6) test (a); test (b); Zdebasicblock BB0dominujevšechnyblockyaBB3dominuje BB4, BB5 a BB6. Ostatní blocky dominují pouze sebesama.jednozpoužitídominancejetoto:kdyžmámevprogramupoužitíproměnnévbasicblocku B,ječasto potřeba zjistit, kde byla do této proměnné přiřazena hodnota. Nejjednodušší případ nastává, když je jen jedno takové přiřazení(v nějakém blocku A) například pro použití b v BB6jetotopřiřazenívBB3;všimnětesi,žepřiřazení dobvbb0abb2násnezajímají,jelikožjejichhodnotysedo BB6nikdynedostanou.Abytotomohlonastat, block A musí dominovat block B. Tato podmínka je nutná, 3 Podgrafemgrafu Grozumímegraf G,kterývzniklzgrafu Gvynechánímněkterých(anebožádných)hranavrcholů. Častonászajímá,zdasedázvrcholu xdojítpohranách dovrcholu y.ovšemslovo dojít bymohlobýttrochu zavádějící, proto si zavedeme pár pojmů: sled budeme říkat takové posloupnosti vrcholů a hran tvaru v 1, e 1, v 2, e 2,...,e n 1, v n, že e i = {v i, v i+1 } pro každé i.sledjetedynějakáprocházkapografu.délku sledu měříme počtem hran v této posloupnosti. tahjesled,vekterémseneopakujíhrany,tedy e i e j pro i j. cestajesled,vekterémseneopakujívrcholy,čili v i v j pro i j.všimnětesi,žesenemohouopakovatanihrany. Lehce nahlédneme, že pokud existuje sled z vrcholu x do y (v 1 = x, v n = y),paktakéexistujecestazvrcholu xdovrcholu y. Každý sled, který není cestou, obsahuje nějaký vrchol udvakrát,nechť u=v i = v j, i < j.ztakovéhosledu alemůžemevypustitposloupnost e i, v i+1,..., e j 1, v j adostanemetakésledspojující v 1 a v n,kterýjeurčitěkratší než původní sled. Tak můžeme po konečném počtu úprav dospět až ke sledu, který neobsahuje žádný vrchol dvakrát, tedy k cestě. Kružnicí neboli cyklem nazýváme cestu délky alespoň 3, vekteréoprotidefinicicestyplatí v 1 = v n.někdysenacesty,tahyakružnicevgrafutakédívámejakonapodgrafy,

4 které získáme tak, že z grafu vypustíme všechny ostatní vrcholy a hrany. Ještěsiukážeme,žepokudexistujecestazvrcholu ado vrcholu bazvrcholu bdovrcholu c,paktakéexistujecesta zvrcholu adovrcholu c.tovyplývázfaktu,žeexistujesled z vrcholu a do vrcholu c, který můžeme dostat například tak,žespojímezasebecestyzado bazbdo c.ajakjsmesi ukázali,kdyžexistujesledzado c,existujeicestazado c. V mnoha grafech(například v těch na předchozím obrázku) je každý vrchol dosažitelný cestou z každého. Takovým grafům budeme říkat souvislé. Pokud je graf nesouvislý, můžemehorozložitnačásti,kteréjižsouvisléjsouamezikterými nevedou žádné další hrany. Takové podgrafy nazýváme komponentami souvislosti. Teďsepodívejmenapárpojmůzpřírody:Stromjesouvislý graf, který neobsahuje kružnici. List je vrchol, ze kterého vede pouze jedna hrana. Ukážeme, že každý strom s alespoň dvěmavrcholymánejménědvalisty.pročto?stačísinajít nejdelší cestu(pokud je takových cest více, zvolíme libovolnouznich).obakoncovévrcholytétocestymusíbýtnutně listy:kdybyzněkteréhoznichvedlahrana,muselabyvést dovrcholu,kterýnacestěještěneleží(jinakbyvestromu byla kružnice), ale o takovou hranu bychom cestu mohli prodloužit, takže by původní cesta nebyla nejdelší. Grafům bez kružnic budeme obecně říkat lesy, jelikož každá komponenta souvislosti takového grafu je strom. Ä Ó Ú Ñ Ø Ñ Ø Někdy se hodí jeden z vrcholů stromu prohlásit za kořen, čímžjsmesivkaždémvrcholuurčilisměrnahoru(kekořeni je to zvláštní, ale matematici obvykle kreslí stromy kořenem vzhůru) a dolů(od kořene). Souseda vrcholu směrem nahoru pak nazýváme jeho otcem, sousedy směrem dolů jeho syny. Kostra souvislého grafu říkáme každému jeho podgrafu, který je stromem a spojuje všechny vrcholy grafu. Můžemejinapříkladzískattak,žedokudjsouvgrafukružnice, odebíráme hrany ležící na nějaké kružnici. Pro nesouvislé grafy nazveme kostrou les tvořený kostrami jednotlivých komponent. Na prvním obrázku je jedna z koster levého grafu znázorněna silnými hranami. Orientované grafy Často potřebujeme, aby hrany byly pouze jednosměrné. Takovému grafu říkáme orientovaný graf. Hrany jsou nyní uspořádané dvojice vrcholů(x, y) a říkáme, že hrana vedezvrcholu xdovrcholu y.hrany(x, y)a(y, x)jsou tedy dvě různé hrany. Orientovaný graf většinou zobrazujeme jako body spojené šipkami. Většina pojmů, které jsme definovali pro neorientované grafy, dává smysl i pro grafy orientované, jen si musíme dát pozor na směr hran. ϕ sh ϕ sh Ë ÐÒ Ð ÓÙÚ Ð ÓÖ ÒØÓÚ Ò Ö Se souvislostí orientovaných grafů je to trochu složitější. Rozlišujeme slabou a silnou souvislost: slabě souvislý je graf 4 tehdy, pokud se z něj zapomenutím orientace hran stane souvislý neorientovaný graf. Silně souvislým ho nazveme tehdy, vede-li mezi každými dvěma vrcholy x, y orientovaná cesta v obou směrech. Pokud je graf silně souvislý, jeislaběsouvislý,alejakukazujenášobrázek,opačněto platit nemusí. Komponenta silné souvislosti orientovaného grafu G je takovýpodgraf G,kterýjesilněsouvislýanenípodgrafem žádného většího silně souvislého podgrafu grafu G. Komponenty silné souvislosti tedy mohou být mezi sebou propojeny, ale žádné dvě nemohou ležet na společném cyklu. Ohodnocené grafy Dalšímožností,jaksigraf vyzdobit,jeohodnotitjeho hrany čísly. Například v grafu silniční sítě(vrcholy jsou města, hrany silnice mezi nimi) je zcela přirozené ohodnotit hrany délkami silnic nebo třeba mýtným vybíraným za průjezd silnicí. Přiřazeným číslům se proto často říká délkyhrannebojejichceny.pojmy,kteréjsmesipředchvílí nadefinovali pro obyčejné grafy, můžeme opět snadno rozšířit pro grafy ohodnocené např. délku sledu budeme namísto počtu hran sledu počítat jako součet jejich ohodnocení. Neohodnocený graf pak odpovídá grafu, v němž mají všechny hrany jednotkovou délku. Podobně můžeme přiřazovat ohodnocení i vrcholům, ale raději si všechny operace s ohodnocenými grafy necháme naněkterézdalšíchdílůkuchařky.itakbudememítpráce dostadost. Reprezentace grafů Nyníužvímeografechhodně,aleještějsmesineřekli,jak graf reprezentovat v paměti počítače. To můžeme udělat například tak, že vrcholy očíslujeme přirozenými čísly od 1 do N,hranyod1do Maodkudkamvedouhrany,popíšeme jedním z následujících tří způsobů: ½¾ ½ ¼½½¼¼¼¼½½ ¾ ½¼¼½½¼¼¼½ ½¼¼½¼¼¼¼¼ ¼½½¼½¼¼¼¼ ¼½¼½¼½¼¼¼ ¼¼¼¼½¼½½¼ ¼¼¼¼¼½¼½½ ½¼¼¼¼½½¼¼ ½½¼¼¼¼½¼¼ matice sousednosti to je pole A velikosti N N.Napozici A[i, j]uložímehodnotu0 nebo1podletoho,zdazvrcholu idovrcholu jvedehrana(1)nebonevede(0).smaticí sousednosti se zachází velmi snadno, ale má tu nevýhodu, že je vždy kvadraticky velká bezohledunato,kolikjehran.výhodou naopak je, že místo jedniček můžeme ukládat nějaké další informace o hranách, třeba jejich délky. Vpravo od tohoto odstavce najdete matici sousednosti grafu z prvního obrázku. seznam sousedů je obvykle tvořen dvěma poli: polem sousedů S[1...M]obsahujícímpostupněčíslavšechvrcholů, dokterýchvedehranazvrcholu1,pakzvrcholu2atd., apolemzačátků Z[1...N],vněmžseprokaždývrchol dozvíme začátek odpovídajícího úseku v poli S. Pokud navícdo Z[N+1]uložíme M+1,budeplatit,žesousedévrcholu ijsouuloženivs[z[i]],..., S[Z[i+1] 1]. Tato reprezentace má tu výhodu, že zabírá pouze prostor O(N+ M)asousedykaždéhovrcholumámepěkně pohromaděanemusímejehledat.prografz1.obrázku: i S[i] i Z[i] Ê ÔÖ Þ ÒØ Ö Ù ÞÒ Ñ Ñ ÓÙ

5 půlhranami tato reprezentace se používá tehdy, pokud potřebujeme během výpočtu graf složitě upravovat. Je univerzální, ale dost pracná na naprogramování. Spočívá vtom,žesikaždouhranuuložímejakodvěpůlhrany (začátek a konec hrany), každý vrchol bude obsahovat spojové seznamy přicházejících a odcházejících půlhran a každá půlhrana bude ukazovat na svou druhou polovici. V následujících receptech budeme vždy používat seznamy sousedů,poli SbudemeříkatSousedi,poli ZZacatkyanadeklarujeme si je takto: var N, M: Integer; { Počet vrcholůahran } Zacatky: array[1..maxn+1] of Integer; Sousedi: array[1..maxm] of Integer; Prohledávání do hloubky Naše povídání o grafových algoritmech začneme dvěma základními způsoby procházení grafem. K tomu budeme potřebovat dvě podobné jednoduché datové struktury: Fronta je konečná posloupnost prvků, která má označený začátek akonec.kdyždonípřidávámenovýprvek,přidámehona konec posloupnosti. Když z ní prvek odebíráme, odebereme ten na začátku. Proto se tato struktura anglicky nazývá firstin,firstout,zkráceněfifo.zásobníkjetakékonečná posloupnost prvků se začátkem a koncem, ale prvky přidáváme a odebíráme z konce zásobníku. Anglický název je (překvapivě) last in, first out, čili LIFO. nejsou označeny,ahnedje značíme.protosekaždývrchol může na zásobníku objevit nejvýše jednou, a jelikož ve 2. kroku pokaždé odebereme jeden vrchol ze zásobníku, musí vrcholy někdy(konkrétně po nejvýše N opakováních cyklu) dojít. Ve 3. kroku probereme každou hranu grafu nejvýše dvakrát(v každém směru jednou). Časová složitost celéhoalgoritmujetedylineárnívpočtuvrcholů Napočtuhran M,tedy O(N+ M).Paměťovásložitostjestejná, protože si musíme hrany a vrcholy pamatovat. Prohledávání do hloubky implementujeme nejsnáze rekurzivní funkcí. Jako zásobník v tom případě používáme přímo zásobník programu, kde si program ukládá návratové adresy funkcí. Může to vypadat třeba následovně: var Oznacen: array[1..maxn] of Boolean; procedure Projdi(V: Integer); var I: Integer; Oznacen[V]:= True; if not Oznacen[Sousedi[I]] then Projdi(Sousedi[I]); Rozdělit neorientovaný graf na komponenty souvislosti je pak už jednoduché. Projdeme postupně všechny vrcholy grafuapokudnejsouvžádnézdosudoznačenýchkomponent grafu, přidáme novou komponentu tak, že graf z tohoto vrcholu prohledáme do hloubky. Vrcholy značíme přímo číslem komponenty, do které patří. Protože prohledáváme do hloubky několik oddělených částí grafu, každou se složitostí O(N i + M i ),kde N i a M i jepočetvrcholůahrankomponenty,vyjdedohromadysložitost O(N+ M).Nicnového si ukládat nemusíme, a proto je paměťová složitost stále O(N+ M). var Komponenta: array[1..maxn] of Integer; NovaKomponenta: Integer; Algoritmus prohledávání grafu do hloubky: 1.Nazačátkumámevzásobníkupouzevstupnívrchol w. Dálesiukaždéhovrcholu vpamatujemeznačku z v,která říká, zda jsme vrchol již navštívili. Vstupní vrchol je označený, ostatní vrcholy nikoliv. 2. Odebereme vrchol ze zásobníku, nazvěme ho u. 3.Každýneoznačenývrchol,dokteréhovedehranazu, přidáme na zásobník a označíme. 4.Kroky2a3opakujeme,dokudnenízásobníkprázdný. Na konci algoritmu budou označeny všechny vrcholy dosažitelné z vrcholu w, tedy v případě neorientovaného grafu celá komponenta souvislosti obsahující w. To můžeme snadno dokázat sporem: Předpokládáme, že existuje vrchol x, který neníoznačen,aledokteréhovedecestazw.pokudjetakových vrcholů více, vezmeme si ten nejbližší k w. Označme si ypředchůdcevrcholu xnanejkratšícestězw; yjeurčitě označený(jinak by x nebyl nejbližší neoznačený). Vrchol y se tedy musel někdy objevit na zásobníku, tím pádem jsme hotakémuselizezásobníkuodebratavkroku3označit všechnyjehosousedy,tedyivrchol x,cožjeovšemspor. To, že algoritmus někdy skončí, nahlédneme snadno: v kroku 3 na zásobník přidáváme pouze vrcholy, které dosud 5 procedure Projdi(V: Integer); var I: Integer; Komponenta[V]:= NovaKomponenta; if Komponenta[Sousedi[I]] = -1 then Projdi(Sousedi[I]); var I: Integer; for I := 1 to N do Komponenta[I]:= -1; NovaKomponenta:= 1; for I := 1 to N do if Komponenta[I] = -1 then Projdi(I); Inc(NovaKomponenta); end. Průběh prohledávání grafu do hloubky můžeme znázornit stromem(říká se mu DFS strom). Z počátečního vrcholu w učiníme kořen. Pak budeme graf procházet do hloubky a vrcholy zakreslovat jako syny vrcholů, ze kterých jsme přišli.

6 Syny každého vrcholu si uspořádáme v pořadí, v němž jsme je navštívili; tomuto pořadí budeme říkat zleva doprava a takéhotakbudemekreslit.hranámmeziotciasynybudeme říkat stromové hrany. Protože jsme do žádného vrcholu nešli dvakrát, budou opravdu tvořit strom. Hrany, které vedou do již navštívených vrcholů na cestě, kterou jsme přišli z kořene, nazveme zpětné hrany. Dopředné hrany vedou naopak z vrcholu blíže kořeni do už označeného vrcholu dále od kořene. A konečně příčné hrany vedou mezi dvěma různými podstromy grafu. Všimněte si, že při prohledávání neorientovaného grafu objevíme každou hranu dvakrát: buďto poprvé jako stromovou apodruhéjakozpětnou,anebojednoujakozpětnouapodruhé jako dopřednou. Příčné hrany se objevit nemohou pokudbypříčnáhranavedladoprava,vedlabydodosud neoznačeného vrcholu, takže by se prohledávání vydalo touto hranou a nevznikl by oddělený podstrom; doleva rovněž vést nemůže: představme si stav prohledávání v okamžiku, kdy jsme opouštěli levý vrchol této hrany. Tehdy by naše hranamuselabýtpříčnouvedoucídoprava,aleotéužvíme, že neexistuje. Prohledávání do hloubky lze tedy také využít k nalezení kostry neorientovaného grafu, což je strom, který jsme prošli. Rovnou při tom také zjistíme, zda graf neobsahuje cyklus: to poznáme tak, že nalezneme zpětnou hranu různou odtéstromové,ponížjsmedovrcholupřišli. Pro orientované grafy je situace opět trochu složitější: stromové a dopředné hrany jsou orientované vždy ve stromě shora dolů, zpětné zdola nahoru a příčné hrany mohou existovat, ovšem vždy vedou zprava doleva, čili pouze do podstromů, které jsme již prošli(nahlédneme opět stejně). Prohledávání do šířky stromová zpětná dopředná příčná ËØÖÓÑ ÔÖÓ Ð Ú Ò Ó ÐÓÙ Ý ØÝÔÝ Ö Ò Prohledávání do šířky je založené na podobné myšlence jako prohledávání do hloubky, pouze místo zásobníku používá frontu: 1.Nazačátkumámevefrontěpouzejedenprvek,ato zadanývrchol w.dálesiukaždéhovrcholu xpamatujeme číslo H[x]. Všechny vrcholy budou mít na začátku H[x]= 1,jen H[w]=0. 2. Odebereme vrchol z fronty, označme ho u. 3.Každývrchol v, do kteréhovede hranazuajeho H[v] = 1,přidámedofrontyanastavímejeho H[v] na H[u]+1. 4.Kroky2a3opakujeme,dokudnenífrontaprázdná. Podobně jako u prohledávání do hloubky jsme se dostali právědotěchvrcholů,dokterýchvedecestazw(aoznačili jsme je nezápornými čísly). Rovněž je každému vrcholu přiřazeno nezáporné číslo maximálně jednou. To vše se dokazuje podobně, jako jsme dokázali správnost prohledávání do hloubky. Vrcholy se stejným číslem tvoří ve frontě jeden souvislý celek, protože nejprve odebereme z fronty všechny vrcholy 6 sčíslem n,nežzačnemeodebíratvrcholysčíslem n+1. Navíc platí, že H[v] udává délku nejkratší cesty z vrcholu w do v. Že neexistuje kratší cesta, dokážeme sporem: Pokud existuje nějaký vrchol v, pro který H[v] neodpovídá délce nejkratšícestyzwdo v,čilivzdálenosti D[v],vyberemesi ztakových vto,jehož D[v]jenejmenší.Paknaleznemenejkratšícestuzwdo vajejípředposlednívrchol z.vrchol zje bližšínež v,takžepronějužmusíbýt D[z]=H[z].Ovšem kdyžjsmezfrontyvrchol zodebírali,muselijsmeobjeviti jeho souseda v, který ještě nemohl být označený, tudíž jsme mumuselipřidělit H[v]=H[z]+1=D[v],atojespor. Prohledávání do šířky má časovou složitost taktéž lineární spočtemhranavrcholů.nakaždouhranusetaképtáme dvakrát. Fronta má lineární velikost k počtu vrcholů, takže jsme si oproti prohledávání do hloubky nepohoršili a i paměťová složitost je O(N + M). Algoritmus implementujeme nejsnáze cyklem, který bude pracovat s vrcholy v poli představujícím frontu. var Fronta, H: array[1..maxn] of Integer; I, V, Prvni, Posledni: Integer; PocatecniVrchol: Integer; for I := 1 to N do H[I] := -1; Prvni:= 1; Posledni:= 1; Fronta[Prvni]:= PocatecniVrchol; H[PocatecniVrchol]:= 0; repeat V := Fronta[Prvni]; if H[Sousedi[I]] < 0 then H[Sousedi[I]]:= H[V]+1; Inc(Posledni); Fronta[Posledni]:= Sousedi[I]; Inc(Prvni); until Prvni > Posledni; { Fronta je prázdná} end. Prohledávání do šířky lze také použít na hledání komponent souvislosti a hledání kostry grafu. Topologické uspořádání Teď si vysvětlíme, co je topologické uspořádání grafu. Máme orientovaný graf G s N vrcholy a chceme očíslovat vrcholy čísly1až Ntak,abyvšechnyhranyvedlyzvrcholusvětšímčíslemdovrcholusmenšímčíslem,tedyabyprokaždou hranu e=(v i, v j )bylo i > j.představmesitojakosrovnánívrcholůgrafunapřímkutak,aby šipky vedlypouze zprava doleva. Nejprve si ukážeme, že pro žádný orientovaný graf, který obsahuje cyklus, nelze takovéto topologické pořadí vytvořit.označmevrcholycyklu v 1,..., v n,takžehranavede zvrcholu v i dovrcholu v i 1,resp.zv 1 do v n.pakvrchol v 2 musídostatvyššíčíslonežvrchol v 1, v 3 než v 2,..., v n než v n 1.Alevrchol v 1 musímítzároveňvyššíčíslonež v n, což nelze splnit. Cyklus je ovšem to jediné, co muže existenci topologického uspořádání zabránit. Libovolný acyklický graf lze uspořádat následujícím algoritmem:

7 1. Na začátku máme orientovaný graf G a proměnnou p=1. 2. Najdeme takový vrchol v, ze kterého nevede žádná hrana(budememuříkatstok).pokudvgrafužádnýstok není, výpočet končí, protože jsme našli cyklus. 3.Odeberemezgrafuvrchol vavšechnyhrany,kterédo něj vedou. 4. Přiřadíme vrcholu v číslo p. 5. Proměnnou p zvýšíme o 1. 6.Opakujemekroky2až5,dokudgrafobsahujealespoň jeden vrchol. Proč tento algoritmus funguje? Pokud v grafu nalezneme stok, můžeme mu určitě přiřadit číslo menší než všem ostatnímvrcholům,protožepřekážetbynámvtommohlypouzehranyvedoucízestokuvenatyneexistují.jakmilestok očíslujeme, můžeme jej z grafu odstranit a pokračovat číslováním ostatních vrcholů. Tento postup musí někdy skončit, jelikož v grafu je pouze konečně mnoho vrcholů. Zbývá si uvědomit, že v neprázdném grafu, který neobsahuje cyklus, vždy existuje alespoň jeden stok: Vezměme libovolnývrchol v 1.Pokudznějvedenějakáhrana,pokračujme ponídonějakéhovrcholu v 2,znějdo v 3 atd.cosepřitom může stát? Dostanemesedovrcholu v i,zekteréhonevedežádná hrana. Vyhráli jsme, máme stok. Narazímena v i,vekterémjsmeužjednoubyli.tobyale znamenalo, že graf obsahuje cyklus, což, jak víme, není pravda. Budemeobjevovatstáleanovéanovévrcholy.Vkonečném grafu nemožno. Algoritmus můžeme navíc snadno upravit tak, aby netratil příliščasuhledánímvrcholů,znichžnicnevede stačísi takové vrcholy pamatovat ve frontě a kdykoliv nějaký takový vrchol odstraňujeme, zkontrolovat si, zda jsme nějakému jinému vrcholu nezrušili poslední hranu, která z něj vedla, a pokud ano, přidat takový vrchol na konec fronty. Celé topologické třídění pak zvládneme v čase O(N + M). Jiná možnost je prohledat graf do hloubky a všimnout si, žepořadí,vekterémjsmesezvrcholůvraceli,jeprávětopologické pořadí. Pokud zrovna opouštíme nějaký vrchol a číslujeme ho dalším číslem v pořadí, rozmysleme si, jakédruhyhranznějmohouvést:stromovánebodopředná hrana vede do vrcholu, kterému jsme již přiřadili nižší číslo, zpětná existovat nemůže(v grafu by byl cyklus) a příčné hrany vedou pouze zprava doleva, takže také do již očíslovanýchvrcholů.časovásložitostjeopět O(N+ M). var Ocislovani: array[1..maxn] of Integer; Posledni: Integer; I: Integer; procedure Projdi(V: Integer); var I: Integer; Ocislovani[V]:= 0; { zatím V jen označíme} if Ocislovani[Sousedi[I]] = -1 then Projdi(Sousedi[I]); Inc(Posledni); Ocislovani[V]:= Posledni; 7 for I := 1 to N do Ocislovani[I]:= -1; Posledni:= 0; for I := 1 to N do if Ocislovani[I] = -1 then Projdi(I); end. Hranová a vrcholová 2-souvislost Nyní se podíváme na trochu komplikovanější formu souvislosti. Říkáme, že neorientovaný graf je hranově 2-souvislý, když platí, že: máalespoň3vrcholy, je souvislý, zůstane souvislý po odebrání libovolné hrany. Hranu, jejíž odebrání by způsobilo zvýšení počtu komponent souvislosti grafu, nazýváme most. Na hledání mostů nám poslouží opět upravené prohledávánídohloubkyadfsstrom.všimněmesi,žemostem může být jedině stromová hrana každá jiná hrana totiž leží na nějaké kružnici. Odebráním mostu se graf rozpadne načástobsahujícíkořendfsstromuapodstrom visící pod touto hranou. Jediné, co tomu může zabránit, je existence nějaké další hrany mezi podstromem a hlavní částí, což musí být zpětná hrana, navíc taková, která není jenom stromovou hranou viděnou z druhé strany. Takovým hranám budeme říkat ryzí zpětné hrany. Proto si pro každý vrchol spočítáme hladinu, ve které se nachází(kořenjenahladině0,jehosynovénahladině1, jejichsynové2,...).dálesiprokaždývrchol vspočítáme, do jaké nejvyšší hladiny(s nejmenším číslem) vedou ryzí zpětnéhranyzpodstromuskořenem v.tomůžemeudělat přímo při procházení do hloubky, protože než se vrátíme z v, projdeme celý podstrom pod v. Pokud všechny zpětné hranyvedoudohladinystejnénebovětšínežté,nakteré je v,pakodebránímhranyvedoucído vzjehootcevzniknou dvě komponenty souvislosti, čili tato hrana je mostem. V opačném případě jsme nalezli kružnici, na níž tato hrana leží, takže to most být nemůže. Výjimku tvoří kořen, který žádnéhootcenemáanemusímeseonějprotostarat. Algoritmus je tedy pouhou modifikací procházení do hloubkyamáistejnoučasovouapaměťovousložitost O(N+M). Zde jsou důležité části programu: var Hladina, Spojeno: array[1..maxn] of Integer; DvojSouvisle: Boolean; I: Integer; procedure Projdi(V, NovaHladina: Integer); var I, W: Integer; Hladina[V]:= NovaHladina; Spojeno[V]:= Hladina[V]; W := Sousedi[I]; if Hladina[W]= -1 then {stromováhrana} Projdi(W, NovaHladina + 1); if Spojeno[W] < Spojeno[V] then Spojeno[V]:= Spojeno[W];

8 if Spojeno[W] > Hladina[V] then DvojSouvisle:= False;{mámemost } end else { zpětnánebo dopřednáhrana } if (Hladina[W] < NovaHladina-1) and (Hladina[W] < Spojeno[V]) then Spojeno[V]:= Hladina[W]; for I := 1 to N do Hladina[I]:= -1; DvojSouvisle:= True; Projdi(1, 0); end. Další formou souvislosti je vrcholová souvislost. Graf je vrcholově 2-souvislý, právě když: máalespoň3vrcholy, je souvislý, zůstane souvislý po odebrání libovolného vrcholu. Artikulace je takový vrchol, který když odebereme, zvýší se počet komponent souvislosti grafu. Algoritmus pro zjištění vrcholové 2-souvislosti grafu je velmi podobný algoritmu na zjišťování hranové 2-souvislosti. Jen si musíme uvědomit, že odebíráme celý vrchol. Ze stromu procházení do hloubky může odebráním vrcholu vzniknout až několik podstromů, které všechny musí být spojeny zpětnou hranou s hlavním stromem. Proto musí zpětné hranyzpodstromuurčenéhovrcholem vvéstažnadvrchol v. Speciálně pro kořen nám vychází, že může mít pouze jednohosyna,jinakbychomhomohliodebratavytvořittakdvě nebo více komponent souvislosti. Algoritmus se od hledání hranové 2-souvislosti liší jedinou změnou ostré nerovnosti na neostrou, sami zkuste najít, které nerovnosti. Dnešní menu Vám servírovali Martin Mareš, David Matoušek a Petr Škoda Tips&Tricks:ZletákůKSPsimůžetesložitknížečku 8

Grafy. Obyčejný graf. Orientovaný graf. Ohodnocený graf. Na filmovém festivalu se sešlo šest tisíc lidí, některé

Grafy. Obyčejný graf. Orientovaný graf. Ohodnocený graf. Na filmovém festivalu se sešlo šest tisíc lidí, některé Co mají společného následující úlohy? Grafy Na filmovém festivalu se sešlo šest tisíc lidí, některé dvojice se znají, některé ne. Jak najít největší skupinu lidí, ve které se všichni znají? Podnikatel

Více

Milí řešitelé! Korespondenční seminář z programování KSVIMFFUK Malostranské náměstí 25 Praha1,11800

Milí řešitelé! Korespondenční seminář z programování KSVIMFFUK Malostranské náměstí 25 Praha1,11800 Milí řešitelé! Poněkud s předstihem dostáváte do rukou zadání třetí série našeho semináře. S ním dostáváte taktéž opravená řešení série první, takže špinavé a podlé fígly, kteréseznichnaučíte,můžetepoužítještěpřiřešenísériedruhé:

Více

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

5 Orientované grafy, Toky v sítích Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

Milí řešitelé! Zadání třetí série sedmnáctého ročníku KSP

Milí řešitelé! Zadání třetí série sedmnáctého ročníku KSP Milí řešitelé! Poněkud s předstihem dostáváte do rukou zadání třetí série našeho semináře. S ním dostáváte taktéž opravená řešení série první, takže špinavé a podlé fígly, které se z nich naučíte, můžete

Více

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

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly. Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?

Více

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být

Více

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

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Úvod do teorie grafů

Úvod do teorie grafů Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí

Více

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

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

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

Základní pojmy teorie grafů [Graph theory] Část I Základní pojmy teorie grafů [Graph theory] V matematice grafem obvykle rozumíme grafické znázornění funkční závislosti. Pro tento předmět je však podstatnější pohled jiný. V teorii grafů rozumíme

Více

3. Prohledávání grafů

3. Prohledávání grafů 3. Prohledávání grafů Prohledání do šířky Breadth-First Search BFS Jde o grafový algoritmus, který postupně prochází všechny vrcholy v dané komponentě souvislosti. Algoritmus nejprve projde všechny sousedy

Více

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

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem

Více

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

Základy informatiky. Teorie grafů. Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Základy informatiky Teorie grafů Zpracoval: Pavel Děrgel Úprava: Daniela Szturcová Obsah přednášky Barvení mapy Teorie grafů Definice Uzly a hrany Typy grafů Cesty, cykly, souvislost grafů Barvení mapy

Více

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

Grafy. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta. 6 RNDr., Ph.D. Katedra didaktiky matematiky Univerzita Karlova v Praze Matematicko-fyzikální fakulta petra.surynkova@mff.cuni.cz http://surynkova.info množina vrcholů a množina hran hrana vždy spojuje

Více

Korespondenční Seminář z Programování.

Korespondenční Seminář z Programování. Korespondenční Seminář z Programování Milí chlapci a děvčata, jako každý rok je tu opět Korespondenční Seminář z Programování. Že jste o něm ještě neslyšeli? V tom případě si zkuste odpovědět na následující

Více

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

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

nejjednodušší konstantní funkce). Do O se píše tzv. horní odhad, tedy nikdy to nemůže být

nejjednodušší konstantní funkce). Do O se píše tzv. horní odhad, tedy nikdy to nemůže být jen prohodíme x s y). Co z toho víme: x = x d y = y d z = x t y pro nějaká x, y, t. Číslo z tedy můžeme upravovat takto: z = x ty = x d ty d = (x ty )d. Takže z je také dělitelné číslem d. Nechť naopak

Více

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

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

Více

Vzdálenost uzlů v neorientovaném grafu

Vzdálenost uzlů v neorientovaném grafu Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující

Více

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.

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. 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

Více

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

Algoritmus pro hledání nejkratší cesty orientovaným grafem 1.1 Úvod Algoritmus pro hledání nejkratší cesty orientovaným grafem Naprogramoval jsem v Matlabu funkci, která dokáže určit nejkratší cestu v orientovaném grafu mezi libovolnými dvěma vrcholy. Nastudoval

Více

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

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13. Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy

Více

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

H {{u, v} : u,v U u v } Obyčejný graf Obyčejný graf je dvojice G= U, H, kde U je konečná množina uzlů (vrcholů) a H {{u, v} : u,v U u v } je (konečná) množina hran. O hraně h={u, v} říkáme, že je incidentní s uzly u a v nebo

Více

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

Hledáme efektivní řešení úloh na grafu Hledáme efektivní řešení úloh na grafu Mějme dán graf následující úlohy: G = ( V, E), chceme algoritmicky vyřešit Je daný vrchol t dosažitelný z vrcholu s? Pokud ano, jaká nejkratší cesta tyto vrcholy

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

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

Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant Základy informatiky 07 Teorie grafů Kačmařík/Szturcová/Děrgel/Rapant Obsah přednášky barvení mapy teorie grafů definice uzly a hrany typy grafů cesty, cykly, souvislost grafů Barvení mapy Kolik barev je

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento

Více

Algoritmy na ohodnoceném grafu

Algoritmy na ohodnoceném grafu Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2015/2016 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2015/2016 1 / 18 Základní syntax Jazyk Výroková logika je logikou

Více

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy TGH02 - teorie grafů, základní pojmy Jan Březina Technical University of Liberec 28. února 2017 Metainformace materiály: jan.brezina.matfyz.cz/vyuka/tgh (./materialy/crls8.pdf - Introduction to algorithms)

Více

Jan Březina. 7. března 2017

Jan Březina. 7. března 2017 TGH03 - stromy, ukládání grafů Jan Březina Technical University of Liberec 7. března 2017 Kružnice - C n V = {1, 2,..., n} E = {{1, 2}, {2, 3},..., {i, i + 1},..., {n 1, n}, {n, 1}} Cesta - P n V = {1,

Více

TEORIE GRAFŮ TEORIE GRAFŮ 1

TEORIE GRAFŮ TEORIE GRAFŮ 1 TEORIE GRAFŮ 1 TEORIE GRAFŮ Přednášející: RNDr. Jiří Taufer, CSc. Fakulta dopravní ČVUT v Praze, letní semestr 1998/99 Zpracoval: Radim Perkner, tamtéž, v květnu 1999 ZÁKLADNÍ POJMY Říkáme, že je dán prostý

Více

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2/2, Lekce Evropský sociální fond Praha & EU: Investujeme

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

Více

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

Kostry. 9. týden. Grafy. Marie Demlová (úpravy Matěj Dostál) 16. dubna 2019 Grafy 16. dubna 2019 Tvrzení. Je dán graf G, pak následující je ekvivalentní. 1 G je strom. 2 Graf G nemá kružnice a přidáme-li ke grafu libovolnou hranu, uzavřeme přesně jednu kružnici. 3 Graf G je souvislý

Více

4 Pojem grafu, ve zkratce

4 Pojem grafu, ve zkratce Petr Hliněný, FI MU Brno, 2014 1 / 24 FI: IB000: Pojem grafu 4 Pojem grafu, ve zkratce Třebaže grafy jsou jen jednou z mnoha struktur v matematice a vlastně pouze speciálním případem binárních relací,

Více

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

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze PROHLEDÁVÁNÍ GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 4 Evropský sociální fond Praha & EU: Investujeme do

Více

1. Toky, řezy a Fordův-Fulkersonův algoritmus

1. Toky, řezy a Fordův-Fulkersonův algoritmus 1. Toky, řezy a Fordův-Fulkersonův algoritmus V této kapitole nadefinujeme toky v sítích, odvodíme základní věty o nich a také Fordův-Fulkersonův algoritmus pro hledání maximálního toku. Také ukážeme,

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2013/2014 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2013/2014 1 / 20 Základní syntax Jazyk Výroková logika je logikou

Více

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

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT PEF ČZU Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT Okruhy SZB č. 5 Zdroje: Demel, J., Operační výzkum Jablonský J., Operační výzkum Šubrt, T., Langrová, P., Projektové řízení I. a různá internetová

Více

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

Operační výzkum. Síťová analýza. Metoda CPM. Operační výzkum Síťová analýza. Metoda CPM. Operační program Vzdělávání pro konkurenceschopnost Název projektu: Inovace magisterského studijního programu Fakulty ekonomiky a managementu Registrační číslo

Více

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

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

Více

NP-úplnost problému SAT

NP-úplnost problému SAT Problém SAT je definován následovně: SAT(splnitelnost booleovských formulí) Vstup: Booleovská formule ϕ. Otázka: Je ϕ splnitelná? Příklad: Formule ϕ 1 =x 1 ( x 2 x 3 )jesplnitelná: např.přiohodnocení ν,kde[x

Více

GRAFY A GRAFOVÉ ALGORITMY

GRAFY A GRAFOVÉ ALGORITMY KATEDRA INFORMATIKY PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITA PALACKÉHO GRAFY A GRAFOVÉ ALGORITMY ARNOŠT VEČERKA VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ

Více

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy TGH02 - teorie grafů, základní pojmy Jan Březina Technical University of Liberec 31. března 2015 Počátek teorie grafů Leonard Euler (1707 1783) 1735 pobyt v Královci (Prusko), dnes Kaliningrad (Rusko)

Více

1 Linearní prostory nad komplexními čísly

1 Linearní prostory nad komplexními čísly 1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)

Více

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

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka

Více

07 Základní pojmy teorie grafů

07 Základní pojmy teorie grafů 07 Základní pojmy teorie grafů (definice grafu, vlastnosti grafu, charakteristiky uzlů, ohodnocené grafy) Definice grafu množina objektů, mezi kterými existují určité vazby spojující tyto objekty. Uspořádaná

Více

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Každá úloha je hodnocena maximálně 25 body. Všechny své odpovědi zdůvodněte! 1. Postavte na stůl do řady vedle

Více

10 Přednáška ze

10 Přednáška ze 10 Přednáška ze 17. 12. 2003 Věta: G = (V, E) lze nakreslit jedním uzavřeným tahem G je souvislý a má všechny stupně sudé. Důkaz G je souvislý. Necht v je libovolný vrchol v G. A mějme uzavřený eurelovský

Více

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase

PQ-stromy a rozpoznávání intervalových grafů v lineárním čase -stromy a rozpoznávání intervalových grafů v lineárním čase ermutace s předepsanými intervaly Označme [n] množinu {1, 2,..., n}. Mějme permutaci π = π 1, π 2,..., π n množiny [n]. Řekneme, že množina S

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i,

Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i, [161014-1204 ] 11 2.1.35 Konstrukce relace. Postupně konstruujeme na množině všech stavů Q relace i, kde i = 0, 1,..., takto: p 0 q právě tehdy, když bud p, q F nebo p, q F. Dokud i+1 i konstruujeme p

Více

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

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet. 4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a

Více

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

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

TGH02 - teorie grafů, základní pojmy

TGH02 - teorie grafů, základní pojmy TGH02 - teorie grafů, základní pojmy Jan Březina Technical University of Liberec 5. března 2013 Počátek teorie grafů Leonard Euler (1707 1783) 1735 pobyt v Královci (Prusko), dnes Kaliningrad (Rusko) Úloha:

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_145_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Použití dalších heuristik

Použití dalších heuristik Použití dalších heuristik zkracování cesty při FIND-SET UNION podle hodností Datové struktury... p[x] - předchůdce uzlu x MAKE-SET(x) p[x] := x hod[x] := 0 hod[x] - hodnost (aprox. výšky) UNION(x,y) LINK(FIND-SET(x),

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

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

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66 Teorie grafů Petr Hanuš (Píta) BR Solutions - Orličky 2010 23.2. 27.2.2010 Píta (Orličky 2010) Teorie grafů 23.2. 27.2.2010 1 / 66 Pojem grafu Graf je abstraktní pojem matematiky a informatiky užitečný

Více

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

Diskrétní matematika. DiM /01, zimní semestr 2018/2019 Diskrétní matematika Petr Kovář petr.kovar@vsb.cz Vysoká škola báňská Technická univerzita Ostrava DiM 470-2301/01, zimní semestr 2018/2019 O tomto souboru Tento soubor je zamýšlen především jako pomůcka

Více

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

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 Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

Vrcholová barevnost grafu

Vrcholová barevnost grafu Vrcholová barevnost grafu Definice: Necht G = (V, E) je obyčejný graf a k N. Zobrazení φ : V {1, 2,..., k} nazýváme k-vrcholovým obarvením grafu G. Pokud φ(u) φ(v) pro každou hranu {u, v} E, nazveme k-vrcholové

Více

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

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom, Stromové rozklady Zdeněk Dvořák 25. října 2017 Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom, β je funkce přiřazující každému vrcholu T podmnožinu vrcholů v G, pro každé

Více

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014

Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 2014 Zadání a řešení testu z matematiky a zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia od podzimu 204 Zpráva o výsledcích přijímacího řízení do magisterského navazujícího studia

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

Úvod do informatiky. Miroslav Kolařík

Úvod do informatiky. Miroslav Kolařík Úvod do informatiky přednáška desátá Miroslav Kolařík Zpracováno dle R. Bělohlávek, V. Vychodil: Diskrétní matematika 2, http://phoenix.inf.upol.cz/esf/ucebni/dm2.pdf P. Martinek: Základy teoretické informatiky,

Více

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39 Algoritmy Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna 2018 1/ 39 Algoritmy Příklad: Popis algoritmu pomocí pseudokódu: Algoritmus 1: Algoritmus pro nalezení největšího prvku v poli 1 Find-Max(A,n):

Více

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy: Opakování středoškolské matematiky Slovo úvodem: Tato pomůcka je určena zejména těm studentům presenčního i kombinovaného studia na VŠFS, kteří na středních školách neprošli dostatečnou průpravou z matematiky

Více

Binární soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

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

Výroková a predikátová logika - III Výroková a predikátová logika - III Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - III ZS 2017/2018 1 / 16 2-SAT 2-SAT Výrok je v k-cnf, je-li v CNF a

Více

Ú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ů

Ú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ů Stavový prostor a jeho prohledávání SP = formalismus k obecnějšímu uchopení a vymezení problému, který spočívá v nalezení posloupnosti akcí vedoucích od počátečního stavu úlohy (zadání) k požadovanému

Více

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

Matematika III 10. přednáška Stromy a kostry Matematika III 10. přednáška Stromy a kostry Michal Bulant Masarykova univerzita Fakulta informatiky 20. 11. 2007 Obsah přednášky 1 Izomorfismy stromů 2 Kostra grafu 3 Minimální kostra Doporučené zdroje

Více

1. D Y N A M I C K É DAT O V É STRUKTUR Y

1. D Y N A M I C K É DAT O V É STRUKTUR Y 1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové

Více

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

4EK311 Operační výzkum. 5. Teorie grafů 4EK311 Operační výzkum 5. Teorie grafů 5. Teorie grafů definice grafu Graf G = uspořádaná dvojice (V, E), kde V označuje množinu n uzlů u 1, u 2,, u n (u i, i = 1, 2,, n) a E označuje množinu hran h ij,

Více

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

Graf. Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd. Graf 2 0 3 1 4 5 Uzly Lokality, servery Osoby fyzické i právní Informatické objekty... atd. Hrany Cesty, propojení Vztahy Informatické závislosti... atd. Běžné reprezentace grafu Uzly = indexy Stupně uzlů

Více

bfs, dfs, fronta, zásobník

bfs, dfs, fronta, zásobník bfs, dfs, fronta, zásobník Petr Ryšavý 25. září 2018 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší cesty, plánování cest. Prohledávání

Více

Matice sousednosti NG

Matice sousednosti NG Matice sousednosti NG V = [ v ij ] celočíselná čtvercová matice řádu U v ij = ρ -1 ( [u i, u j ] )... tedy počet hran mezi u i a u j?jaké vlastnosti má matice sousednosti?? Smyčky, rovnoběžné hrany? V

Více

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

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

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší

Více

Minimalizace KA - Úvod

Minimalizace KA - Úvod Minimalizace KA - Úvod Tyto dva KA A,A2 jsou jazykově ekvivalentní, tzn. že rozpoznávají tentýž jazyk. L(A) = L(A2) Názorně lze vidět, že automat A2 má menší počet stavů než A, tudíž našim cílem bude ukázat

Více

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 26. března 2013 Motivační problémy Silniční sít reprezentovaná grafem. Najdi nejkratší/nejrychlejší cestu z místa A do místa

Více

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi

Více

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu http://akademie.ldf.mendelu.cz/cz (reg. č. CZ.1.07/2.2.00/28.

fakulty MENDELU v Brně (LDF) s ohledem na disciplíny společného základu http://akademie.ldf.mendelu.cz/cz (reg. č. CZ.1.07/2.2.00/28. Základy lineárního programování Vyšší matematika, Inženýrská matematika LDF MENDELU Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF) s ohledem

Více

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti Kapitola 5 Vektorové prostory V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti operací sčítání a násobení

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

NPRG030 Programování I, 2018/19 1 / :03:07

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

Více

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

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

Výroková a predikátová logika - II Výroková a predikátová logika - II Petr Gregor KTIML MFF UK ZS 2017/2018 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - II ZS 2017/2018 1 / 17 Předběžnosti Základní pojmy n-ární relace a funkce

Více

TGH06 - Hledání nejkratší cesty

TGH06 - Hledání nejkratší cesty TGH06 - Hledání nejkratší cesty Jan Březina Technical University of Liberec 31. března 2015 Motivační problémy Silniční sít reprezentovaná grafem. Ohodnocené hrany - délky silnic. Najdi nejkratší/nejrychlejší

Více