Milí řešitelé a řešitelky!
|
|
- Eduard Pešan
- před 9 lety
- Počet zobrazení:
Transkript
1 Milí řešitelé a řešitelky! Zdravímevšechny,kteřítosnámivydrželiaždotřetísérie.Vánocejsouzadveřmi,atak jsme si pro vás připravili malou nadílku. Dejte si lžíci bramborového salátu, kousněte si do kapranebosialespoňuždibnětekousekvanilkovéhorohlíčkuaschutísepusťtedočtení... Vaše řešení třetí série budeme dychtivě očekávat do pondělí 19. ledna Řešení můžete odevzdávat elektronicky na nebo klasickou poštou na známou adresu: 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 diskutovat můžete na fóru a záludné dotazy organizátorům lze zasílat em na adresu ksp@mff.cuni.cz. Dnes sáhneme do trochu jiného soudku. Po dvou vydařených reportážích jsme se rozhodli zařadit trochu oddychovějšítéma.opárřádkůnížesemůžetezakousnoutdokrátké sci-fi povídky s nádechem cyberpunku, kterou pro vás připravilmartin Bobřík Kruliš.Mělijsteněkdysen,kterývypadaljakoskutečný?Cokdyžtoneníjenzdáníasen začnežítvlastnímživotem...? Zasejsemměltensen. Opravdu?Akterý? pozvedldoktorobočíadálčmáral cosi do svého poznámkového bloku. Sám nevím, jestli je to vlastnost všech psychologů, nebo zda to dělá jen ten můj, aleobčasmámpocit,ževámvůbecnevěnujípozornosta snaží se jen udržovat konverzaci hloupými dotazy. Tenotěchlidech, řekljsemunaveně. Vyspělácivilizace,utopickáspolečnostatakdále.Užaninevím,kdyse minaposledyzdáloněcojiného. Azdásevámpokaždétosamé,nebopozorujetedrobné rozdíly? zeptalsesdobřehranýmvýrazemneutuchajícího zájmu. Jetopokaždé...trochujiné.Skorojakoseriál každý senjeoněčemnovém,alezároveňstáleotomsamém... Opětmineřeklnicpřevratného.Stáletysaméřečiopřepracováníastresu.Nemyslím,žebytobylzrovnamůjpřípad. JmenujiseHarold atohleje můjživot. Pracuji na pozici řadového úředníka v účetní firmě. Procházím formuláře a počítám nejrůznější statistiky. Můj život je klidný a předvídatelný. Největší vzrušení jsem zažil, když kolega z kanceláře ztratil sešívačku a celá směna úředníků mu ji pomáhalahledat.takžejakjsemříkal stímstresemse doktor trochu netrefil. Po návštěvě ordinace mě čekala práce. Celý den proběhl poklidně ostatně jako každý jiný den. Žádné vzrušení. Žádnýstres.Kancelářjsemopustilpřesněv17hodinazamířil do podzemky. Byla ošklivě přeplněná, ale takový už ježivot.stálomětozpožděnídlouhépřesnětřiminutya čtyřicet pět vteřin. Doma následovala obvyklá večerní rutina. Nakrmit rybičky,večeřeateleviznízprávynakanálu6.dělámtotakkaždý den.dopostelejsemulehlsrozečtenouknihouapomaluse ukolébal čtením. Pohlednaměstobylnádherný.Táhloseodobzorukobzoru a stříbrně lesklé výškové budovy šplhaly k nebi. Každý den vyrostla alespoň jedna nová. A mezi nimi na různých letových hladinách proplouvala vznášedla. Úchvatný pohled, Třetí série dvacátého prvního ročníku KSP 1 a přitom nic neobvyklého. Běžná denní doprava. Lidé jedou dopráce,dětidoškoly... V jedné nevýznamné budově na okraji města uvnitř velikého sálu mezitím pobíhali lidé v bílých pláštích a křičeli na sebe nesrozumitelné věci. Podobali se mravencům, kterým právě někdo šlápl do mraveniště. Shlukovali se do skupinek a vášnivě debatovali. Co chvíli se zase rozprchli do všech směrůavytvořilinovéskupinky.hluksílilasnímizoufalství pobíhajících lidí. Místnost prořízl ostrý pískavý zvuk. Všichni jako na povel utichli a obrátili se k řečnickému pultu, ke kterému právě z davu vystoupil postarší muž s plnovousem. Opatrně přejel ostatní nervózním pohledem a napjatou atmosféru ještě vylepšil váhavým odkašláním. Váženíkolegové, začalrozechvělýmhlasem, neníotom již nejmenších pochyb. Všechny naše hypotézy se potvrdily sérií nezávislých experimentů, a tak zbývá jediné rozumné vysvětlení... Nachvíliseodmlčel,abysiosušilpotzčela, a pak pokračoval: Žijeme ve snu! Celá naše civilizace byla vytvořena snem někoho jiného! Navíc nejsme schopni určit, kdytentosen Probudiljsemse.Bylyčtyřihodinyránoanaoknotiše bubnoval déšť. Poslední útržky snu pomalu zahaloval mrak zapomnění. Oči se prodíraly tmou a postupně rozeznávaly obrysy nábytku mého pokoje. Posadil jsem se na posteli a snažilseuklidnit.nešloto.uběhlaskorohodinaajástále nehybně seděl. Hlavou se mi honily nejrůznější myšlenky a paměť se snažila sen uspořádat. Únava mě přemáhala, ale strachmědrželvzhůru.nakonecměukolébaldéšťajáspal aždorána. Budíkzazvonilvečtvrtnaosm.Zrozespalostiměprobudila až studená sprcha společně s teplou kávou a dvěma croissanty. Začetl jsem se do ranních novin. Titulní stranu opět zdobil článek o nějakém vědeckém objevu. Oči byly zaměstnány čtením, ale mou mysl ovládaly vzpomínky na muževbílýchpláštích,najejichexperimentyateorie...zrozjímání mě probral pohled na hodiny. K čertu, prolétlo mi hlavou. Následovalo ještě mnoho slov. Nepěkných slov. Doprácejsemdorazilsvelkýmzpožděním.Stáloměto napomenutí nadřízeného a ostudu před všemi kolegy. První zameškání po tolika letech. Bohužel to nebyl jediný problém, který mě čekal. Má mysl se potulovala kdesi daleko. Soustředitsebyloextrémnětěžkéapráceminešlaodruky. V poledne mě můj nadřízený poslal domů, protože jsem za celé dopoledne nevyplnil jediný formulář správně. Doma ale také nebylo k vydržení. Chodil jsem nervózně posvémbytěsematam.únavamnepronásledovalaajáse
2 jí snažil unikat. Nakonec mě ale přece jen přemohla. Krátký spánek během dne nemůže uškodit. Natáhl jsem se oblečený na postel a opatrně zavřel oči. Jen krátké zdřímnutí. Jen takkrátké,abyseminicnemohlozdát... Pohled na město byl nádherný. Právě zapadalo slunce a jeho odraz se zrcadlil na lesklém povrchu budov. Vzduch se lehce tetelil a podtrhával tak atmosféru letního večera. Mámeto!Mámeto! ozvaloseodkudsi.vmalépracovně jedné bezvýznamné budovy na kraji města se rozlétly dveře. Do nich se vřítila postava mladého muže v brýlích a bílém plášti, který nad hlavou vítězoslavně mával štosem papírů. Máme co? podíval se naněj postarší muž,kterému očividně ona pracovna patřila. Přišli jsme na to, jak modifikovat memgramy! Tím můžemeposílatinformacepřímodomozkunašehospáče! Kódování memgramů 9 bodů Memgram, tedy záznam nesoucí jednu myšlenku, si můžeme představit jako mřížku obsahující 8 8 polí. Každé polemůženabývatdvouhodnot 0a1.Vědcisesnaží memgramy modifikovat, aby pomocí nich mohli přenášet své informace. Otázka je, kolik informace můžou zakódovat do jednoho memgramu. Posílání informace probíhá tak, že vědci dostanou memgram, který nese(z jejich pohledu) náhodnou informaci tj. nelze dělat žádné předpoklady o tom, kde jsou jedničky akdenuly.tomutomemgramumůžou bacovíc,dokonce musí změnit jeden bit(jednu jedničku překlopí na nulu nebo obráceně). Mřížka se nesmí otáčet, tzn. políčka jsou jasně a jednoznačně očíslována. Příjemce(mozek Spáče) pak dostane upravený memgram. Přitom ale neví, jak vypadal původní memgram, tedy ani který bit byl změněn. Protože nás zajímá maximální velikost přenášené informace, předpokládejte, že mozek umí informaci rozkódovat, ať je jakkoli zakódovaná(zná komunikační protokol). Pro lepší představu si uveďme triviální příklad, na kterém si ukážeme, jak přenést jeden bit. Řekněme, že hodnota tohotobitusebudepřenášetnapozici(1,1)avšechnaostatní políčka budou pro příjemce nepodstatná. Když přijde memgram,podívámesenanašipozici.buďtampřímodostaneme hodnotu, kterou chceme přenést, a pak změníme libovolný jiný bit(vždy musíme něco změnit, tak sáhneme jinam, abychom si políčko(1, 1) nerozbili). Pokud tam jeopačnáhodnota,změnímepolíčko(1,1)atímhonastavíme správně. Příjemci pak stačí přečíst toto políčko, aby 2 získal posílanou informaci. Vašim úkolem je určit, kolik nejvíce bitů informace lze taktopřenéstvjednommemgramu,apopsat,jakbudetato informace kódována. Pokud úlohu vyřešíte i obecně pro memgram obsahující libovolný počet(n) bitů, případně pokud dokážete, že vaše řešení je nejlepší možné, bonusové body vás jistě neminou. Tovypadázajímavě, pokývalhlavoustaršímuž,když pročítal papíry mladšího kolegy. A za jak dlouho může být zařízenípřipravené? Když budeme všichni pracovat jen na tomto projektu, mohlibychomtostihnoutužzapárdní. Hmm, to není špatné. Ale pomyslel jste, pane kolego, namožnost,žesemezitímspáčprobudí? Probudil jsem se a posadil na posteli. Bylo pozdní odpoledne a venku se začínalo stmívat. Tyhle sny začínají být čím dál realističtější. A také děsivější. Musím přijít na jiné myšlenky! Krátká procházka by mi mohla vyčistit hlavu. Oblékl jsem se a vyrazil. V parku se pohybovali nejrůznější lidé. Bylo to ideální místo na odpočinek, přestože o sobě dával podzim vědět vtíravým chladem a všudypřítomným zažloutlým listím. Posadiljsemsenalavičku,pohodlněseopřel.Večernívánekmi lehce foukal do tváře. Bylo to příjemně osvěžující. Kolemprošelmužvbílémplášti.Snažiljsemsemunevěnovat pozornost. Každý přece může nosit bílý plášť! V opačném směru prošla dvojice lidí. Také v bílých pláštích. Vášnivě diskutovali nad nějakými dokumenty. Nedaleko se zastavila žena ve středních letech. Byla zahalená do bílého pláště a venčila malého bílého psa. Vypadal roztomile, ale něco naněmnebylovpořádku.bližšípohledodhalil,žepesnení bílý. Byl oblečený do bílého oblečku, který nápadně připomínal plášť. Kdo může obléknout psa do něčeho takového?! Mám snad vidiny, nebo se ti lidé okolo zbláznili? Vydal jsemsesměremdomůasnažilsepřílišnerozhlížetpolidech. Přepracování, stres, to bude určitě ono! Nic jiného to nemůže být. Teplá sprcha, několik prášků na spaní a rychle do postele. Prostěseztohovyspímabudeto!Užžádnésnyobílých pláštích. Usilovně jsem se snažil myslet na jiné věci a prášky pomaluzabraly... Na rozlehlé, sytě zelené louce se pásly ovce. Uprostřed nich seděl bača a hrál na vlastnoručně vyřezanou píšťalku. Ovce klidně přežvykovaly trávu a sem tam se ozvalo zabečení. Bača odložil píšťalku a odkudsi vytáhl dížku na mléko. Sedlsinastoličkuvedlenejbližšíovceazačaljidojit. Něco nebylo v pořádku. Ovce znervózněly a začaly pobíhatsematam.hustábílávlnananichposkakovalaavlála. Jakobyvníbylyjenoblečenéamohlyjikdykolishodit. Trávasepodivnělesklaajejízelenábarvavybledlaazměnila se na stříbrnou. Jednotlivá stébla se přestala kývat ve větru a stála vzpřímeně kolmo k nebi jako výškové budovy. Ovce si stouply na zadní. Stále pobíhaly kolem a vášnivě spolu diskutovaly bečivými hlasy. Už na sobě neměly vlnu bylytobílépláště!bačazmizelneznámokamazloukyse stala obrovská prosvětlená místnost... Jednaovce vědecsepřitočilkjinémuadovšeobecného hlukutéměřzakřičel: Užtomůžemespustit?! Téměř!Právěprovádímekalibraci! odpovědělmurovněž křikem druhý vědec.
3 Uprostřed místnosti stál přístroj, který vypadal jako jaderný reaktor zkřížený s obřím kávovarem. Okolo pobíhala hromada vědců v bílých pláštích, kteří usilovně pracovali na různých částech přístroje. Trvalo notnou chvíli, než dokončili všechny drobnosti. Jsmepřipraveni! zamával jedenvědeczvrcholupřístroje na kolegu u ovládacího pultu. Ten mu zamával nazpět a pomalu zatáhl za velkou páku. Navzdory všem předpokladům přístroj nezačal ani hučet, ani blikat, jen malá kontrolka signalizovala, že byl uveden do provozu. Vědci z celé místnosti se shromáždili u informační obrazovky, kde s napětím čekali na první výsledky. Číselné ukazatele se pohnuly a začaly stoupat. Ozvalo se hromadné oddechnutí a celý dav začal optimisticky švitořit. Výborně! A teď uložíme náš svět do dlouhodobé pamětispáče, zavelelnejstaršívědec.ostatníserozprchlipo nejbližším okolí a začali opět pilně pracovat Nadposloupnost 10 bodů Vědci se snaží uložit informace o jejich světě do paměti Spáče.Problémje,ževpamětiužněkterévěcijsouažádné nesmí zmizet to by mohlo mít nedozírné následky. Paměť si představte jako uspořádanou posloupnost vzpomínek. Jednu vzpomínku budeme pro jednoduchost brát jako řetězec. Zároveň je dána posloupnost vzpomínek, které by vědci rádi do paměti uložili. Některé vzpomínky se můžou překrývatstěmi,kteréužvpamětijsou. Cílem je najít nadposloupnost takovou, aby původní paměť i nové vzpomínky představovaly podposloupnosti této nadposloupnosti. Vzhledem k tomu, že paměť není svou kapacitou neomezená, měla by být nadposloupnost nejkratší možná, aby se minimalizovalo riziko zapomínání. Příklad:Vpamětije snídaně, práce a večeře.vědcichtějípřidat večeře, sen a snídaně.jedenzmožnýchvýsledkůje snídaně, práce, večeře, sen a snídaně.vyškrtnutímsnuadruhésnídanědostaneme původní paměť a vyškrtnutím první snídaně a práce dostaneme posloupnost, kterou by rádi vědci do paměti dostali. Probudilo mě drnčení budíku. Musel jsem spát opravdu tvrdě, protože zvonil už několik minut v kuse. Hlava byla čistá a celým tělem mi pulzovala energie. Byl to nádherný pocit. Stačilo pár minut, abych se osprchoval, nasnídal a vyrazil do kanceláře. Práce mi šla od ruky. Formuláře, které se mi nahromadily za včerejšek, zmizely ještě před dopolední poradou a chvíli po poledni jsem měl splněné všechny povinnosti na dnešní den. Dobrápráce, Harolde! pochválil měnadřízený přede všemikolegy. Vidím,žejsipřekonaltuvčerejšíkrizi. Potřebovaljsemseztohojenpořádněvyspat, odpověděl jsem ledabyle a přibral si další formuláře navíc od svých kolegů. Práce mě úplně pohltila. Čas ubíhal a kancelář se postupně vyprazdňovala. Vyrušil mě až vrátný, když kontroloval, zdavbudověnikdonezbyl.tobylaleproduktivníden!museljsemudělatprácinejménězapětlidí!cestadomůbyla klidnější než obvykle. Podzemka byla poloprázdná. Aby také ne,vtuhledobu. Čekal mne pravidelný večerní rituál. Nakrmit rybičky, večeře a večerní zprávy. Můj přesčas v práci ale způsobil, žezprávynakanálu6uždávnoskončily.naobrazovcepobíhala nějaká zvířata, zatímco hlas na pozadí vyprávěl odborné pikantnosti z jejich života. Zajímavé, ale ne zas tolik. 3 Vypnuljsemteleviziašelsičístdopostele. Pohled na město byl nádherný. Vycházelo slunce a společně s ním se probouzeli lidé. Proudy vznášedel houstly a město pomalu ožívalo. Do jedné už ne tak bezvýznamné budovy na kraji města se sbíhali vědci. Přednáška na téma SnovýchsvětůsebudekonatoddevítihodinveVelkéaule, informovaly všudypřítomné plakáty. Aula se plnila a s přibývajícím množstvím lidí se zvyšoval i hluk. Šepot se brzy změnil v křik a v místnosti nebylo slyšet vlastního slova. K řečnickému pultu vystoupil starší mužsplnovousem.chvílipočkal,nežhlukvsáleutichlna přijatelnou úroveň, a začal přednášet. Mluvil dlouze o nejrůznějších věcech. Jak je možné žít vesnuajakéfilozoficképroblémyjsoustímspojené.kolik takových snových světů může existovat, jak jsou propojené azdasedámezinimicestovat.zdamohouexistovatsnové světy vytvořené snem osoby, která je rovněž uvězněna ve snu. Jak mohou snové světy ovlivňovat reálné světy a naopak. A na závěr upozornil posluchače na vážný problém. Jak jistě všichni víte, jsme uvězněni v mysli Spáče. Spuštěním přístroje na úpravu memgramů se nám podařilo zafixovat naši existenci přímo v jeho paměti a podvědomí,takženehrozí,žebynanásvblízkédobězapomněl. Alestáletuexistujejedenproblém... Přednášejícísena chvíli odmlčel, prohrábl si plnovous a promítl další holografický obrázek. Co když našeho spáče potká řekněme malá mozková příhoda? Co když ho zítra přejede cestou do práce auto?aikdybychommělištěstíanicztohosenestalo, spáč je jen obyčejný člověk. Za nějakých padesát, možná šedesát let stejně zemře přirozenou smrtí a naše civilizace zaniknesním. Poslední věta visela ve vzduchu a v aule se rozhostilo úplné ticho. Po chvíli se mezi posluchači zvedla ruka těsně následovaná i jejím majitelem. Stoupl si, rozhlédl se po okolních posluchačích a pak se rozechvělým hlasem zeptal: Amyslíte,žestímpůjdeněcoudělat,paneprofesore? Upřímně řečeno, nevím. Stále nad tím bádáme. Pravděpodobně je naší jedinou možností vytvořit tunel mezi reálnýmasnovýmsvětem.problémje,žebysitovyžádalo obrovské množství energie a také úplnou znalost topologie všechsnovýchsvětůspáče. Aula začala tiše šumět vzrušenými debatami. O chvíli později se z davu zvedla jiná ruka. Myslím, pane profesore, žebychprovásmohlvyřešittodruhé Topologie snů 10 bodů Topologie snových světů je reprezentována binárním stromem. Katedra snového inženýrství se pokusila zmapovat okolní světy, ale zatím mají k dispozici jen neúplná data. Podařilo se jim získat tento strom vypsaný v prefixové a infixové notaci. Problém je, že pro další zpracování by velice potřebovali mít strom vypsaný také v postfixové notaci. Napište algoritmus, který z prefixového a infixového výpisu sestaví výpis postfixový, případně oznámí, že ze zadaných dat nelze sestavit tento výpis jednoznačně. Jednotlivé vrcholy jsou ve stromě označeny celými náhodnými čísly. Označení je navíc jednoznačné tj. žádné dva vrcholy nemají stejné číslo. Příklad:Prostromsprefixovýmvýpisem a infixovým budepostfixovývýpis
4 Následujících několik dní bylo velmi zajímavých. Energiemneneopouštěla,atakjsemstrávilvpráciicelývíkend.Můjplánbylnašetřitnějaképřesčasyapaksiudělat dovolenou. Ale nešlo to. Mozek byl příliš aktivní a neustálepotřebovalněcořešit.každounocsemizdálytytéžsny o vědcích usilovně pracujících na zařízení, které by je mělo dostatvenzesnu.začínalomětoděsit.opětjsemnavštívilsvéhopsychologaapřevyprávělmusvésnyito,cosese mnouvposlednídoběděje... Takžeříkáte,žeoni tedyjakovtomvašemsnu něco staví? zeptalseužasipočtvrté. Ano. Jak jsem říkal, staví nějaké zařízení, které by je mělodostatvenzesnu. Hm.Velmizajímavé, pokývaldoktorhlavouazamyslel se. Myslím,žebystejemělnechat,abytodostavěli. Anemohlobytobýt jánevím nebezpečné? Snadnemyslíte,žebytomohlobýtskutečné, usmál se. Ten stroj symbolizuje nějakou věc ve vašem podvědomí, která čeká, až ji vyřešíte. Pomozte jim. Mějte dobrou vůli ten stroj dostavět. Jedině tak vaše podvědomí vyřeší problém,kterýzřejměmáte. Úžasné! Psychologové mají prostě na všechno vysvětlení. Cestou do práce se mi hlavou honily nejrůznější myšlenky. Najednustranumohlmítpravdu.Nadruhoustranu,co kdyžjetensenskutečný.nebojetakémožné,žemišplouchánamaják!vduchujsemsezasmáltéhloupémyšlence, ale veselo mi nebylo. Večerjsemdalnaradupsychologa.Odteďbudemoujedinou myšlenkou před spaním dostavět ten zatracený přístroj. Aťtostojícotostojí. Pohled na město byl nádherný, ale zdaleka už ne tak úchvatný. Byl to stále ten stejný pohled, který se vracel noc co noc. Budova na okraji města, ve které vědci připravovali svůj přístroj, byla stále plná a žila čilou kreativní prací. Právěřešilidalšíproblém... Už se nám podařilo rozmístit jednotlivé sny na různé frekvence, ale stále nemáme potřebný výkon, abychom je dokázalivšechnypokrýt, říkalprávějedenvědecdruhému. Acokdybychomoptimalizovalihierarchiisnů? Tobymohlojít,alevýslednástrukturabymuselamít conejmenšíprůměr! přikývlvědecazačalpočítatpotřebné úpravy Optimalizace stromu 11 bodů Hierarchie, do které vědci přeuspořádali jednotlivé sny, je vlastněstrom.aleužnemusíbýtnutněbinárníatakénení zakořeněný. Manipulace se sny je velmi složitá, takže můžete jen jednu hranu odebrat a jednu hranu přidat. Výsledek musíbýtopětsouvislýstromanavícmusímítnejmenší možný průměr. Pro upřesnění: Termínem průměr zde myslíme počet hran na cestě mezi dvěma nejvzdálenějšími vrcholy grafu(v našem případě stromu). Příklad: Na následujících obrázcích je uveden strom, který máme modifikovat. Na prvním obrázku je zvýrazněná hrana, kterou odebíráme, na druhém hrana, kterou jsme přidali. Původní strom má průměr 5, po úpravě se dostaneme na hodnotu 3. 4 Tobymělostačit, přikývlpostaršívědec,kdyžprošel všechna čísla. Zkontrolujte znovu všechny systémy! Zbývá neceláhodinadospuštění! Zařízení mělo tvar obrovského oválu. Po obvodu byly přidělány mohutné cívky, ke kterým se táhly tlusté kabely. Pobíhající vědci kontrolovali poslední detaily před prvním spuštěním. Čas pomalu ubíhal a jednotlivé týmy postupně potvrzovaly funkčnost jednotlivých systémů. Přípravy byly dokončenyačekalosepouzenapokynznejvyššíchmíst.pan profesor, který celý vývoj řídil, se postavil před shromážděné vědce. Experiment, který nyní provedeme, je velice nebezpečný. Pokud jsme někde udělali chybu, ten, kdo projde bránou na druhou stranu, může skončit kdekoli. Třeba v nějaké nočnímůře,neboještěhůř... Shromážděnívědcisepodívali jeden na druhého. Nemohuponikomzváschtít,abytaktoriskovalsvůj život, navázalprofesor. Protojsemserozhodl,žebránou projdusám. Zhloučkupřítomnýchlidíseozvalopřekvapené zalapání po dechu. Spusťteto! zavelelprofesoraotočilsekzařízení.ozvalo se hlasité cvaknutí spínaných kontaktů a hluboké bručení transformátorů. Vzduch uvnitř oválu se začal vlnit a tmavnout. Ve vzduchu byl cítit silný elektrostatický náboj. Obraz uvnitř portálu se ustálil a skupinka vědců zírala do tmavé místnosti. Uprostřed ní byla postel, ve které kdosi spal. Profesor pomalu vykročil k oválu. Naposledy se otočil a kývl svým kolegům na pozdrav. Zhluboka se nadechl a jedním krokem prošel skrz. Obraz ložnice se zavlnil. Pak začal rychleblednout,ažzmizeldocela... Probudil jsem se a posadil se. U postele stála postava. Oči pomalu přivykly šeru a rozeznaly dlouhý plášť a plnovous... Vzpomínátenatyvědcezméhosnu?Takuždostavěli tozařízení. Opravdu?Amělotonavásnějakýúčinek? zeptalse doktor. Myslím,žeano, přikývljsem. Každopádněsemnou dnespřišelněkdo,kdobysesvámirádseznámil Praktická: Rozklad na součty 10 bodů Vtétosériisenámpraktickáúlohanevešladopříběhu.Alenebojtese,otolépe sevámbudeřešit... Tuto úlohu odevzdávejte výhradně prostřednictvím webové aplikace CodEx ( Pokudjstesřešenímzačaliteprvevtétosériianevíte,cojeCodEx,podívejtesetřebanaúlohu Optimalizacekotlů,vekterénalezneteúvodnípovídání o CodExu. Zadání: Nastandardnímvstupujezadánočíslo N(1 N 40). Vypište na standardní výstup všechny možnosti, jak toto číslo rozložit na součet celých kladných čísel. Každý rozklad
5 musí být uveden na samostatném řádku, sčítance vyjmenovány od nejmenšího k největšímu a odděleny znaménkem +.Napořadířádkůnezáleží. Napříkladpro N=5jejedenzesprávnýchvýstupůnásledující: Pan Cowmess 12 bodů Tuto úlohu musíte řešit v programovacím jazyce Rapl, jehožpopisnajdetevzadáníúlohy21-1-6zprvnísérie. Pan Cowmess[čtěte Koumes] si založil softwarovou firmu Zkrátil a Zrychlil, s.r.o., která se hodlá zabývat programováním nejkratších a nejrychlejších programů na světě. Pro svého prvního zákazníka napsal následující program: n = 0 y = 1 cyklus:a[n] = x % 2 n = n + 1 x = x / 2 if n < 32 => jumpcyklus i = 0-1 hledej:i=i+1 if i >= n => jumpzkus if A[i] <> 0 => jump hledej j = 0-1 druhe: j = j+1 if j >= n => jumphledej if A[j] <> 1 => jump druhe A[i] = 2 A[j] = 2 jump hledej zkus: if A[k] = 2 => jump ok y = 0 ok: k = k+1 if k < n => jump zkus Vám se(zcela oprávněně) nezdá, že by tento program byl obzvlášť krátký nebo rychlý. Zkuste tedy přijít na to, co Cowmessův program dělá, a zdůvodnit, proč to dělá(za 6 bodů). Pak napište daleko kratší program, který počítá totéž(zadalších6bodů).tímmyslíme,ževášprogrammá pro libovolnou počáteční hodnotu registru x odpovědět stejnou hodnotou y jako původní program. Vaše řešení může být i pomalejší, hlavní je, aby mělo co nejméně instrukcí. Recepty z programátorské kuchařky V dnešním dílu kuchařky si zavedeme základní pojmy z teorie grafů a ukážeme si, jak řešit problém nalezení minimální kostry grafu. Také si popíšeme datovou strukturu Disjoint- Find-Union(její název je často zkracován na DFU), kterou šikovně použijeme právě na řešení tohoto problému. Grafy Neorientovaný graf je určen množinou vrcholů V a množinou hran E, přičemž hrany jsou neuspořádané dvojice vrcholů.hrana e={x, y}spojujevrcholy xay.většinou požadujeme, aby hrany nespojovaly vrchol se sebou samým 5 (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). Neorientovaný graf většinou zobrazujeme jako body pospojované čarami. Æ ÓÖ ÒØÓÚ Ò Ö Ó Ó ØÖ ÑÙÐØ Ö 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éhosledualemůžemevypustitposloupnost e i, v i+1,..., e j 1, v j adostattaké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í nazýváme cestu délky alespoň 3, ve které oproti definiciplatí v 1 = v n.někdysenacesty,tahyakružnice v grafu také díváme jako na podgrafy, 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árgrafůzpřírody:Stromjesouvislý graf, který neobsahuje kružnici. List je vrchol, ze kterého vedepouzejednahrana.ukážeme,žekaždýstromsalespoň dvěma vrcholy má nejméně dva listy. Proč to? Stačí si najít nejdelší cestu(pokud je takových cest více, zvolíme libovolnou z nich). Oba koncové vrcholy této cesty musejí býtnutnělisty:kdybyzněkteréhoznichvedlahrana,muselabyvéstdovrcholu,kterýnacestěještěneleží(jinakby ve stromu byla kružnice), ale o takovou hranu bychom cestu mohli prodloužit, takže by původní cesta nebyla nejdelší.
6 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 informatici 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. Ještěsenámbudehoditnahlédnout,žestromsnvrcholy má právě n 1 hran: Budeme postupovat matematickou indukcí podle počtu vrcholů stromu. Strom s jedním vrcholem neobsahuježádnouhranu.pokudmámestromsn >1vrcholy, vezměme libovolný jeho list a odeberme ho ze stromu. Tím získáme opět strom(souvislost jsme porušit nemohli a kružnicijsmetakénevytvořili)ajehopočetvrcholůjeo1 menší. Podle indukčního předpokladu má o jednu hranu méněnežvrcholů.nynílist přilepíme zpět,čímžzvýšíme početvrcholůihrano1,atvrzenístáleplatí. A nyní k slibovaným kostrám. Mějme nějaký souvislý graf. Jeho kostrou nazveme libovolný podgraf, který obsahuje všechny vrcholy a nejmenší počet hran takový, aby každé dva vrcholy byly spojeny nějakou cestou. Všimněte si, že kostra musí být sama souvislá a navíc neobsahuje žádnou kružnici(jinak bychom mohli libovolnou hranu ležící na kružnici z kostry beze škody odebrat, čímž bychom získali menší kostru, a to nám definice zakazuje.) Čili každá kostra je strom. Na prvním obrázku je kostra levého grafu znázorněna silnými hranami. Pokud každou hranu grafu ohodnotíme nějakou vahou, což v našem případě bude vždy kladné číslo, dostaneme ohodnocený graf. V takových grafech pak obvykle hledáme mezi všemi kostrami kostru minimální, což je taková, pro kterou je součet vah jejích hran nejmenší možný. Graf může mít více minimálních koster například jestliže jsou všechny váhy hran jedničky, všechny kostry mají stejnou váhu n 1(kde njepočetvrcholůgrafu),atedyjsouvšechny minimální. Pokud si graf představíme jako města spojená silnicemi, problém nalezení minimální kostry můžeme vidět následovně: Chceme určit silnice, které se budou v zimě udržovat sjízdné tak, aby součet délek silnic, které je třeba udržovat, byl co nejmenší možný a zároveň se stále bylo možné přepravit mezi každými dvěma městy. Algoritmus pro hledání minimální kostry Algoritmus na hledání minimální kostry, který si předvedeme, je typickou ukázkou tzv. hladového algoritmu. Nejprve setřídíme hrany vzestupně podle jejich váhy. Kostru budeme postupně vytvářet přidáváním hran od té s nejmenší vahoutak,žehranudokostrypřidámeprávětehdy,pokud spojuje dvě(prozatím) různé komponenty souvislosti vytvořeného podgrafu. Jinak řečeno, hranu do vytvářené kostry přidáme, pokud v ní zatím neexistuje cesta mezi vrcholy, které zkoumaná hrana spojuje. Je zřejmé, že tímto postupem získáme kostru, tj. acyklický podgraf grafu, který je souvislý(pokud vstupní graf je souvislý, což mlčky předpokládáme). Než si ukážeme, že 6 nalezená kostra je opravdu minimální, podívejme se na časovou složitost našeho algoritmu: Pokud vstupní graf má N vrcholůam hran,takúvodnísetříděníhranvyžaduječas O(Mlog M)(použijemeněkterýzrychlýchtřídících algoritmů popsaných v jednom z minulých dílů kuchařky)apotésepokusímepřidatkaždouzm hran.vdruhé části kuchařky si ukážeme datovou strukturu, s jejíž pomocíbude M testůtoho,zdamezidvěmavrcholyvedehrana,trvatnejvýše O(Mlog M).Celkováčasovásložitostnašehoalgoritmujetedy O(Mlog N)(všimnětesi,že log M log N 2 =2logN).Paměťovásložitostjelineární vzhledemkpočtuhran,tj. O(M). Důkaz správnosti hladového algoritmu Zbývá dokázat, že nalezená kostra vstupního grafu je minimální. Bez újmy na obecnosti můžeme předpokládat, že váhy všech hran grafu jsou navzájem různé: Pokud tomu tak není již na začátku, přičteme k některým z hran, jejichž váhy jsou duplicitní, velmi malá kladná celá čísla tak, aby pořadí hran nalezené naším třídícím algoritmem zůstalo zachováno. Tím se kostra nalezená hladovým algoritmem nezmění a pokud bude tato kostra minimální s modifikovanými váhami, bude minimální i pro původní zadání. Označmesinyní T alg kostrunalezenouhladovýmalgoritmemat min nějakouminimálníkostru.cobysestalo,kdyby byly různé? Víme, že všechny kostry mají stejný počet hran, takže musí existovat alespoň jedna hrana e, která je v T alg,alenenívt min.zevšechtakovýchhransivyberme tu, která má nejmenší váhu, tedy kterou algoritmus přidal jako první. Když se podíváme na stav algoritmu těsně před přidáním e, vidíme, že sestrojil nějakou částečnou kostru F, kterájeještěsoučástíjak T min,tak T alg. Přidejmenyníhranu ekekostře T min.tímvzniklpodgraf vstupního grafu, který zjevně obsahuje nějakou kružnici C užpředpřidánímhrany etotiž T min bylasouvislá.protože kostra T alg neobsahuježádnoukružnici,nakružnici Cmusí býtalespoňjedahrana e,kteránenívt alg. Všimněmesi,žehranu e nemohlalgoritmuszpracovatpřed hranou e:hrana e neležívt min nažádnémcyklu,takže tímspíšnetvořícyklusvf akdybyjialgoritmuszpracoval,muselbyjipřidatdo F,což,jakvíme,neučinil.Ztoho plyne,ževáhahrany e jevětšínežváhahrany e.když nynízkostry T min odeberemehranu e apřidámemísto níhranu e,musímeopětdostatsouvislýpodgraf(eae přeci ležely na společné kružnici), tudíž kostru vstupního grafu. Jenže tato kostra má celkově menší váhu než minimálníkostra T min,cožnenímožné.tímjsmedošlikesporu, aproto T min a T alg nemohoubýtrůzné. Disjoint-Find-Union Datová struktura DFU slouží k udržování rozkladu množiny na několik disjunktních podmnožin(čili takových, že žádné dvě nemají společný prvek). To znamená, že pomocí této struktury můžeme pro každé dva z uložených prvků říci, zda patří či nepatří do stejné podmnožiny rozkladu. V algoritmu hledání minimální kostry budou prvky v DFU vrcholy zadaného grafu a budou náležet do stejné podmnožiny rozkladu, pokud mezi nimi v již vytvořené části kostry existuje cesta. Jinými slovy podmnožiny v DFU budou odpovídat komponentám souvislosti vytvářené kostry. S reprezentovaným rozkladem umožňuje datová struktura DFU provádět následující dvě operace: find:test,zdadvaprvkyležívestejnépodmnožiněrozkladu. Tato operace bude v případě našeho algoritmu od-
7 povídat testu, zda dva vrcholy leží ve stejné komponentě souvislosti. union: Sloučení dvou podmnožin do jedné. Tuto operaci v našem algoritmu na hledání kostry provedeme vždy, když do vytvářené kostry přidáme hranu(tehdy spojíme dvě různé komponenty souvislosti dohromady). Povězme si nejprve, jak budeme jednotlivé podmnožiny reprezentovat. Prvky obsažené v jedné podmnožině budou tvořit zakořeněný strom. V tomto stromě však povedou ukazatele(trochu nezvykle) od listů ke kořeni. Operaci find lze pak jednoduše implementovat tak, že pro oba zadané prvky nejprve nalezneme kořeny jejich stromů. Jsou-li tyto kořeny stejné,jsouprvkyvestejnémstromě,atedyivestejnépodmnožině rozkladu. Naopak, jsou-li různé, jsou zadané prvky v různých stromech, a tedy jsou i v různých podmnožinách reprezentovaného rozkladu. Operaci union provedeme tak, že mezi kořeny stromů reprezentujících slučované podmnožiny přidáme ukazatel a tím tyto dva stromy spojíme dohromady. Implementace dvou výše popsaných operací, jak jsme se ji právě popsali, následuje. Pro jednoduchost množina, jejíž rozkladreprezentujeme,budemnožinačíselod1do N.Rodiče jednotlivých vrcholů stromu si pak pamatujeme v poli parent,kde0znamená,žeprvekrodičenemá,tj.žejekořenem svého stromu. Funkce root(v) vrátí kořen stromu, který obsahuje prvek v. var parent:array[1..n] of integer; procedure init; var i:integer; for i:=1 to N do parent[i]:=0; function root(v: integer):integer; if parent[v]=0 then root:=v else root:=root(parent[v]); function find(v,w:integer):boolean; find:=(root(v)=root(w)); procedure union(v,w:integer); v:=root(v); w:=root(w); if v<>w then parent[v]:=w; S právě předvedenou implementací operací find a union by se ale mohlo stát, že stromy odpovídající podmnožinám budouvypadatjako hadi apokudbudouobsahovat Nprvků,nanalezeníkořenebudepotřebačas O(N). Ke zrychlení práce DFU se používají dvě jednoduchá vylepšení: unionbyrank:každýprvekmápřiřazenrank.nazačátku jsou ranky všech prvků rovny nule. Při provádění operace union připojíme strom s kořenem menšího ranku ke kořeni stromu s větším rankem. Ranky kořenů stromů se v tomto případě nemění. Pokud kořeny obou stromů mají stejný rank, připojíme je libovolně, ale rank kořenu výsledného stromu zvětšíme o jedna. path compression: Ve funkci root(v) přepojíme všechny prvkynacestěodprvku vkekořenirovnounakořen,tj. změníme jejich rodiče na kořen daného stromu. 7 Než si obě metody blíže rozebereme, podívejme se, jak se změní implementace funkcí root a union: var parent:array[1..n] of integer; rank:array[1..n] of integer; procedure init; var i:integer; for i:=1 to N do parent[i]:=0; rank[i]:=0; {zmena kvuli path compression} function root(v: integer):integer; if parent[v]=0 then root:=v else parent[v]:=root(parent[v]); root:=parent[v]; {stejna jako minule} function find(v,w:integer):boolean; find:=(root(v)=root(w)); {zmena kvuli union by rank} procedure union(v,w:integer); v:=root(v); w:=root(w); if v=w then exit; if rank[v]=rank[w] then parent[v]:=w; rank[w]:=rank[w]+1; end else if rank[v]<rank[w] then parent[v]:=w else parent[w]:=v; Zaměřmesenyníblíženametoduunionbyrank.Nejprve učiníme následující pozorování: Pokud je prvek v s rankem rkořenemstromuvdatovéstruktuředfu,paktento stromobsahujealespoň2 r prvků.našepozorovánídokážemeindukcípodle r.pro r=0tvrzenízřejměplatí.nechť tedy r >0.Vokamžiku,kdyserankprvku vměnízr 1 na r,slučujemedvastromy,jejichžkořenymajírank r 1. Každý z těchto dvou stromů má dle indukčního předpokladualespoň2 r 1 prvků,atedyvýslednýstrommáalespoň 2 r prvků,jakjsmepožadovali.znašehopozorováníihned plyne,žerankkaždéhoprvkujenejvýšelog 2 N aprvků srankem rjenejvýše N/2 r (všimněmesi,žerankprvku vdfuseneměnípookamžiku,kdydanýprvekpřestane být kořen nějakého stromu). Kdyžtedyprovádímejenunionbyrank,jehloubkakaždého stromuvdfurovnarankujehokořene,protožerankkořene se mění právě tehdy, když zvětšujeme hloubku stromu ojedna.aprotožerankkaždéhoprvkujenanejvýšlog 2 N, hloubkakaždéhostromuvdfujetakénanejvýšlog 2 N. Potom ale procedura root spotřebuje čas nejvýše O(log N), atedyoperacefindaunionstihnemevčase O(log N).
8 Amortizovaná časová složitost Abychom mohli pokračovat dále, musíme si vysvětlit, co je amortizovaná časová složitost. Řekneme, že nějaká operace pracuje v amortizovaném čase O(t), pakliže provedení libovolných k takových operací trvá nejvýše O(kt). Přitom provedení kterékoliv konkrétní z nich může vyžadovat čas větší. Tento větší čas je pak v součtu kompenzován kratším časem, který spotřebovaly některé předchozí operace. Nejdříve si předveďme tento pojem na jednoduchém příkladě. Řekněme, že máme číslo zapsané ve dvojkové soustavě. Přičíst k tomuto číslu jedničku jistě netrvá konstantní čas, neboť záleží na tom, kolik jedniček se vyskytuje na koncizadanéhočísla.pokudsenámalepovedeukázat,že N přičení jedničky k číslu, které je na počátku nula, zabere čas O(N),pakmůžemeříci,žekaždétakovépřičtenítrvalo amortizovaně O(1). Jak tedy ukážeme, že N přičtení jedničky k číslu zabere čas O(N)?Použijemektomu penízkovoumetodu.každáoperacenásbudestátjedenpenízekapokudjichna N operací použijeme jen O(N), bude tvrzení dokázáno. Každé jedničce, kterou chceme přičíst, dáme dva penízky. V průběhu celého přičítání bude platit, že každá jednička ve dvojkovém zápisu čísla má jeden penízek(když začneme jedničky přičítat k nule, tuto podmínku splníme). Přičítání bude probíhattak,žepřičítanájedničkase podívá nanejnižší bit(tj. ve dvojkovém zápise na poslední cifru) zadaného čísla(tojistojíjedenpenízek).pokudjetonula,změníji najedničkuadájísvůjzbylýpenízek.pokudtojejednička, vezme si přičítaná jednička její penízek(čili už má zase dva), změní zkoumanou jedničku na nulu a pokračuje u dalšího bitu, atd. Takto splníme podmínku, že každá jednička v dvojkovém zápisu čísla má jeden penízek. Tedy N přičítání nás stojí 2N penízků. Protože počet penízků utracených během jedné operace je úměrný spotřebovanému času, vidíme,ževšech Npřičteníproběhnevčase O(N).Nenítěžké si uvědomit, že přičtení některých jedniček může trvat až O(log N), ale amortizovaná časová složitost přičtení jedné jedničky je konstantní. Dokončení analýzy DFU Pokud bychom prováděli pouze path compression a nikolivunionbyrank,dalobysedokázat,žekaždázoperací findaunionvyžadujeamortizovaněčas O(log N),kde N je počet prvků. Toto tvrzení nebudeme dokazovat, protože tímbychomsinijakoprotisamotnémuunionbyrank nepomohli. Proč tedy vlastně hovoříme o obou vylepšeních? Inu proto, že při použití obou metod současně dosáhneme mnohem lepšího amortizovaného času O(α(N)) na jednu operaci find nebo union, kde α(n) je inverzní Ackermannova funkce. Její definici můžete nalézt na konci kuchařky, zde jen poznamenejme, že hodnota inverzní Ackermannovy funkce α(n) je pro všechny praktické hodnoty N nejvýše čtyři. Čili dosáhneme v podstatě amortizovaně konstantní časovou složitost na jednu(libovolnou) operaci DFU. Dokázat výše zmíněný odhad časové složitosti funkcí α(n)jedocelatěžké,mysizdepředvedemepo- Ð Ð někud horší, ale technicky výrazně jednodušší časový odhad O((N+L)log N),kde Ljepočetprovedenýchoperacífind nebounionalog Njetzv.iterovanýlogaritmus,jehoždefinice následuje. Nejprve si definujeme funkci 2 k rekurzivním předpisem: 2 0=1, 2 k=2 2 (k 1). Mámetedy2 1=2,2 2=2 2 =4,2 3=2 4 =16, 2 4 = 2 16 = 65536,2 5 = ,atd.Akonečně, iterovanýlogaritmuslog N čísla N jenejmenšípřirozené číslo ktakové,že N 2 k.jiná(aleekvivalentní)definiceiterovanéhologaritmujeta,želog Njenejmenšípočet, kolikrát musíme číslo N opakovaně zlogaritmovat, než dostaneme hodnotu menší nebo rovnu jedné. Zbývá provést slíbenou analýzu struktury DFU při současném použití obou metod union by rank a path compression. Prvky si rozdělíme do skupin podle jejich ranku: k-tá skupina prvků bude tvořena těmi prvky, jejichž rank je mezi (2 (k 1))+1a2 k.např.třetískupinaobsahujety prvky,jejichžrankjemezi5a16.prvkyjsoutedyrozdělenydo1+log log N= O(log N)skupin.Odhadněmeshora počet prvků v k-té skupině: 2 k 2 (k 1) N N N 2 (2 (k 1)) k= (k 1) 2 i N N 1= 22 (k 1) 2 k. Teď můžeme provést časovou analýzu funkce root(v). Čas, který spotřebuje funkce root(v), je přímo úměrný délce cestyodprvku vkekořenistromu.tatocestajepaknásledně rozpojena a všechny prvky na ní jsou přepojeny přímo na kořen stromu. Rozdělíme rozpojené hrany této cesty na ty, které naúčtujeme tomutovolánífunkceroot(v),aty,kterézahrnemedofaktoru O(Nlog N)vdokazovanémčasovém odhadu. Do volání funkce root(v) započítáme ty hrany cesty, které spojují dva prvky, které jsou v různých skupinách.takovýchhranjezřejměnejvýše O(log n)(všimněte si,žerankyprvkůnacestězlistudokořenetvořírostoucí posloupnost). Uvažmeprvek vv k-téskupině,kterýjižneníkořenemstromu. Při každém přepojení rank rodiče prvku v vzroste. Tedypo2 kpřepojeníchjerodičprvku vv(k+1)-nínebo vyššískupině.pokud vjeprvekvk-téskupině,pakhranaznějnacestědokořenenebudeúčtovánavolánífunkce root(v) nejvýše(2 k)-krát. Protože k-tá skupina obsahuje nejvýše N/(2 k)prvků,jepočettakovýchhranprovšechnyprvkytétoskupinynejvýše N.Aprotožepočetskupin jenejvýše O(log N),jecelkovýpočethran,kterénejsou započítányvolánímfunkceroot(v),nejvýše O(Nlog N). Protože funkce root(v) je volána 2L-krát, plyne časový odhad O((N+ L)log N)zprávědokázanýchtvrzení. Inverzní Ackermannova funkce α(n) i=1 Ackermannovu funkci lze definovat následující konstrukcí: A 0 (i)=i+1, A k+1 (i)=a i k(i)pro k 0, kdevýraz A i k zastupujesložení ifunkcí A k,např. A 1 (3)= A 0 (A 0 (A 0 (3))).Platítedynásledujícírovnosti: A 0 (i)=i+1, A 1 (i)=2i, A 2 (i)=2 i i. Jednoparametrová Ackermannova funkce A(k) je pak rovna hodnotě A k (2),čili A(2)=A 2 (2)=8, A(3)=A 3 (2)=2 11, A(4)=A 4 (2) atd... HodnotainverzníAckermannovy funkce α(n) je tedy nejmenší přirozené číslo k takové,že N A(k)=A k (2).Jakjevidět,vevšechreálnýchaplikacíchplatí,že α(n) 4. Dnešní menu vám servírovali Dan Kráľ, Martin Mareš a Milan Straka 8
Důkaz správnosti Zbývá dokázat, že nalezená kostra vstupního grafu je minimální. Bez újmy na obecnosti
Minimální kostra Představme si následující problém: Chceme určit silnice, které se budou v zimě udržovat sjízdné, a to tak, abychom celkově udržovali co nejméně kilometrů silnic, a přesto žádné město od
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
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
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
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ý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?
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í
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
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
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
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
Union-Find problém. Kapitola 1
Kapitola 1 Union-Find problém Motivace: Po světě se toulá spousta agentů. Často se stává, že jeden agent má spoustu jmen/přezdívek, které používá například při rezervaci hotelu, restaurace, na návštěvě
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
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
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ý
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
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
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í,
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é
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
zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.
Kapitola Ohodnocené grafy V praktických aplikacích teorie grafů zpravidla graf slouží jako nástroj k popisu nějaké struktury. Jednotlivé prvky této struktury mají často přiřazeny nějaké hodnoty (může jít
Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy
Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy Lukáš Havrlant Univerzita Palackého 10. ledna 2014 Primární zdroj Jiří Adámek: Foundations of Coding. Strany 137 160. Na webu ke stažení, heslo:
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
8. Geometrie vrací úder (sepsal Pavel Klavík)
8. Geometrie vrací úder (sepsal Pavel Klavík) Když s geometrickými problémy pořádně nezametete, ony vám to vrátí! Ale když užzametat,takurčitěnepodkoberecamístosmetákupoužijtepřímku.vtéto přednášce nás
Metody síťové analýzy
Metody síťové analýzy Řeší problematiku složitých systémů, zejména pak vazby mezi jejich jednotlivými prvky. Vychází z teorie grafů. Základní metody síťové analýzy: CPM (Critical Path Method) deterministický
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 5. dubna 2017 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
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ý
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 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
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)
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É
Úlohy klauzurní části školního kola kategorie B
65. ročník matematické olympiády Úlohy klauzurní části školního kola kategorie B 1. Kolika způsoby je možno vyplnit čtvercovou tabulku 3 3 čísly,, 3, 3, 3, 4, 4, 4, 4 tak, aby součet čísel v každém čtverci
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
Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:
3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...
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)
Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
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
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í
Ú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í
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é
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í
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
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é
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
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
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
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
Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují
Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují 1. u + v = v + u, u, v V 2. (u + v) + w = u + (v + w),
8 Přednáška z
8 Přednáška z 3 12 2003 Problém minimální kostry: Dostaneme souvislý graf G = (V, E), w : E R + Našim úkolem je nalézt strom (V, E ) tak, aby výraz e E w(e) nabýval minimální hodnoty Řešení - Hladový (greedy)
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,
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:
Č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á
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
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole.
Kapitola 7 Stromy Stromy jsou jednou z nejdůležitějších tříd grafů. O tom svědčí i množství vět, které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole. Představíme také dvě
Báze a dimenze vektorových prostorů
Báze a dimenze vektorových prostorů Buď (V, +, ) vektorový prostor nad tělesem (T, +, ). Nechť u 1, u 2,..., u n je konečná posloupnost vektorů z V. Existují-li prvky s 1, s 2,..., s n T, z nichž alespoň
Definice 5.1 Graf G = (V, E) je tvořen množinou vrcholů V a množinou hran, kde
Kapitola 5 Grafy 5.1 Definice Definice 5.1 Graf G = (V, E) je tvořen množinou vrcholů V a množinou hran E ( V 2), kde ( ) V = {{x, y} : x, y V a x y} 2 je množina všech neuspořádaných dvojic prvků množiny
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ý
Další NP-úplné problémy
Další NP-úplné problémy Známe SAT, CNF, 3CNF, k-klika... a ještě následující easy NP-úplný problém: Existence Certifikátu (CERT ) Instance: M, x, t, kde M je DTS, x je řetězec, t číslo zakódované jako
Hledání v textu algoritmem Boyer Moore
Zápočtová práce z Algoritmů a Datových Struktur II (NTIN061) Hledání v textu algoritmem Boyer Moore David Pěgřímek http://davpe.net Algoritmus Boyer Moore[1] slouží k vyhledání vzoru V v zadaném textu
V ypoˇ cetn ı sloˇ zitost v teorii graf u Martin Doucha
Výpočetní složitost v teorii grafů Martin Doucha Parametrizovaná složitost Nástroj, jak zkrotit výpočetní složitost NP-těžkých problémů Klasický přístup: exponenciála v n Parametrizovaná složitost Nástroj,
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
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
3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA
Jan Schmidt 2011 Katedra číslicového návrhu Fakulta informačních technologií České vysoké učení technické v Praze Zimní semestr 2011/12 MI-PAA EVROPSKÝ SOCIÁLNÍ FOND PRAHA & EU: INVESTUJENE DO VAŠÍ BUDOUCNOSTI
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
Složitost Filip Hlásek
Složitost Filip Hlásek Abstrakt. Příspěvek popisuje dva základní koncepty teoretické informatiky, Turingovy stroje a složitost. Kromě definic důležitých pojmů uvádí také několik souvisejících tvrzení,
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
Kolik existuje různých stromů na pevně dané n-prvkové množině vrcholů?
Kapitola 9 Matice a počet koster Graf (orientovaný i neorientovaný) lze popsat maticí, a to hned několika různými způsoby. Tématem této kapitoly jsou incidenční matice orientovaných grafů a souvislosti
Ř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
TGH09 - Barvení grafů
TGH09 - Barvení grafů Jan Březina Technical University of Liberec 15. dubna 2013 Problém: Najít obarvení států na mapě tak, aby žádné sousední státy neměli stejnou barvu. Motivační problém Problém: Najít
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ší
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:
10 Podgrafy, isomorfismus grafů
Typické příklady pro zápočtové písemky DiM 470-2301 (Kovář, Kovářová, Kubesa) (verze: November 25, 2018) 1 10 Podgrafy, isomorfismus grafů 10.1. Určete v grafu G na obrázku Obrázek 10.1: Graf G. (a) největší
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ší
1. Minimální kostry. 1.1. Od mìsteèka ke kostøe
. Minimální kostry Napadl sníh a přikryl peřinou celé městečko. Po ulicích lze sotva projít pěšky, natož projet autem. Které ulice prohrneme, aby šlo dojet odkudkoliv kamkoliv, a přitom nám házení sněhu
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)
Ú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,
DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3
DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),
Přednáška 3: Limita a spojitost
3 / 1 / 17, 1:38 Přednáška 3: Limita a spojitost Limita funkce Nejdříve je potřeba upřesnit pojmy, které přesněji popisují (topologickou) strukturu množiny reálných čísel, a to zejména pojem okolí 31 Definice
Cykly a pole 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116.
Cykly a pole Tato část sbírky je tvořena dalšími úlohami na práci s cykly. Na rozdíl od předchozího oddílu se zde již v řešeních úloh objevuje více cyklů, ať už prováděných po sobě nebo vnořených do sebe.
Naproti tomu gramatika je vlastně soupis pravidel, jak
1 Kapitola 1 Úvod V přednášce se zaměříme hlavně na konečný popis obecně nekonečných množin řetězců symbolů dané množiny A. Prvkům množiny A budeme říkat písmena, řetězcům (konečným posloupnostem) písmen
63. ročník Matematické olympiády 2013/2014
63. ročník Matematické olympiády 2013/2014 Úlohy ústředního kola kategorie P 2. soutěžní den Na řešení úloh máte 4,5 hodiny čistého času. Při soutěži je zakázáno používat jakékoliv pomůcky kromě psacích
PŘEDNÁŠKA 2 POSLOUPNOSTI
PŘEDNÁŠKA 2 POSLOUPNOSTI 2.1 Zobrazení 2 Definice 1. Uvažujme libovolné neprázdné množiny A, B. Zobrazení množiny A do množiny B je definováno jako množina F uspořádaných dvojic (x, y A B, kde ke každému
Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.
Úvod do informatiky přednáška čtvrtá Miroslav Kolařík Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Pojem relace 2 Vztahy a operace s (binárními) relacemi
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,
VLASTNOSTI GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze. BI-GRA, LS 2010/2011, Lekce 5
VLASTNOSTI GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 5 Evropský sociální fond Praha & EU: Investujeme do vaší
TGH08 - Optimální kostry
TGH08 - Optimální kostry Jan Březina Technical University of Liberec 14. dubna 2015 Problém profesora Borůvky řešil elektrifikaci Moravy Jak propojit N obcí vedením s minimální celkovou délkou. Vedení
Předmět: Algoritmizace praktické aplikace
Předmět: Algoritmizace praktické aplikace Vytvořil: Roman Vostrý Zadání: Vytvoření funkcí na stromech (reprezentace stromu haldou). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka 5.
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ýroková a predikátová logika - IV
Výroková a predikátová logika - IV Petr Gregor KTIML MFF UK ZS 2018/2019 Petr Gregor (KTIML MFF UK) Výroková a predikátová logika - IV ZS 2018/2019 1 / 17 Tablo metoda Tablo Tablo - příklady F (((p q)
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_146_IVT Autor: Ing. Pavel Bezděk Tematický okruh:
1 Lineární prostory a podprostory
Lineární prostory a podprostory Přečtěte si: Učebnice AKLA, kapitola první, podkapitoly. až.4 včetně. Cvičení. Které z následujících množin jsou lineárními prostory s přirozenými definicemi operací?. C
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é
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ší
Jednoduché cykly 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Jednoduché cykly Tento oddíl obsahuje úlohy na první procvičení práce s cykly. Při řešení každé ze zde uvedených úloh stačí použít vedle podmíněných příkazů jen jediný cyklus. Nepotřebujeme používat ani
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
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),
Hlavolamy a teorie grafů
Hlavolamy a teorie grafů Petr Kovář 1 petr.kovar@vsb.cz 1 Vysolá škola báňská Technická univerzita Ostrava, Škola matematického modelování, 2009 Přehled přednášky Úloha hanojských věží Část 1. Co není
autorovu srdci... Petr Hliněný, FI MU Brno 1 FI: MA010: Průnikové grafy
9 Krátké povídání o průnikových grafech Od této lekce teorie grafů se zaměříme lehce na několik vybraných partíı teorie grafů bĺızkých autorovu srdci... Naším prvním výběrem jsou průnikové grafy, což jsou