Milí řešitelé! Potrhlý syslík 6 bodů
|
|
- Aneta Vaňková
- před 5 lety
- Počet zobrazení:
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é
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
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é:
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
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
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ý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?
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
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é
Ú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í
Ř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
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
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
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
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
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
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í
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í
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
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í
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í
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
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
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
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
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
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
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
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
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ý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
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)
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,
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ý
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
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
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ý
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í,
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
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,
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ší
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ý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
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á
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
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í
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
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É
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)
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)
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
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á
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
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ý
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
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
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
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
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
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:
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
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
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 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
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ší
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
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),
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
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ý
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
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ý
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é
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é
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
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
Ú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,
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):
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
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ý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
Ú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
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
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é
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,
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ů
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í
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
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
Č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á
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ší
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
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
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
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 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í
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
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í
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á??
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ý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
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ší