Drsná matematika Martin Panák, Jan Slovák Pokus o učební text pro začínající studenty informatiky přibližující podstatnou část matematiky v rozsahu čtyř semestrálních přednášek. Prozatím jsou zaznamenány první dva semestry přibližně v odpředneseném rozsahu. i Obsah Kapitola 1. Úvod a motivace 1 1. Čísla a funkce 1 2. Kombinatorické formule 3 3. Diferenční rovnice 7 4. Pravděpodobnost 14 5. Geometrie v rovině 23 6. Relace a zobrazení 31 Kapitola 2. Elementární lineární algebra 37 1. Vektory a matice 37 2. Determinanty 45 3. Vektorové prostory a lineární zobrazení 51 4. Vlastnosti lineárních zobrazení 62 Kapitola 3. Linární modely 73 1. Lineární rovnice a procesy 73 2. Lineární diferenční rovnice a filtry 76 3. Markovovy procesy 80 4. Více maticového počtu 83 5. Rozklady matic a pseudoinverze 88 Kapitola 4. Analytická geometrie 95 1. Afinní geometrie 95 2. Euklidovská geometrie 105 3. Projektivní geometrie 119 Kapitola 5. Zřízení ZOO 125 1. Interpolace polynomy 125 2. Spojité funkce 133 3. Derivace 146 4. Mocninné řady 155 Kapitola 6. Diferenciální a integrální počet 167 1. Derivování 167 2. Integrování 179 3. Nekonečné řady 195 Kapitola 7. Spojité modely 201 1. Aproximace pomocí Fourierových řad 201 2. Integrální operátory 207 iii iv OBSAH Kapitola 8. Spojité modely s více proměnnými 213 1. Funkce a zobrazení na Rn 213 2. Integrování podruhé 242 3. Diferenciální operátory 250 4. Poznámky o numerických metodách 259 Kapitola 9. Kombinatorické metody 261 1. Grafy a algoritmy 261 2. Aplikace kombinatorických postupů 282 Literatura 303 OBSAH v Předmluva Tento učební text vzniká průběžně při přípravě přednášek pro předměty Ma- tematika I­IV na Fakultě informatiky MU. Text se snaží prezentovat standardní výklad s akcentem na smysl a obsah prezentovaných matematických metod. Řešené úlohy pak procvičují základní pojmy, ale zároveň se snažíme dávat co nejlepší pří- klady užití matematických modelů. Studenti navíc mají řešit a odevzdávat každý týden zadávané příklady. Seminární skupiny pak obdobně standardním ,,cvičením vytváří podporu pro řešení domácích úloh. V tomto textu podáváme formální vý- klad proložený řešenými příklady, chceme dodat ale i úplný soubor řešených zadá- vaných úloh. Ne vše se daří průběžně naplňovat tak, jak bychom si představovali. Samotný te- oretický text by měl být podrobnější a lépe formulovaný, řešených příkladů bychom chtěli mít podstatně více a měly by pokrývat celou škálu složitosti, od banálních až po perličky ke skutečnému přemýšlení. Posluchače bychom rádi naučili: ˇ přesně formulovat definice základních pojmů a dokazovat jednoduchá ma- tematická tvrzení, ˇ vnímat obsah i přibližně formulovaných závislostí, vlastností a výhledů použití, ˇ vstřebat návody na užívání matematických modelů a osvojit si jejich vy- užití. K těmto ambiciózním cílům nelze dojít lehce a pro většinu lidí to znamená hledat cestu na více pokusů (s potřebným překonáváním odporu či nechutě). I proto je celý výklad strukturován tak, aby se pojmy a postupy vždy několikrát vracely s postupně rostoucí složitostí a šíří diskuse. Jsme si vědomi, že tento postup se může jevit jako chaotický, domníváme se ale, že dává mnohem lepší šanci na pochopení u těch, kteří si s hledáním cesty dají práci a překonají případný odpor. Vstup do matematiky je skoro pro každého obtížný ­ pokud už ,,víme , nechce se nám přemýšlet, pokud ,,nevíme , je to ještě horší. Jediný spolehlivý postup pro orientaci v matematice je hledat porozumnění v mnoha pokusech a hledat je při četbě v různých zdrojích. Určitě nepovažujeme tento text za dostatečný jediný zdroj pro každého. Pro ulehčení vícekolového přístupu ke čtení je text strukturován také pomocí barev takto ˇ normální text je sázen černě ˇ řešené příklady jsou sázeny barvou ˇ složitější text, který by měl být čten pozorněji, ale určitě ne přeskakován, je sázen barvou ˇ náročné pasáže, které mohou být při studiu přinejmenším napoprvé přeska- kovány jsou sázeny v barvě . vi OBSAH První dva semestry výuky už jednou proběhly a výsledných 7 kapitol máte v rukou. Popišme tedy nyní stručně obsah a také výhled na semestry následující. Úvodní motivační kapitola se snaží v rozsahu přibližně 5 týdnů přednášek ilu- strovat několik přístupů k matematickému popisu problémů. Začínáme nejjedno- duššími funkcemi (základní kombinatorické formule), naznačujeme jak pracovat se závislostmi zadanými pomocí okamžitých změn (jednoduché typy diferenčních rovnic), užití kombinatoriky a množinové algebry diskutujeme prostřednictvím ko- nečné klasické pravděpodobnosti, předvádíme maticový počet pro jednoduché úlohy rovinné geometrie a závěrem vše trochu zformalizujeme (relace, uspořádní, ekviva- lence). Nenechte se uvrhnout do chaotického zmatku příliš rychlým střídáním témat ­ cílem zde je nashromáždit něco málo netriviálních námětů k přemýšlení a hledání souvislostí i použití, ještě než zabředneme do úrovně problémů a teorií složitějších. Ke všem tématům této úvodní kapitoly se časem vrátíme. Dalších pět týdnů přednášek je věnováno základům počtu, který umožňuje práci s vícerozměrnými daty i grafikou. Jde o postupy tzv. lineární algebry, které jsou základem a konečným výpočetním nástrojem pro většinu matematických modelů. Jednoduché postupy pro práci s vektory a maticemi jsou obsahem kapitoly druhé, další kapitola je pak věnována aplikacím maticového počtu v různých lineárních modelech (systémy lineárních rovnic, lineární procesy, lineární diferenční rovnice, Markovovy procesy, lineární regrese). Poslední tři přednášky prvního semestru jsou věnovány aplikacím v geometric- kých úlohách a lze se z nich dozvědět něco málo o afinní, euklidovské a projektivní geometrii. Další semestr je věnován spojitým modelům. Chceme co nejnázorněji ukázat, že základní ideje, jak s funkcemi pracovat bývají jednoduché. Stručně řečeno, hledáme cesty, jak složitější věci nelineární povahy řešit pomocí jednoduchých lineárních triků a postupů lineární algebry. Složitosti se pojí skoro výhradně se zvládnutím rozumně velké třídy funkcí, pro které mají naše postupy být použitelné. Prvně proto přišla na řadu kapitola pátá, kde diskutujeme jaké funkce potřebujeme pro nelineární modely. Začínáme polynomy a spliny, pak postupně diskutujeme pojmy spojitosti a derivace a seznámíme se se všemi základními elementárními funkcemi a mocninnými řadami. Tím je připravena půda pro klasický diferenciální a integrální počet. Ten pre- zentujeme v kaptiole šesté s důrazem na co nejjednodušší pochopení aproximací a limitních procesů. Poslední sedmá kapitola se věnuje náznakům aplikací a snaží se co nejvíce připomínat analogie k postupům jednoduché lineární algebry z minu- lého semestru. Místo lineárních zobrazení mezi konečně rozměrnými vektorovými prostory tak pracujeme s lineárními operacemi mezi nekonečně rozměrnými vekto- rovými prostory funkcí, definovaných buď integrálními nebo diferenciálními operá- tory. Výhled obsahu pro další dva semestry je následující. Vměstná se do nich v dělení přibližně po dvou celcích v jednotlivých semestrech: (1) Nelineární modely podruhé (diferenciální a integrální počet více proměn- ných, ODE, PDE) ˇ kalkulus více proměnných, ˇ násobné integrály, ˇ metody optimalizace, ˇ systémy diferenciálních rovnic OBSAH vii (2) Kombinatorické metody (diskrétní matematika) ˇ rovinné grafy, barvení grafu, Eulerovy kružnice, problém obchodního cestujícího, stromy, minimální kostry, toky v sítích apod. ˇ rekurence, vytvořující funkce (3) Obecné matematické struktury (algebra) ˇ grupy, algebry, svazy, okruhy, pole, dělitelnost, rozklad na prvočísla, Eulerova věta, RSA algoritmus, jednoché kódy. (4) Pravděpodobnost a statistika ˇ pravděpodobnostní prostor, hustota pravděpodobnosti, normální roz- dělení, střední hodnota, medián, kvantil, rozptyl, příklady diskrétních a spojitých rozdělení ˇ statistické zpracování dat. Srpen 2006, Martin Panák, Jan Slovák KAPITOLA 8 Spojité modely s více proměnnými jedna proměnná nám k modelování nestačí? ­ nevadí, stačí vzpomenout na vektory ... 1. Funkce a zobrazení na Rn 8.1 8.1. Funkce a zobrazení. Na počátku našeho putování matematickou krajinou snad čtenáři vstřebali, že s vektory lze počítat velice podobně jako se skaláry, jen je třeba si věci dobře rozmyslet. Zcela obdobně si budeme počínat nyní. Pro praktické modelování procesů (nebo objektů v grafice) jen velice zřídka vystačíme s funkcemi R R jedné proměnné. Přinejmenším bývají potřebné funkce závislé na parametrech a často právě změna výsledků v závislosti na parametrech bývá důležitější než výsledek samotný. Připustíme proto funkce f(x1, x2, . . . , xn) : Rn R a budeme se snažit co nejlépe rozšířit naše metody pro sledování změn a hodnot do této situace. Říkáme jim funkce více proměnných. Pro snažší pochopení budeme nejčastěji pracovat s případy n = 2 nebo n = 3 a přitom budeme místo číslovaných proměnných používat písmena x, y, z. To znamená, že funkce f definované v ,,rovině R2 budou značeny f : R2 (x, y) f(x, y) R a podobně v ,,prostoru R3 f : R3 (x, y, z) f(x, y, z) R. Podobně jako u funkcí jedné proměnné hovoříme o definičním oboru A Rn , na kterém je ta která funkce definována.1 S každou takovou funkcí více proměnných bývá užitečné uvažovat její graf, tj. podmnožinu Gf Rn × R = Rn+1 definovanou vztahem Gf = {(x1, . . . , xn, f(x1, . . . , xn)); (x1, . . . , xn) A}, kde A je definiční obor f. Např. grafem funkce definované v rovině vztahem f(x, y) = x + y x2 + y2 je docela pěkná plocha na levém obrázku a jejím maximálním definičním oborem jsou všechny body roviny kromě počátku (0, 0). 1Častou hříčkou pro písemky a úlohy je naopak úkol pro danou formuli pro funkci najít co největší definiční obor, na kterém má tato formule smysl. 213 214 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 3 2 1 0 y-4 -3 -1 -2 -2 -1 0 -2 0 1x 2 2 -3 3 4 15/62/31/21/31/6 0 2*Pi 11/6*Pi 5/3*Pi 3/2*Pi 4/3*Pi 7/6*Pi Pi 5/6*Pi 2/3*Pi 1/2*Pi 1/3*Pi 1/6*Pi 0 Při definici a zejména při kreslení obrázku grafu jsme používali pevně zvolené souřadnice v rovině. Pro pevně zvolené x tak např. dostáváme zobrazení R R3 , y (x, y, f(x, y)), tj. křivku v prostoru R3 . Na obrázku jsou také čarami vyneseny obrazy takovýchto křivek pro některé pevně zvolené hodnoty souřadnic x a y. Křivky c : R Rn jsou nejjednoduššími příklady zobrazení F : Rm Rn . Stejně jako u vektorových prostorů, volba našeho ,,pohledu na věc , tj. volba souřadnic, může zdánlivě zjednodušit nebo zhoršit naše vnímání studovaného ob- jektu. Změna souřadnic je nyní na místě v daleko obecnější formě než jen u afinních zobrazení v kapitole čtvrté. Opět je ale vhodné na změnu souřadnic pohlížet jako na zobrazení Rn Rn . Velice obvyklý příklad je změna nejobvyklejších souřadnic v rovině na tzv. polární, tj. polohu bodu P zadáváme pomocí jeho vzdálenosti od počátku souřadnic r = x2 + y2 a úhlem = arctan(y/x) (pokud je x = 0) mezi spojnicí s počátkem a osou x. Přechod z polárních souřadnic do standardních je Ppolární = (r, ) (r cos , r sin ) = Pkartézské Je přitom zjevné, že je nutné polární souřadnice vhodně omezit na podmnožinu bodů (r, ) v rovině, aby existovalo i zobrazení inverzní. Kartézský obraz přímek v polárních souřadnicích s konstantními souřadnicemi r nebo je na obrázku vpravo. 8.2 8.2. Euklidovské prostory. Bude velice užitečné připomenout a rošířit naše vě- domosti o vlastnostech euklidovských afinních prostorů. Začneme připomenutím metrických (topologických) vlastností prostoru En = Rn : Prostor En vnímáme jako množinu bez volby souřadnic a na jeho zaměření Rn pohlížíme jako na vektorový prostor možných přírůstků, které umíme k bodům prostoru En přičítat. Navíc je na Rn zvolen standardní skalární součin u v = n i=1 xiyi, kde u = (x1, . . . , xn) a v = (y1, . . . , yn) jsou libovolné vektory. Tím je na En dána metrika, tj. funkce vzdálenosti P - Q dvojic bodů P, Q předpisem P - Q 2 = u 2 = n i=1 x2 i , 1. FUNKCE A ZOBRAZENÍ NA Rn 215 kde u je vektor, jehož přičtením k P obdržíme Q. Např. v rovině E2 je tedy vzdá- lenost bodů P1 = (x1, y1) a P2 = (x2, y2) dána P1 - P2 2 = (x1 - x2)2 + (y1 - y2)2 . Takto definovaná metrika splňuje trojúhelníkovou nerovnost pro každé tři body P, Q, R P - R = (P - Q) + (Q - R) (P - Q) + (Q - R) , viz 4.14(1) (nebo stejnou nerovnost (5.4) pro skaláry). Můžeme proto bez probleému přenést (rozšířit) pro body Pi libovolného Euklidovského prostoru pojmy: ˇ Cauchyovská posloupnost ­ Pi - Pj < , pro každé pevně zvolené > 0 až na konečně mnoho výjimečných hodnot i, j, ˇ konvergentní posloupnost ­ Pi - P < , pro každé pevně zvolené > 0 až na konečně mnoho výjimečných hodnot i, j, bod P pak nazýváme limitou posloupnosti Pi, ˇ hromadný bod P množiny A En ­ existuje posloupnost bodů v A konvergující k P a vesměs různých od P, ˇ uzavřená množina ­ obsahuje všechny své hromadné body, ˇ otevřená množina ­ její doplněk je uzavřený, ˇ otevřené ­okolí bodu P ­ množina O(P) = {Q En; P - Q < }, ˇ hraniční bod P množiny A ­ každé ­okolí bodu P má neprázdný průnik s A i s komplementem En \ A, ˇ vnitřní bod P množiny A ­ existuje ­okolí bodu P, které celé leží uvnitř A, ˇ ohraničená množina ­ leží celá v nějakém ­okolí některého svého bodu (pro dostatečně velké ), ˇ kompaktní množina ­ uzavřená a ohraničená množina. Čtenář by měl nyní investovat něco málo úsilí do pročtení odstavců 4.14, 5.10 a 5.11 a zkusit si promyslet definice a souvislosti všech těchto pojmů. Zejména by mělo být z definic přímo zřejmé, že posloupnosti bodů Pi mají vlastnosti zmiňované v prvních dvou bodech předchozím výčtu tehdy a jen tehdy, když stejně nazvané vlastnosti mají reálné posloupnosti vzniklé z jednotlivých sou- řadnic bodů Pi ve kterékoliv kartézské souřadné soustavě. Proto také z Lemma 5.9 vyplývá, že každá Caychovská posloupnost bodů v En je konvergentní. Stejně jako v případě E1 definujeme otevřené pokrytí množiny a platí s drob- nými formulačními úpravami i Věta 5.11: Věta. Pro podmnožiny A En v euklidovských prostorech platí: (1) A je otevřená, právě když je sjednocením nejvýše spočetného systému ­okolí, (2) každý bod a A je buď vnitřní nebo hraniční, (3) každý hraniční bod je buď izolovaným nebo hromadným bodem A, (4) A je kompaktní, právě když každá v ní obsažená nekonečná posloupnost má podposloupnost konvergující k bodu v A, (5) A je kompaktní, právě když každé její otevřené pokrytí obsahuje konečné pokrytí. Důkaz z 5.11 lze bez úprav použít v případě tvrzení (1)­(3), byť s novým chápání pojmů a nahrazením ,,otevřených intervalů jejich vícerozměrnými ­okolími vhodných bodů. Důkaz pro zbylá dvě tvrzení je však třeba dosti zásadně upravit. Nebudeme se tu zabývat detaily, ambicióznější čtenáři mohou zkusit samostatně princip ohraničování stále menšími a menšími intervaly modifikovat s použitím ­okolí. 216 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 8.3 8.3. Křivky v En. Celá naše diskuse kolem limit, derivací a integrálů funkcí v 5. a 6. kapitole pracovala s funkcemi s jednou reálnou proměnnou a reálnými nebo komplexními hodnotami s odůvodněním, že používáme pouze trojúhelníkovou nerovnost platnou pro velikosti reálných i komplexních čísel. Ve skutečnosti se tento argument do značné míry přenáší na jakékoliv funkce jedné reálné proměnné s hodnotami v euklidovském prostoru En = Rn . Pro každou křivku2 , tj. zobrazení c : R Rn v n­rozměrném prostoru, můžeme pracovat s pojmy, které jednoduše rozšiřují naše úvahy z funkcí jedné proměnné: ˇ limita: limtt0 c(t) Rn ˇ derivace: c (t0) = limtt0 1 |t-t0| (c(t) - c(t0)) Rn ˇ integrál: b a c(t)dt Rn . V případě integrálu přitom musíme uvažovat křivky ve vektorovém prostoru Rn . Důvod je vidět už v jednorozměrném případě, kde potřebujeme znát počátek, abychom mohli vidět ,,plochu pod grafem funkce . Opět je přímo z definice zjevné, že limity, derivace i integrály lze spočíst po jednotlivých n souřadných složkách v Rn a stejně se rozpozná i jejich existence. U integrálu můžeme také přímo formulovat pro křivky analogii souvislosti Ri- emannova integrálu a antiderivace (viz 6.12): Nechť c je křivka v Rn , spojitá na intervalu [a, b]. Pak existuje její Riemannův integrál b a c(t)dt. Navíc je křivka C(t) = t a c(s)ds Rn dobře definovaná, diferencovatelná a platí C (t) = c(t) pro všechny hodnoty t [a, b]. Horší je to s větou o střední hodnotě a obecněji s Taylorovou větou, viz 6.2 a 6.7. Ve zvolených souřadnicích je můžeme aplikovat na jednotlivé souřadné funkce diferencovatelné křivky c(t) = (c1(t), . . . , cn(t)) na konečném intervalu [a, b]. Do- staneme např. u věty o střední hodnotě existenci čísel ti takových, že ci(b) - ci(a) = (b - a) ci(ti). Tato čísla ale budou obecně různá, nemůžeme proto vyjádřit rozdílový vektor kon- cových bodů c(b) - c(a) jako násobek derivace křivky v jediném bodě. Např. v rovině E2 pro diferencovatelnou křivku c(t) = (x(t), y(t)) takto dostáváme c(b) - c(a) = (x ()(b - a), y ()(b - a)) = (b - a) (x (), y ()) pro dvě (obecně různé) hodnoty , [a, b]. Pořád nám ale tato úvaha stačí na následující odhad Lemma. Je-li c křivka v En se spojitou derivací na kompaktním intervalu [a, b], pak pro všechny a s t b platí c(t) - c(s) n maxr[a,b] c (r) |t - s|. 2 v geometrii se většinou rozlišuje mezi křivkou jakožto podmnožinou v En a její parametrizací R Rn. My zde pod pojmem ,,křivka rozumíme výhradně parametrizované křivky. 1. FUNKCE A ZOBRAZENÍ NA Rn 217 Důkaz. Přímým použitím věty o střední hodnotě dostáváme pro vhodné body ri uvnitř intervalu [s, t]: c(t) - c(s) 2 = n i=1 (ci(t) - ci(s))2 n i=1 (ci(ri)(t - s))2 (t - s)2 n i=1 (maxr[s,t] |ci(r)2 n(maxr[s,t], i=1,...,n |ci(r)|)2 (t - s)2 n maxr[s,t] c (r) 2 (t - s)2 . Důležitým pojmem je tečný vektor ke křivce c : R En v bodě c(t0) En, který definujeme jako vektor v prostoru zaměření Rn daný derivací c (t0) Rn . Přímka T zadaná parametricky T : c(t0) + c (t0) se nazývá tečna ke křivce c v bodě t0. Na rozdíl od tečného vektoru, tečna T zjevně nezávisí na parametrizaci křivky c. 8.4. Příklad. Určete parametrické i obecné rovnice tečny ke křivce c : R R3 , c(t) = (c1(t), c2(t), c3(t)) = (t, t2 , t3 ) v bodě odpovídajícím hodnotě parametru t = 1. Řešení. Parametru t = 1 odpovídá bod c(1) = [1, 1, 1]. Derivace jednotlivých složek jsou c1(t) = 1, c2(t) = 2t, c3(t) = 3t2 . Hodnoty derivací v bodě t = 1 jsou 1, 2, 3. Parametrické vyjádření tečny tedy zní: x = c1(1)s + c1(1) = t + 1 y = c2(1)s + c2(1) = 2t + 1 z = c3(1)s + c3(1) = 3t + 1. Vyloučením parametru t dostáváme obecné rovnice tečny (nejsou dány kanonicky): 2x - y = 1 3x - z = 2. 8.4 8.5. Parciální derivace a diferenciál. Pro každou funkci f : Rn R a libovol- nou křivku c : R Rn máme k dispozici jejich kompozici (f c)(t) : R R. Za hladké nebo diferencovatelné funkce bychom tedy mohli např. považovat ty, jejichž kompozice se všemi hladkými nebo diferencovatelnými funkcemi jsou opět hladké nebo diferencovatelné. Začneme ale raději s nejjednoduššími křivkami, tj. přímkami. Řekneme, že f : Rn R má derivaci ve směru vektoru v Rn v bodě x En, jestliže existuje derivace dvf(x) složeného zobrazení t f(x + tv) v bodě t = 0, tj. dvf(x) = lim t0 1 t (f(x + tv) - f(x)). Často se dvf říká směrová derivace. Speciální volbou přímek ve sěru souřadných os dostáváme tzv. parciální derivace funkce f, které značíme f xi , i = 1, . . . , n, nebo 218 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI bez odkazu na samotnou fukci jako operace xi . Pro funkce v rovině tak dostáváme x f(x, y) = lim t0 1 t (f(x + t, y) - f(x, y)), y f(x, y) = lim t0 1 t (f(x, y + t) - f(x, y)). Se samotnými parciálními nebo směrovými derivacemi nevystačíme pro dobrou aproximaci chování funkce lineárními výrazy. Podívejme se např. na funkce v rovině dané výrazy g(x, y) = 1 když xy = 0 0 jinak , h(x, y) = 1 když y = x2 = 0 0 jinak . Evidentně žádná z nich neprodlužuje všechny hladké křivky procházející bodem (0, 0) na hladké křivky. Přitom ale pro g existují obě parciální derivace v (0, 0) a jiné směrové derivace neexistují, zatímco pro h existují všechny směrové derivace v bodě (0, 0) a je dokonce dvh(0) = 0 pro všechny směry v, takže jde o lineární závislost na v R2 . Budeme sledovat případ funkcí jedné proměnné co nejdůsledněji a podobné patologické chování vyloučíme přímo definicí: Definice. Funkce f : Rn R je diferencovatelná v bodě x, jestliže ˇ v bodě x existují všechny směrové derivace dvf(x), v Rn , ˇ dvf(x) je lineární v závislosti na přírůstku v a ˇ 0 = limv0 1 v f(x + v) - f(x) - dvf(x) . Řečeno slovy požadujeme, aby v bodě x existovalo dobré lineární přiblížení přírůstků funkce f lineární funkcí přírůstků proměnných veličin. Lineární výraz dvf (ve vektorové proměnné v) nazýváme diferenciál funkce f vyčíslený na přírůstku v. V literatuře se často také říká totální diferenciál df funkce f. Pro ilustraci se podívejme se, jak se chová diferenciál funkce f(x, y) v rovině za přepokladu, že obě parciální derivace f x , f y existují a jsou spojité v okolí bodu (x0, y0). Uvažme jakoukoliv hladkou křivku t (x(t), y(t)) s x0 = x(0), y0 = y(0). S použitím věty o střední hodnotě na funkce jedné proměnné v obou sčítancích dovodíme 1 t (f(x(t), y(t)) - f(x0, y0)) = 1 t f(x(t), y(t)) - f(x(0), y(t) + + 1 t f(x(0), y(t)) - f(x(0), y(0) = 1 t (x(t) - x(0)) f x (x(), y(t)) + 1 t (y(t) - y(0)) f y (x(0), y()) pro vhodná čísla a mezi 0 a t. Limitním přechodem t 0 pak díky spojitosti parciálních derivací dostáváme d dt f(x(t), y(t))|t=0 = x (0) f x (x0, y0) + y (0) f y (x0, y0) což je příjemné rozšíření platnosti věty o derivování složených funkcí. Samozřejmě, speciální volbou parametrizovaných přímek (x(t), y(t)) = (x0 + t, y0 + t) 1. FUNKCE A ZOBRAZENÍ NA Rn 219 přechází náš výpočet při v = (, ) na rovnost dvf(x0, y0) = f x + f y a tento vztah můžeme pěkně vyjádřit způsobem, kterým jsme v lineární algebře zapisovali souřadná vyjádření lineárních funkcí na vektorových prostorech: df = f x dx + f y dy. Jinými slovy, diferenciál je lineární funkce Rn R na přírůstcích se souřadnicemi danými právě parciálními derivacemi. Náš výpočet zároveň ukázal, že skutečně tato lineární funkce df má aproximační vlastnosti diferenciálu, kdykoliv parciální derivace jsou spojité v okolí daného bodu. V případě funkcí více proměnných píšeme obdobně e8.1 (8.1) df = f x1 dx1 + f x2 dx2 + + f xn dxn a platí: Věta. Nechť f : En R je funkce n proměnných, která má v okolí bodu x En spojité parciální derivace. Pak existuje její diferenciál df v bodě x a jeho souřadné vyjádření je dáno rovnicí (8.1). Důkaz. Odvození věty je naprosto analogické výše uvedenému důkazu v pří- padě n = 2. 8.5 8.6. Tečná rovina ke grafu funkce. Uvažujme libovolnou diferencovatelnou funkci f : En R. Protože každá směrová derivace je vyčíslena jako derivace funkce jedné proměnné t f(x + tv), můžeme i v této souvislosti využít větu o střední hodnotě: e8.2 (8.2) f(x + tv) - f(x) = t df(x + t0v)(v) = t dvf(x + t0v) pro vhodné t0 mezi nulou a t. Jinými slovy, přírůstek funkčních hodnot v bodech x + tv a x je vždy vyjádřen pomocí směrové derivace ve vhodném bodě na jejich spojnici. Pro případ funkce na E2 a pevně zvoleného bodu (x0, y0) E2 uvažme rovinu v E3 zadanou rovnicí z = f(x0, y0) + df(x0, y0)(x - x0, y - y0) = f(x0, y0) + f x (x0, y0)(x - x0) + f y (x0, y0)(y - y0). Tato rovina má jako jediná ze všech rovin procházejících bodem (x0, y0) vlastnost, že v ní leží derivace a tedy i tečny všech křivek c(t) = (x(t), y(t), f(x(t), y(t))). Říkáme jí tečná rovina ke grafu funkce f. Na obrázku jsou zobrazeny dvě tečné roviny ke grafu funkce f(x, y) = sin(x) cos(y). Červená čára je obrazem křivky c(t) = (t, t, f(t, t)). 220 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 0 1 2 3 x 0 -2 4 1 2 -1 5 3 4 0 y 5 6 6 1 2 0 1 2 3 x 0 -2 4 1 2 -1 5 3 4 0 y 5 6 6 1 2 Pro funkce n proměnných definujeme tečnou rovinu jako afinní nadrovinu v En+1. Místo zaplétání se do spousty indexů bude snad užitečná vzpomínka na afinní geometrii: Je to nadrovina procházející bodem (x, f(x)) se zaměřením, které je grafem lineárního zobrazení df(x) : Rn R, tj. diferenciálu v bodě x En. Ještě jinak můžeme také říci, že směrová derivace dvf je dán přírůstkem na tečné rovině odpovídajícím přírůstku argumentu v. Z těchto úvah vyplývá řada analogií s funkcemi jedné proměnné. Zejména má diferencovatelná funkce f na En v bodě x En nulový diferenciál tehdy a jen tehdy, když její složení s libovolnou křivkou procházející tímto bodem zde má stacionární bod, tj. ani neroste ani neklesá v lineárním přiblížení. Jinak řečeno, tečná rovina je rovnoběžná s nadrovinou proměnných (tj. její zaměření je En En+1 s nulovou přidanou souřadnicí pro hodnoty f). To ovšem neznamená, že v takovém bodě musí mít f aspoň lokálně buď maximum nebo minimum. Stejně jako u funkcí jedné proměnné můžeme rozhodovat teprve podle derivací vyšších. 8.7. Příklady. 8.7.1. Určete, zda tečná rovina ke grafu funkce f : R × R+ R, f(x, y) = x ln(y) v bodě [1, 1 e ] prochází bodem (1, 2, 3) R3 . Řešení. Určíme nejdříve parciální derivace: f(x,y) x = ln(y), f(x,y) y = x y , jejich hodnoty v bodě (1, 1 e ) jsou -1, e, dále f(1, 1 e ) = -1. Rovnice tečné roviny je tedy z = f 1, 1 e + f(x, y) x 1, 1 e (x + 1) + f(x, y) y 1, 1 e y - 1 e = -1 - x + ey. Této rovnici daný bod nevyhovuje, v tečné rovnině tedy neleží. 8.7.2. Určete parametrické vyjádření tečny k průsečnici grafů funkcí f : R2 R, f(x, y) = x2 + xy - 6, g : R × R+ R, g(x, y) = x ln(y) v bodě [2, 1]. Řešení. Tečna k průsečnici je průsečnicí tečných rovin v daném bodě. Tečná rovina ke grafu funkce f procházející bodem [2, 1] je z = f (2, 1) + f(x, y) x (2, 1) (x - x0) + f(x, y) y (2, 1) (y - y0) = 5x + 2y - 12. 1. FUNKCE A ZOBRAZENÍ NA Rn 221 Tečná rovina k grafu g je pak z = f (2, 1) + g(x, y) x (2, 1) (x - x0) + g(x, y) y (2, 1) (y - y0) = 2y - 2. Průsečnicí těchto dvou rovin je přímka daná parametricky jako [2, t, 2t - 2], t R Alternativně: normála k ploše určené rovnicí f(x, y, z) = 0 v bodě b = [2, 1, 0] je (fx(b), fy(b), fz(b)) = (5, 2, -1), normála k ploše určené jako g(x, y, z) = 0 v tomtéž bodě je (0, 2, -1). Tečna je kolmá na obě normály, její směrový vektor získáme tedy např. vektorovým součinem normál, což je (0, 5, 10). Protože tečna prochází bodem [2, 1, 0] je její parametrické vyjádření [2, 1 + t, 2t], t R. 8.6 8.8. Derivace vyšších řádů. Jestliže vybereme pevný přírůstek v Rn , zadává vyčíslení diferenciálů na tomto přírůstku (diferenciální) operaci na diferencovatel- ných funkcích f : En R f dvf = df(v) a výsledkem je opět funkce df(v) : En R. Jestliže je tato funkce opět diferencova- telná, může opakovat totéž s jiným přírůstkem atd. Zejména tedy můžeme pracovat s iteracemi parciálních derivací. Pro parciální derivace druhého řádu píšeme ( xj xi )f = 2 xixj f = 2 f xixj v případě opakované volby i = j píšeme také ( xi xi )f = 2 x2 i f = 2 f x2 i . Úplně stejně postupujeme při dalších iteracích a hovoříme o parciálních derivacích k-tého řádu k f xi1 . . . xik . Obecněji můžeme iterovat (u dostatečně diferencovatelných funkcí) také libovolné směrové derivace, např. dv dwf pro dva pevné přírůstky v, w Rn . Abychom si vše ukázali v co nejjednodušší formě, budeme opět pracovat chvíli v rovině E2 za přepokladu spojitosti parciálních derivací druhého řádu. V rovině a prostoru se často stručně značí iterované derivace pouhými odkazy jmen proměn- ných v pozici indexů u funkce, např. fx = f x , fxx = 2 f x2 , fyx = 2 f xy , fxy = 2 f yx . Ukážeme, že ve skutečnosti spolu parciální derivace komutují, tzn. není potřeba dbát na pořadí, ve kterém je provádíme. 222 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Podle předpokladu existuje limita fxy(x, y) = lim t0 1 t ` fx(x, y + t) - fx(x, y) ´ = lim t0 1 t ,, lim s0 1 s ` f(x + s, y + t) - f(x, y + t) - f(x + s, y) + f(x, y) ´ = lim t0 1 t2 ,, ` f(x + t, y + t) - f(x, y + t) ´ - ` f(x + t, y) - f(x, y) ´ a je spojitá v (x, y). Označme si výraz, ze kterého bereme poslední limitu, jako funkci (x, y, t) a zkusme jej vyjádřit pomocí parciálních derivací. Pro dočasně pevné t si označme g(x, y) = f(x + t, y) - f(x, y). Pak výraz v poslední velké závorce je roven g(x, y + t) - g(x, y) = t gy(x, y + t0). pro nějaké vhodné t0, které je mezi nulou a t (a na t závisí), viz rovnost (8.2) s dosazenou hodnotou přírůstku v = (0, 1)). Nyní gy(x, y) = fy(x + t, y) - fy(x, y) a proto můžeme psát jako (x, y, t) = 1 t gy(x, y + t0) = 1 t ` fy(x + t, y + t0) - fy(x, y + t0) ´ . Opětovnou aplikací věty o střední hodnotě, (x, y, t) = fyx(x + t1, y + t0) pro vhodné t1 mezi nulou a t. Když ale velkou závorku rozdělíme na (f(x + t, y + t) - f(x + t, y)) - (f(x, y + t) - f(x, y)), dostaneme stejným postupem s funkcí h(x, y) = f(x, y + t) - f(x, y) vyjádření (x, y, t) = fxy(x + s0, y + s1) s obecně jinými konstantami s0 a s1. Protože jsou druhé parciální derivace podle našeho předpoklady spojité, musí i limita pro t 0 zaručit požadovanou rovnost fxy(x, y) = fyx(x, y) ve všech bodech (x, y). Stejný postup pro funkce n proměnných dokazuje následující tvrzení: Věta. Nechť f : En R je k-krát diferencovatelná funkce se spojitými parciálními derivacemi až do řádu k včetně v okolí bodu x Rn . Pak všechny parciální derivace nezávisí na pořadí derivování. Důkaz. Důkaz pro druhý řád byl proveden výše pro n = 2 a postup v obecném případě se nijak neliší. Formálně můžeme obecný případ u dvou derivací odbýt i tvrzením, že se vždy celá argumentace odehraje ve dvourozměrném afinních podprostoru. U derivací vyššího řádu lze důkaz dokončit indukcí podle řádu. Skutečně, každé pořadí indexů lze vytvořit záměnami sousedících dvojic. Definice. Je-li f : Rn R libovolná dvakrát diferencovatelná funkce, nazýváme symetrickou matici funkcí Hf(x) = 2 f xixj (x) = 2 f x1x1 (x) . . . 2 f x1xn (x) ... ... ... 2 f xnx1 (x) . . . 2 f xnxn (x) Hessián funkce f v bodě x. 1. FUNKCE A ZOBRAZENÍ NA Rn 223 Z předchozích úvah jsme již viděli, že vynulování diferenciálu v bodě (x, y) E2 zaručuje stacionární chování podél všech křivek v tomto bodu. Hessián Hf(x, y) = fxx(x, y) fxy(x, y) fxy(x, y) fyy(x, y) hraje roli druhé derivace. Pro každou křivku c(t) = (x(t), y(t)) = (x0 +t, y0 +t) budou totiž mít funkce jedné proměnné (t) = f(x(t), y(t)) (t) = f(x0, y0) + f x (x0, y0) + f y (x0, y0) + 1 2 fxx(x0, y0)2 + 2fxy(x0, y0) + fyy(x0, y0)2 stejné derivace do druhého řádu včetně (přepočtěte!). Funkci přitom můžeme zapsat vektorově jako (t) = f(x0, y0) + df(x0, y0) + 1 2 ( ) Hf(x0, y0) nebo (t) = f(x0, y0)+df(x0, y0)(v)+ 1 2 Hf(x0, y0)(v, v), kde v = (, ) je přírůstek zadaný derivací křivky c(t) a Hessián je použit jako symetrická 2­forma. To je vyjádření, které již určitě připomíná Taylorovu větu funkcí jedné pro- měnné, přesněji řečeno kvadratické přiblížení funkce Taylorovým polynomem dru- hého řádu. Na následujícím obrázku je vynesena jak tečná rovina tak toto kvadra- tické přiblížení pro dva různé body a funkci f(x, y) = sin(x) cos(y). 6 5 4 x 3 2 1 0 0 1 2 3 4 y 5 6-2 -1 0 1 2 6 5 4 x 3 2 1 0 0 1 2 3 4 y 5 6-2 -1 0 1 2 8.7 8.9. Taylorova věta. Vícerozměrná verze Taylorovy věty je také příkladem ma- tematického tvrzení, kde složitou částí je nalezení správné formulace. Důkaz je už pak snadný. Budeme postupovat ve výše naznačeném směru a zavedeme si značení pro jednotlivé části Dk f aproximací vyšších řádů. Budou to vždy k­lineární výrazy v přírůstcích a nás bude zajímat jen jejich vyčíslení na k stejných hodnotách. Již jsme diskutovali diferenciál D1 f = df v prvním řádu a hessián D2 f = Hf v řádu druhém. Obecně pro funkce f : En R, body x = (x1, . . . , x2) En a přírůstky v = (1, . . . , n) klademe Dk f(x)(v) = 1i1,...,ikn k f xi1 . . . xik (x1, . . . , xn) i1 ik . 224 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Názorným příkladem (s využitím symetrií parciálních derivací) je pro E2 výraz třetího řádu D3 f(x, y)(, ) = 3 f x3 3 + 3 3 f x2y 2 + 3 3 f xy2 2 + 3 f y3 3 a obecně Dk f(x, y)(, ) = k =0 k k f xk- y k- . Věta. Nechť f : En R je k­krát diferencovatelná funkce v okolí O(x) bodu x En. Pro každý přírůstek v Rn s velikostí v < pak existuje číslo 0 1 takové, že f(x + v) = f(x) + D1 f(x)(v) + 1 2! D2 f(x)(v) + + 1 (k - 1)! Dk-1 f(x)(v) + 1 k! Dk f(x + v)(v). Důkaz. Pro přírůstek v Rn zvolme křivku c(t) = x + tv v En a zkoumejme funkci : R R definovanou složením (t) = f c(t). Taylorova věta pro funkce jedné proměnné říká (viz Věta 6.7) e8.3 (8.3) (t) = (0) + (0)t + + 1 (k - 1)! (k-1) (0)tk-1 + 1 k! (k) ()tk . Zbývá nám tedy jen ověřit, že postupným derivováním složené funkce dostaneme právě požadovaný vztah. To lze snadno provést indukcí přes řád k. Pro k = 1 splývá Taylorova věta se vztahem v rovnosti (8.2). Při jeho odvození jsme vyšli ze vztahu d dt (t) = f x1 (x(t)) x1(t) + + f xn (x(t)) xn(t), který platí pro každou křivku a funkci f. To znamená, že D1 f(c(t))(v) = D1 f(c(t))(c (t)) pro všechna t v okolí nuly. Stejně budeme postupovat pro funkce D f. Místo přírůstku v můžeme psát c (t) a zapamatujme si, že další derivování c(t) již vede identicky na nulu všude, tj. c (t) = 0 pro všechna t (protože jde o parametrizovanou přímku). Předpokládejme, že D f(x)(v) = X 1i1,...,i n f xi1 . . . xi (x1(t), . . . , xn(t)) xi1 (t) xi (t) a spočtěme totéž pro + 1. Derivování složené funkce dá podle pravidla o derivání součinu (viz Věta 5.22) d dt D f(c(t))(c (t)) = d dt X 1i1,...,i n f xi1 . . . xi (x1(t), . . . , xn(t)) xi1 (t) xi (t) = X 1i1,...,i n ,, nX j=1 +1 f xi1 . . . xi xj (x1(t), . . . , xn(t)) xj(t) xi1 (t) xi (t) + 0 a to skutečně je požadovaný vztah pro řád + 1. Taylorova věta nyní vyplývá z vyčíslení v bodě t = 0 a dosazení do (8.3). 8.10. Příklady. 1. FUNKCE A ZOBRAZENÍ NA Rn 225 8.10.1. Napište Taylorův rozvoj druhého řádu funkce f : R2 R, f(x, y) = ln(x2 + y2 + 1) v bodě [1, 1]. Řešení. Nejprve spočítáme první parciální derivace: fx = 2x x2 + y2 + 1 , fy = 2y x2 + y2 + 1 , poté druhý totální diferenciál daný Hessiánem: Hf = 2y2 -2x2 +2 (x2+y2+1)2 - 4xy (x2+y2+1)2 - 4xy (x2+y2+1)2 2x2 -2y2 +2 (x2+y2+1)2 . Hodnota Hessiánu v bodě [1, 1] je 2 9 -4 9 -4 9 2 9 , celkem tedy již můžeme napsat Taylorův rozvoj druhého řádu v bodě [1, 1]: T2 (f)(1, 1) = f(1, 1) + fx(1, 1)(x - 1) + fy(1, 1)(y - 1) + + 1 2 (x - 1, y - 1)Hf(1, 1) x - 1 y - 1 = ln(3) + 2 3 (x - 1) + 2 3 (y - 1) + 1 9 (x - 1)2 - - 4 9 (x - 1)(y - 1) + 1 9 (y - 1)2 = 1 9 (x2 + y2 + 8x + 8y - 4xy - 14) + ln(3). 8.10.2. Určete Taylorův polynom druhého řádu funkce ln(x2 y) v bodě [1, 1]. Řešení. T2 ln(xy+1)(1, 1) = ln(2) + 1 4 (x2 + y2 + xy - x - y - 1). 8.10.3. Určete Taylorův rozvoj druhého řádu funkce f : R2 R, f(x, y) = tan(xy + y) v bodě (0, 0). Řešení. y + xy. 226 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 8.11. Lokální extrémy funkcí více proměnných. Zkusme se nyní s pomocí diferenciálu a hessiánu podívat na lokální maxima a minima funkcí na En. Stejně jako v případě funkce jedné proměnné řekneme o vnitřním bodu x0 En definičního oboru funkce f, že je (lokálním) maximem nebo minimem, jestliže existuje jeho okolí U takové, že pro všechny body x U splňuje funkční hodnota f(x) f(x0) nebo f(x) f(x0). Pokud nastává v předchozích nerovnostech ostrá nerovnost pro všechny x = x0, hovoříme o ostrém extrému. Pro jednoduchost budeme nadále předpokládat, že naše funkce f má spojité parciální derivace prvního i druhého řádu na svém definičním oboru. Nutnou pod- mínkou pro existenci maxima nebo minima v bodě x0 je vymizení diferenciálu v tomto bodě, tj. df(x0) = 0. Skutečně, pokud je df(x0) = 0, pak existuje směr v, ve kterém je dvf(x0) = 0. Pak ovšem nutně je podél přímky x0 + tv na jednu stranu od bodu x0 hodnota funkce roste a na druhou klesá, viz (8.2). Vnitřní bod x En definičního oboru funkce f, ve kterém je diferenciál df(x) nulový nazýváme stacionární bod funkce f. Budeme opět pracovat s jednoduchou funkcí v E2 abychom závěry přímo mohli ilustrovat. Uvažme funkci f(x, y) = sin(x) cos(y), která už byla předmětem dis- kuse a obrázků v odstavcích 8.8 a 8.6. Svým tvarem tato funkce připomíná známá kartonová plata na vajíčka, je tedy předem zřejmé, že najdeme řadu extrémů, ale ještě více stacionárních bodů, která ve skutečnosti extrémy nebudou (ta ,,sedýlka viditelná na obrázku). 00 -1 22 -0,5 44 0 66 0,5 8 8 1 Spočtěme si tedy první a poté druhé derivace: fx(x, y) = cos(x) cos(y), fy(x, y) = - sin(x) sin(y), takže obě derivace budou nulové pro dvě sady bodů (1) cos(x) = 0, sin(y) = 0, to je (x, y) = (2k+1 2 , ), pro libovolné k, Z (2) cos(y) = 0, sin(x) = 0, to je (x, y) = (k, 2 +1 2 ), pro libovolné k, Z. Druhé parciální derivace jsou Hf(x, y) = fxx fxy fxy fyy (x, y) = - sin(x) cos(y) - cos(x) sin(y) - cos(x) sin(y) - sin(x) cos(y) V našich dvou sadách bodů tedy dostáváme následující hessiány: (1) Hf(k + 2 , ) = 1 0 0 1 , přičemž znaménko + nastává, když parity k a jsou stejné a naopak pro -, 1. FUNKCE A ZOBRAZENÍ NA Rn 227 (2) Hf(k, + 2 ) = 0 1 1 0 , přičemž znaménko + nastává, když parity k a jsou stejné a naopak pro -. Když se nyní podíváme na tvrzení Taylorovy věty pro řád k = 2, dostáváme v okolí jednoho ze stacionárních bodů (x0, y0) f(x, y) = f(x0, y0) + 1 2 Hf(x0 + (x - x0), y0 + (y - y0))(x - x0, y - y0), kde Hf nyní vnímáme jako kvadratickou formu vyčíslenou na přírůstku (x-x0, y- y0). Protože naše funkce má spojitý hessián (tj. spojité parciální derivace do dru- hého řádu včetně), a matice hessiánu jsou nedegenerované, nastane lokální maxi- mum tehdy a jen tehdy, když náš bod (x0, y0) patří do první skupiny se stejnými paritami k a . Když budou parity opačné, pak bod z první skupiny bude naopak bodem lokálního minima. Naopak, hessián u druhé skupiny bodů se vždy vyčíslí kladně na některých přírůstcích a záporně na jiných. Proto se tak bude chovat i celá funkce f v malém okolí daného bodu. Abychom mohli zformulovat obecné tvrzení o hessiánu a lokálních extrémech ve stacionárních bodech, musíme připomenout diskusi o kvadratických formách v odstavcích ??­?? v kapitole o afinní geometrii. Zavedli jsme tam pro kvadratickou formu h : En R následující přívlastky ˇ positivně definitní, je-li h(u) > 0 pro všechny u = 0 ˇ positivně semidefinitní, je-li h(u) 0 pro všechny u V ˇ negativně definitní, je-li h(u) < 0 pro všechny u = 0 ˇ negativně semidefinitní, je-li h(u) 0 pro všechny u V ˇ indefinitní, je-li h(u) > 0 a f(v) < 0 pro vhodné u, v V . Zavedli jsme také nějaké metody, které umožňují přímo zjistit, zda daná forma má některý z těchto přívlastků. Způsob našeho předchozího využití Taylorovy věty dokazuje i v obecném pří- padě funkce f více proměnných následující výsledek: Věta. Nechť f : En R je dvakrát spojitě diferencovatelná funkce a x En nechť je stacionární bod funkce f. Potom (1) f má v x ostré lokální minimum, je-li Hf(x) positivně definitní, (2) f má v x ostré lokální maximum, je-li Hf(x) negativně definitní, (3) f nemá v bodě x lokální extrém je-li Hf(x) indefinitní. Všimněme si, že věta nedává žádný výsledek, pokud je hessián funkce ve zkou- maném bodě degenerovaný a přitom není indefinitní. Důvod je opět stejný jako u funkcí jedné proměnné. V takových případech totiž existují směry, ve kterých první i druhá derivace zmizí a my proto v tomto řádu přiblížení neumíme poznat, zda se funkce bude chovat jako t3 nebo jako t4 dokud nespočteme alespoň v potřebných směrech derivace vyšší. 8.12. Příklady. Určete stacionární body funkce f : R2 R, f(x, y) = x2 y+y2 x- xy a rozhodněte, které z těchto bodů jsou lokální extrémy a jakého druhu. Řešení. První derivace jsou fx = 2xy + y2 - y, fy = x2 + 2xy - x. Položíme-li obě parciální derivace současně nule, má soustava následující řešení: {x = y = 0}, {x = 0, y = 1}, {x = 1, y = 0}, {x = 1/3, y = 1/3}, což jsou čtyři stacionární body dané funkce. 228 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Hessián funkce Hf je 2y 2x + 2y - 1 2x + 2y - 1 2x . Hodnoty ve stacionárních bodech jsou postupně 0 -1 -1 0 , 1 1 1 0 , 0 1 1 1 , 2 3 1 3 1 3 2 3 , tedy první tři Hessiány jsou indefinitní, poslední pak pozitivně definitní, bod [1/3, 1/3] je tedy lokálním minimem. 8.12.1. Určete bod v rovině x + y + 3z = 5 ležící v R3 , který má nejmenší vzdá- lenost od počátku souřadnic. A to jak metodami lineární algebry, tak metodami diferenciálního počtu. Řešení. Jde o patu kolmice spuštěné z bodu [0, 0, 0] na rovinu. Normála k ro- vině je (t, t, 3t), t R. Dosazením do rovnice roviny dostaneme patu kolmice [5/11, 5/11, 15/11]. Alternativně minimalizujeme vzdálenost (resp. její kvadrát) bodů v rovině od počátku, tj. funkci dvou proměnných, (5 - y - 3z)2 + y2 + z2 . Položením parciálních derivací rovných nule dostaneme soustavu 3y + 10z - 15 = 0 2y + 3z - 5 = 0, která má řešení jako výše. Protože víme, že minimum existuje a jedná se o jediný stacionární bod, nemusíme už ani počítat Hessián. 8.9 8.13. Zobrazení a transformace. Koncept derivace a diferenciálu lze snadno rozšířit na zobrazení F : En Em. Při zvolených kartézských souřadnicích na obou stranách je takové zobrazení obyčejná m­tice F(x1, . . . , xn) = (f1(x1, . . . , xn), . . . , fm(x1, . . . , xn)) funkcí fi : En R. Řekneme, že F je diferencovatelné nebo spojitě diferencovatelné zobrazení, jestliže tuto vlastnost mají všechny funkce f1, . . . , fm. Diferenciály dfi(x) jednotlivých funkcí fi poskytují lineární přiblížení přírůstků jejich hodnot. Lze proto očekávat, že budou společně dávat také souřadné vyjádření lineárního zobrazení D1 F(x) : Rn Rm mezi zaměřeními, které bude lineárně aproximovat přírůstky našeho zobrazení. Výsledná matice D1 F(x) = df1(x) df2(x) ... dfm(x) = f1 x1 f1 x2 . . . f1 xn f2 x1 f2 x2 . . . f2 xn ... ... ... ... fm x1 fm x2 . . . fm xn (x) se nazývá Jacobiho matice zobrazení F v bodě x. Lineární zobrazení D1 F(x) de- finované na přírůstcích v = (v1, . . . , vn) pomocí stejně značené Jacobiho matice nazýváme diferenciál zobrazení F v bodě x z definičního oboru, jestliže platí lim v0 1 v F(x + v) - F(x) - D1 F(x)(v) = 0. 1. FUNKCE A ZOBRAZENÍ NA Rn 229 Přímé použití Věty 8.5 o existenci diferenciálu pro funkce n proměnných na jed- notlivé souřadné funkce zobrazení F a sama definice euklidovské vzdálenosti vede k následujícímu tvrzení: Důsledek. Nechť F : En Em je zobrazení, jehož všechny souřadné funkce mají spojité parciální derivace v okolí bodu x En. Pak existuje diferenciál D1 F(x) zadaný Jacobiho maticí. Diferencovatelná zobrazení F : En En, která mají inverzní zobrazení G : Em En definované na celém svém obrazu, se nazývají (diferencovatelné) trans- formace. Příkladem transformace byl přechod mezi kartézkými a polárními souřad- nicemi, který jsme diskutovali hned na začátku této kapito v 8.1. 8.10 8.14. Věta (,,Chain Rule ). Nechť F : En Em a G : Em Er jsou dvě dife- rencovatelná zobrazení, přičemž definiční obor G obsahuje celý obor hodnot F. Pak také složené zobrazení G F je diferencovatelné a jeho diferenciál je v každém bodě z definičního obodu F kompozicí diferenciálů D1 (G F)(x) = D1 G(F(x)) D1 F(x). Příslušná Jacobiho matice je dána součinem příslušných Jacobiho matic. Důkaz. V odstavci 8.5 a při důkazu Taylorovy věty jsme odvodili, jak se chová diferencování pro složená zobrazení vzniklá z funkcí a křivek. Tím jsme dokázali speciální případy této věty s n = r = 1. Obecný případ se ve prakticky stejným postupem, jen budeme pracovat více s vektory. Zvolme libovolný pevný přírůstek v a počítejme směrovou derivaci pro kompo- zici G F. Ve skutečnosti to znamená spočíst diferenciál pro jednu ze souřadných funkcí zobrazení G, pišme tedy jednodušeji g F pro kteroukoliv z nich. dv(g F)(x) = lim t0 1 t g(F(x + tv)) - g(F(x)) . Výraz v závorce můžeme ovšem z definice diferenciálu g vyjádřit jako g(F(x + tv)) - g(F(x) = dg(F(x))(F(x + tv) - F(x)) + (F(x + tv) - F(x)) kde je definovaná na okolí bodu F(x), je spojitá a limv0 1 w (w) = 0. Dosaze- ním do rovnosti pro směrovou derivaci dostáváme dv(g F)(x) = lim t0 1 t dg(F(x))(F(x + tv) - F(x)) + (F(x + tv) - F(x)) = dg(F(x)) lim t0 1 t F(x + tv) - F(x) + lim t0 1 t (F(x + tv) - F(x)) = dg(F(x)) D1 F(x)(v) + 0, kde jsme využili skutečnosti, že lineární zobrazení mezi konečněrozměrnými pro- story jsou vždy spojitá a vlastnosti funkce . Dokázali jsme tedy tvrzení pro jednotlivé funkce g1, . . . , gr zobrazení G. Celá věta nyní vyplývá z toho, jak se násobí matice. Příklad. Ukažme si na jednoduchém příkladě, jak funguje věta o derivování slože- ných zobrazení. Polární souřadnice vzniknou z kartézských transformací F : R2 230 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI R2 , kterou v souřadnicích (x, y) a (r, ) zapíšeme takto (samozřejmě jen na vhod- ném definičním oboru) r = x2 + y2, = arctan y x . Uvažme funkci gt : E2 R, která má v polárních souřadnicích vyjádření g(r, , t) = sin(r-t) . Funkce nám docela dobře přibližuje vlnění povrchu hladiny po bodovém vzruchu v počátku v čase t (časem i uvidíme proč), viz obrázek s hodnotou t = -/2. Spočtěme nyní derivaci této funkce v kartézských souřadnicích. Použitím naší věty dostaneme g x (x, y, t) = g r (r, ) r x (x, y) + g (r, ) x (x, y) = cos( x2 + y2 - t) x x2 + y2 + 0 a podobně g y (x, y, t) = g r (r, ) r y (x, y) + g (r, ) y (x, y) = cos( x2 + y2 - t) y x2 + y2 . U funkcí jedné proměnné rozhodovala nenulovost první derivace o tom, je-li funkce rostoucí či klesající. Pak takovou musela být i na nějakém okolí zvoleného bodu a tudíž tam existovala i inverzní funkce. Její derivace pak byla převrácenou hodnotou derivace funkce původní. Když tuto situaci interpretujeme z pohledu zobrazení E1 E1 a lineárních zobrazení R R coby jejich diferenciálů, je ne- nulovost nutnou a dostatečnou podmínkou k invertibilitě příslušného diferenciálu. Takto obdržíme tvrzení platné pro konečněrozměrné prostory obecně: 8.11 8.15. Věta (O inverzním zobrazení). Nechť F : En En je spojitě diferencova- telné zobrazení na nějakém okolí bodu x0 En a nechť je Jacobiho matice D1 f(x0) invertibilní. Pak na nějakém okolí bodu x0 existuje inverzní zobrazení F-1 a jeho diferenciál v bodě F(x0) je inverzním zobrazením k D1 F(x0), tzn. je zadán inverzní maticí k Jacobiho matici zobrazení F v bodě x0. 1. FUNKCE A ZOBRAZENÍ NA Rn 231 Důkaz. Nejdříve si zkusme ověřit, že tvrzení je rozumné a očekávatelné. Pokud bychom předpokládali, že inverzní zobrazení existuje a je diferencovatelné v bodě F(x0), věta o derivování složených funkcí si vynucuje vztah idRn = D1 (F-1 F)(x0) = D1 (F-1 ) D1 F(x0) což ověřuje formuli v závěru věty. Víme proto od začátku, jaký diferenciál pro F-1 hledat. V dalším kroku předpokládejme, že inverzní zobrazení existuje a je spojité a budeme ověřovat existenci diferenciálu. Z diferencovatelnosti F na okolí x0 vyplývá, že F(x) - F(x0) - D1 F(x0)(x - x0) = (x - x0) s funkcí : Rn 0 splňující limv0 1 v (v) = 0. Pro ověření aproximační vlast- nosti lineárního zobrazení (D1 F(x0))-1 je třeba spočíst limitu pro y = F(x) jdoucí k y0 = F(x0) lim yy0 1 y - y0 F-1 (y) - F-1 (y0) - (D1 F(x0))-1 (y - y0) . Dosazením z předchozí rovnosti dostáváme e8.4 (8.4) lim yy0 1 y - y0 x - x0 - (D1 F(x0))-1 (D1 F(x0)(x - x0) + (x - x0)) = lim yy0 -1 y - y0 (D1 F(x0))-1 ((x - x0)) = (D1 F(x0))-1 lim yy0 -1 y - y0 ((x - x0)), kde poslední rovnost vyplývá ze skutečnosti, že lineární zobrazení mezi konečněroz- měrnými prostory jsou vždy spojitá a díky invertibilitě diferenciálu jeho předřazení limitnímu procesu neovlivní ani existenci limity. Všimněme si, že jsme skoro dosáhli úplného úspěchu ­ limita na konci našeho výrazy je v důsledku vlastností funkce nulová, pokud jsou velikosti F(x)-F(x0) větší než C x - x0 pro nějakou konstantu C. Zbývá nám tedy už ,,jen dokázat existenci spojitého inverzního zobrazení k F a získat přitom dostatečnou kontrolu nad chováním hodnot F. Pro další úvahy si zjednodušíme práci převedením obecného případu na o něco jednodušší tvrzení. Zejména bez újmy na obecnosti lze vhodnou volbou kartézských souřadnic dosáhnout x0 = 0 Rn , y0 = F(x0) = 0 Rn . Složením zobrazení F s jakýmkoliv lineárním zobrazením G dostateme opět diferencovatelné zobrazení a víme také, jak se změní diferenciál. Volbou G(x) = (D1 F(0))-1 (x) dostáváme D1 (GF)(0) = idRn . Můžeme tedy zrovna předpokládat D1 F(0) = idRn . Uvažme nyní zobrazení K(x) = F(x) - x. Toto zobrazení je opět diferencovatelné a jeho diferenciál v bodě 0 je zjevně nulový. Pro libovolné spojitě diferencovatelné zobrazení K v okolí počátku Rn platí podle našeho odhadu v Lemmatu 8.3 a díky definici euklidovské normy K(x) - K(y) Cn2 x - y , kde C je ohraničeno maximem přes všechny parciální derivace G na sledovaném okolí. Protože v našem případě je diferenciál K v x0 = 0 nulový, můžeme volbou 232 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI dostatečně malého okolí U počátku dosáhnout platnosti ohraničení K(x) - K(y) 1 2 x - y . Dále dosazením za definici K(x) = F(x) - x a použitím trojúhelníkové nerovnosti (u - v) + v u - v + v , tj. v podobě u - v u - v , dostáváme y - x - F(x) - F(y) F(x) - F(y) + y - x 1 2 y - x a tedy také e8.5 (8.5) (1 - 1 2 ) x - y = 1 2 x - y F(x) - F(y) . Tímto odhadem jsme dosáhli opravdu pěkného pokroku: jsou-li na našem malém okolí U počátku x = y, pak nutně musí být také F(x) = F(y). Je tedy naše zobrazení vzájemně jednoznačné. Pišme F-1 pro jeho inverzi definovanou na obrazu U. Pro ni náš odhad říká F-1 (x) - F-1 (y) 2 x - y , je tedy toto zobrazení určitě spojité. Konečně, odhad (8.5) také zajišťuje existenci a nulovost limity, kterou jsme v (8.4) potřebovali pro pro aproximační vlastnosti a tudíž existenci diferenciálu F-1 . Zdánlivě jsme tedy již úplně hotoví (s důkazem), to ale není pravda. Abychom skutečně dokončili důkaz, musíme ukázat, že je F zúžené na dostatečně malé okolí nejen vzájemně jednoznačné, ale že také zobrazuje otevřené okolí nuly na otevřené okolí nuly. Zvolme si tak malé, aby okolí V = O(0) leželo v U včetně své hranice a zároveň aby Jacobiho matice zobrazení F byla na celém V invertibilní. To je jistě možné, protože determinant je spojité zobrazení. Označme B hranici množiny V (tj. příslušnou sféru). Protože je B kompaktní a F spojité, má funkce (x) = F(x) na B maximum i minimum. Označme a = 1 2 minxB (x) a uvažujme libovolné y Oa(0). Chceme ukázat, že existuje alespoň jedno x V takové, že y = F(x), čímž bude celá věta o inverzní funkci dokázána. Za tímto účelem uvažme (s naším pevně zvoleným bodem y) funkci h(x) = F(x) - y 2 Opět obraz h(V ) h(B) musí mít minimum. Ukážeme nejprve, že toto minimum nemůže nastat pro x B. Platí totiž F(0) = 0 a proto h(0) = y < a. Zároveň podle naší definice a je pro y Oa(0) vzdálenost y od F(x) pro x B alespoň a, protože a jsme volili jako polovinu minima z velikosti F(x) na hranici. Minimum tedy nastává uvnitř V a musí být ve stacionárním bodě z funkce h. To ale znamená že pro všechna j = 1, . . . , n platí h x (z) = nX i=1 2(fj(z) - yj) fi xi (z) = 0. Na tento systém rovnic se můžeme dívat jako na systém lineárních rovnic s proměnnými j = fj(z) - yj a koeficienty zadanými dvojnásobkem Jacobiho matice D1 F(z). Pro každé z V má takový systém ovšem pouze jedno řešení a to je nulové, protože Jacobiho matice je podle našeho předpokladu invertibilní. 1. FUNKCE A ZOBRAZENÍ NA Rn 233 8.12 8.16. Věta o implicitní funkci. Naším dalším cílem je využít větu o inverzním zobrazení pro práci s implicitně definovanými funkcemi. Uvažujme spojitě diferencovatelné zobrazení F(x, y) definované v E2 a hle- dejme body (x, y), ve kterých platí F(x, y) = 0. Příkladem může být třeba obvyklá (implicitní) definice přímek a kružnic: F(x, y) = ax + by + c = 0 F(x, y) = (x - s)2 + (y - t)2 - r2 = 0, r > 0. Zatímco v prvém případě je (při b = 0) předpisem zadaná funkce y = f(x) = - a b x - c b pro všechna x, ve druhém případě můžeme pro libovolný bod (a, b) splňující rovnici kružnice a takový, že b = t (to jsou totiž krajní body kružnice ve směru souřadnice x), najít okolí bodu a, na kterém bude buď y = f(x) = t + (x - s)2 - r nebo y = f(x) = t - (x - s)2 - r. Při načrtnutí obrázku je důvod zřejmý ­ nemůžeme chtít pomocí funkce y = f(x) postihnout horní i dolní půlkružnici zároveň. Zajímavější jsou krajní body intervalu [t-r, t+r]. Ty také vyhovují rovnici kružnice, platí v nich ale Fy(sr, t) = 0, což vystihuje polohu tečny ke kružnici v těchto bodech rovnoběžnou s osou y. V těchto bodech skutečně neumíme najít okolí, na němž by kružnice byla popsána jako funkce y = f(x). Navíc umíme i derivace naší funkce y = f(x) = t + (x - s)2 - r2, tam kde je definována, vyjádřit pomocí parciálních derivací funkce F: f (x) = 1 2 2(x - s) (x - s)2 - r2 = x - s y - t = - Fx Fy . Když prohodíme roli proměnných x a y a budeme chtít najít závislost x = f(y) takovou, aby F(f(y), y) = 0, pak v okolí bodů (s r, t) bez problémů uspějeme. Všimněme si, že v těchto bodech je parciální derivace Fx nenulová. Naše pozorování tedy (pro pouhé dva příklady) říká: pro funkci F(x, y) a bod (a, b) E2 takový, že F(a, b) = 0, umíme jednoznačně najít funkci y = f(x) splňující F(x, f(x)) = 0, pokud je Fy(a, b) = 0. V takovém případě umíme i vypočíst f (x) = -Fx/Fy. Dokážeme, že ve skutečnosti toto tvrzení platí vždy. Poslední tvrzení o derivaci přitom je dobře zapamatovalné (a při pečlivém vnímání věcí i pochopitelné) z výrazu pro diferenciál dy = f (x)dx a tedy: 0 = dF = Fxdx + Fydy = (Fx + Fyf (x))dx. Obdobně bychom mohli pracovat s implicitními výrazy F(x, y, z) = 0, přičemž můžeme hledat funkci g(x, y) takovou, že F(x, y, g(x, y)) = 0. Jako příklad uvažme třeba funkci f(x, y) = x2 + y2 , jejímž grafem je rotační paraboloid s počátkem v bodě (0, 0). Ten můžeme implicitně zadat také rovnicí 0 = F(x, y, z) = z - x2 - y2 . Než sformulujeme výsledek rovnou pro obecnou situaci, všimněme si ještě, jaké dimenze se mohou/mají v problému vyskytovat. Pokud bychom pro tuto funkci F chtěli najít křivku c(x) = (c1(x), c2(x)) v rovině takovou, že F(x, c(x)) = F(x, c1(x), c2(x)) = 0, 234 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI pak to jistě budeme umět (dokonce pro všechny počáteční podmínky x = a) také, ale výsledek nebude jednoznačný pro danou počáteční podmínku. Stačí totiž uvážit libovolnou křivku na rotačním paraboloidu, jejíž průmět do první souřadnice má nenulovou derivaci. Pak považujeme x za parametr křivky a za c(x) zvolíme její průmět do roviny yz. Viděli jsme tedy, že jedna funkce m + 1 proměnných zadává implicitně nadplo- chu v Rm+1 , kterou chceme vyjádřit alespoň lokálně jako graf jedné funkce v m proměnných. Lze očekávat, že n funkcí v m+n proměnných bude zadávat průnik n nadploch v Rm+n , což je ve ,,většině případů m­rozměrný objekt. Uvažujme proto spojitě diferencovatelné zobrazení F = (f1, . . . , fn) : Rm+n Rn . Jacobiho matice tohoto zobrazení bude mít n řádků a m + n sloupců a můžeme si ji symbolicky zapsat jako D1 F = (D1 xF, D1 yF) = f1 x1 . . . f1 xm ... ... ... fn x1 . . . fn xm f1 xm+1 . . . f1 xm+n ... ... ... fn xm+1 . . . fn xm+n , kde (x1, . . . , xm+n) Rm+n zapisujeme jako (x, y) Rm × Rn , D1 xF je matice s n řádky a prvními m sloupci v Jacobiho matici, zatímco D1 yF je čtvercová matice řádu n se zbylými sloupci. Vícerozměrnou analogií k předchozí úvaze s nenulovou parciální derivací podle y je požadavek, aby matice D1 y byla invertibilní. Věta. Nechť F : Rm+n Rn je spojitě diferencovatelné zobrazení na otevřeném okolí bodu (a, b) Rm × Rn = Rm+n , ve kterém je F(a, b) = 0 a det D1 yF = 0. Potom existuje spojitě diferencovatelné zobrazení G : Rm Rn definované na nějakém okolí U bodu a Rm s obrazem G(U), který obsahuje bod b, a takové, že F(x, G(x)) = 0 pro všechny x U. Navíc je Jacobiho matice D1 G zobrazení G na okolí bodu a zadána součinem matic D1 G(x) = -(D1 yF)-1 (x, G(x)) D1 xF(x, G(x)). Důkaz. Pro zvýšení srozumitelnosti uvedeme napřed kompletní důkaz pro nej- jednodušší případ rovnice F(x, y) = 0 s funkcí F dvou proměnných. Rozšíříme funkci F na ~F : R2 R2 , (x, y) (x, F(x, y)). Jacobiho matice zobrazení ~F je D1 ~F(x, y) = 1 0 Fx(x, y) Fy(x, y) . Z předpokladu Fy(a, b) = 0 vyplývá, že totéž platí i na nějakém okolí bodu (a, b) a tedy je na tomto okolí funkce ~F invertibilní podle věty o inverzním zobrazení. Vezměme tedy jednoznačně definované a spojitě diferencovatelné inverzní zobrazení ~F-1 na nějakém okolí bodu (a, 0). Nyní označme : R2 R projekci na druhou souřadnici a uvažujme funkci f(x) = ~F-1 (x, 0). To je dobře definovaná a spojitě diferencovatelná funkce. Máme ověřit, že následující výraz F(x, f(x)) = F(x, ( ~F-1 (x, 0))) 1. FUNKCE A ZOBRAZENÍ NA Rn 235 bude na okolí bodu x = a nulový. Přitom z definice ~F(x, y) = (x, F(x, y)) vy- plývá, že i její inverze musí mít tvar ~F-1 (x, y) = (x, ~F-1 (x, y)). Můžeme proto pokračovat v předchozím výpočtu: F(x, f(x)) = ( ~F(x, ( ~F-1 (x, 0)))) = ( ~F( ~F-1 (x, 0))) = (x, 0) = 0. Tím máme dokázánu první část věty a zbývá spočíst derivaci funkce f(x). Tuto derivaci můžeme odečíst opět z věty o inverzním zobrazení pomocí matice (D1 ~F)-1 . Následující výsledek je snadné ověřit roznásobením matic. (Spočíst lze také přímo explicitní formulí pro inverzní matici s pomocí determinantu a algebraicky adjungované matice, viz odstavec 2.22) 1 0 Fx(x, y) Fy(x, y) -1 = (Fy(x, y))-1 Fy(x, y) 0 -Fx(x, y) 1 . Dle definice f(x) = ~F-1 (x, 0) nás z této matice zajímá první položka na druhém řádku, která je právě Jakobiho maticí D1 f. V našem jednoduchém případě je to právě požadovaný skalár -Fx(x, f(x))/Fy(x, f(x)). Obecný důkaz je bezezbytku stejný, není v něm potřeba změnit žádnou z uvedených for- mulí, kromě posledního výpočtu derivace funkce f, kde místo jednotlivých parciálních derivací budou vystupovat příslušné části Jacobiho matice D1 xF a D1 yF. Samozřejmě je přitom třeba místo se skaláry pracovat s vektory a maticemi. Pro výpočet Jacobiho matice zobrazení G opět použijeme výpočtu inverzní matice, není ale až tak vhodné přímo využít postupu z odstavce 2.22. Snadnější je nechat se přímo inspirovat případem v dimenzi m + n = 2, označit si matici (D1 ~F-1 ) = ,, idRm 0 D1 xF(x, y) D1 yF(x, y) -1 = ,, A B C D s bloky danými dělením na m a n řádků i sloupců (tj. např. A má rozměr m × m, zatímco C je rozměru n × m) a přímo spočíst matice A, B, C, D z definiční rovnosti pro inverzi: ,, idRm 0 D1 xF(x, y) D1 yF(x, y) ,, A B C D = ,, idRm 0 0 idRn . Zjevně odtud plyne A = idRm , B = 0, D = (D1 yF)-1 a konečně D1 xF + D1 yF C = 0. Z poslední rovnosti pak dostáváme požadovaný vztah D1 G = C = -(D1 yF)-1 D1 xF. Tím je věta dokázána. 8.17. Příklad. Buď dáno zobrazení F : R2 R, F(x, y) = xy sin 2 xy2 . Ukažte, že rovnost F(x, y) = 1 zadává v nějakém okolí U bodu 1 implicitně funkci f : U R, tak že F(x, f(x)) = 1 pro x U. Navíc f(1) = 1. Určtete f (1). Řešení. Fy(1, 1) = x sin 2 xy2 +x2 y2 cos 2 xy2 (1, 1) = 1, tedy předpis F(x, y) = 1 zadává implicitně na okolí bodu (1, 1) funkci f : R R. Pro její derivaci potom platí f (x) = - Fx Fy (1, 1) = - 1 1 = -1. 236 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 8.13 8.18. Gradient funkce. Jak jsme viděli v minulém odstavci, je-li F spojitě di- ferencovatelná funkce n proměnných, zadává předpis F(x1, . . . , xn) = b s nějakou pevnou hodnotou b R podmnožinu M Rn , která mívá vlastnosti (n - 1)­ rozměrné nadplochy. Přesněji řečeno, pokud je vektor parciálních derivací D1 F = f x1 , . . . , f xn nenulový, můžeme lokálně množinu M popsat jako graf spojitě diferencovatelné funkce v n - 1 proměnných. Hovoříme v této souvislosti také o úrovňových množi- nách Mb. Vektor D1 F Rn se nazývá gradient funkce F. V technické a fyzikální literatuře se často zapisuje také jako grad F. Protože je Mb zadáno pomocí konstantní hodnoty funkce F, budou derivace křivek ležících v M mít jistě tu vlastnost, že na nich bude diferenciál dF vždy vyčíslen nulově ­ skutečně, pro každou takovou křivku bude F(c(t)) = b a tedy i d dt F(c(t)) = dF(c (t)) = 0. Naopak uvažme obecný vektor v = (v1, . . . , vn) Rn a velikost příslušné směrové derivace |dvF| = f x1 v1 + + f xn vn = cos D1 F v kde je odchylka vektoru v od gradientu F, viz pojednání o odchylkách vektorů a přímek ve čtvrté kapitole (definice 4.17). Odtud ovšem vyplývá, že nulové jsou právě ty směrové derivace, které jsou kolmé na gradient, zatímco směr zadaný gradientem je právě ten směr, ve kterém funkce f nejrychleji roste. Je tedy zřejmé, že tečná rovina k neprázdné úrovňové množině Mb v okolí jejího bodu s nenulovým gradientem D1 F je určena ortogonálním doplňkem ke gradientu a samotný gradient je tzv. normálovým vektorem nadplochy Mb. Např. pro sféru v R3 o poloměru r > 0 a středu (a, b, c) zadanou rovnicí F(x, y, z) = (x - a)2 + (y - b)2 + (z - c)2 = r2 dostáváme normálové vektory v bodě P = (x0, y0, z0) jako nenulový násobek gra- dientu, tj. násobek průvodiče D1 F = (2(x0 - a), 2(y0 - b), 2(z0 - c)), a tečné vektory budou právě všechny vektory kolmé na gradient. Implicitně proto jde vždy tečnou rovinu ke sféře v bodě P popsat s pomocí gradientu rovnicí 0 = (x0 - a)(x - x0) + (y0 - b)(y - y0) + (z0 - c)(z - z0). To je speciální případ obecné formule: Věta. Pro funkci F n proměnných a bod P = (a1, . . . , an) Mb v jehož okolí je Mb grafem funkce (n - 1) proměnných je implicitní rovnice pro tečnou nadrovinu 0 = f x1 (P) (x1 - a1) + + f xn (P) (xn - an). Důkaz. Tvrzení je zřejmé z předchozího výkladu. Tečná nadrovina totiž musí být (n - 1)­rozměrná, její zaměření je proto zadané jako jádro lineární formy dané gradientem (nulové hodnoty příslušného lineárního zobrazení Rn R zadaného 1. FUNKCE A ZOBRAZENÍ NA Rn 237 násobení sloupce souřadnic řádkovým vektorem grad F). Zvolený bod P přitom naší rovnici zjevně vyhovuje. Příklad. Uvažujme model osvětlení 3D objektu, kde známe směr v dopadu světla na 2D povrch, tj. množinu M zadanou implicitně rovnicí F(x, y, z) = 0. Intenzitu osvětlení bodu P M pak definujme jako I cos , kde je úhel mezi normálou zadanou gradientem a vektorem opačným ke směru světla. Znaménko našeho výrazu pak bude označovat, kterou stranu plochy osvětlujeme. Např. směr osvětlení o intezitě I0 může být v = (1, 1, -1) (tj. ,,šikmo dolů ) a objektem může být třeba koule (tj. F(x, y, z) = x2 + y2 + z2 - 1). Pro bod P = (x, y, z) M proto dostaneme intenzitu I(P) = grad F v grad F v I0 = -2x - 2y + 2z 2 3 I0. Všimněme si, že dle očekávání je maximální (plnou) intenzitou I0 osvětlen bod P = 1 3 (-1, -1, 1) na povrchu koule. 8.14 8.19. Tečny a normály k implicitně definovaným plochám. Přejděme nyní k obecným dimenzím. Máme-li zobrazení F : Rm+n Rn , tj. n rovnic fi(x1, . . . , xm+n) = bi, i = 1, . . . , n, pak za podmínek věty o implicitní funkci je množina všech řešení (x1, . . . , xm+n) grafem zobrazení G : Rm Rn . Pro pevnou volbu b = (b1, . . . , bn) je samo- zřejmě množinou všech řešení průnik nadploch M(bi, fi) příslušejících jednotli- vým funkcím fi. Totéž musí platit pro tečné směry a normálové směry. Je-li proto D1 F Jacobiho matice zobrazení implicitně zadávajícího množinu M s bodem P = (a1, . . . , am+n) M, v jehož okolí je M grafem zobrazení, D1 F = f1 x1 . . . f1 xm+n ... ... ... fn x1 . . . fn xm+n potom bude afinní podprostor v Rm+n obsahující právě všechny tečny bodem P dán rovnicemi: 0 = f1 x1 (P) (x1 - a1) + + f1 xn (P) (xm+n - am+n) ... 0 = fn x1 (P) (x1 - a1) + + fn xn (P) (xm+n - am+n). Tento podprostor se nazývá tečný prostor k (implicitně zadané) ploše M v bodě P. Normálový prostor v bodě P je afinní podprostor generovaný bodem P a gradienty všech funkcí f1, . . . , fn v bodě P, tj. řádky Jacobiho matice D1 F. Jako jednoduchý příklad si spočtěme tečnu a normálový prostor ke kuželosečce v R3 . Uvažujme rovnici 0 = f(x, y, z) = z - x2 + y2 kuželu s vrcholem v počátku a rovinu zadanou 0 = g(x, y, z) = z - 2x + y + 1. 238 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Bod P = (1, 0, 1) patří jak kuželu tak rovině a průnik M těchto dvou ploch je křivka (namalujte si obrázek). Její tečnou v bodě P bude přímka zadaná rovnicemi 0 = - 1 2 x2 + y2 2x x=1,y=0 (x - 1) - 1 2 x2 + y2 2y x=1,y=0 y + 1 (z - 1) = -x + z 0 = -2(x - 1) + y + (z - 1) = -2x + y + z + 1 zatímco rovina kolmá k naší křivce bodem P bude parametricky dána výrazem (1, 0, 1) + (-1, 0, 1) + (-2, 1, 1) s parametry a . 8.15 8.20. Vázané extrémy. Nyní se dostáváme k první opravdu vážné aplikaci di- ferenciálního počtu více proměnných. Typickou úlohou optimalizace nebo řízení je najít extrémy hodnot závisejících na několika (ale konečně mnoha) parametrech, ovšem za nějakých dalších podmínek na vzájemné vztahy parametrů. Velice často má řešená úloha m+n parametrů, které jsou vázány n podmínkami. V našem jazyce diferenciálního počtu tedy hledáme extrémy spojitě diferencova- telné funkce h na množině bodů M zadaných implicitně rovnicí F(x1, . . . , xm+n) = 0. K tomu můžeme použít tytéž postupy jako dříve. Pokud je M ve všech svých bodech grafem hladkého zobrazení v m proměnných, musí být každý extrém P M stacionárním bodem, tj. pro každou křivku c(t) M procházející přes P = c(0) musí být h(c(t)) extrémem pro tuto funkci jedné proměnné. Proto také musí být derivace d dt h(c(t))|t=0 = dc (0)h(P) = dh(P)(c (0)) = 0. To ale znamená, že diferenciál funkce h se v bodě P nuluje na všech tečných pří- růstcích k M v bodě P. Tato vlastnost je ekvivalentní tvrzení, že gradient h leží v normálovém podprostoru (přesněji v jeho zaměření). Takové body P M budeme nazývat stacionární body funkce H vzhledem k vazbám F. Jak jsme viděli v minulém odstavci, normálový prostor k naší množině M je generován řádky Jacobiho matice zobrazení F a stacionární body jsou proto ekvi- valentně určeny následujícím tvrzením, kterému se říká metoda Lagrangeových mul- tiplikátorů: Věta. Nechť F = (f1, . . . , fn) : Rm+n Rn je spojitě diferencovatelná v okolí bodu P, F(P) = 0 a M je zadána implicitně rovnicí F(x, y) = 0 a hodnost matice D1 F v bodě P je n. Pak P je stacionárním bodem spojitě diferencovatelné funkce h : Rm+n R právě, když existují reálné parametry 1, . . . , n takové, že grad h = 1 grad f1 + + n grad fn. Všimněme si počtu neznámých a rovnic v tomto algoritmu: gradienty jsou vek- tory o m+n souřadnicích, tedy požadavek z věty dává m+n rovnic. Jako proměnné máme jednak souřadnice x1, . . . , xm+n hledaných stacionárních bodů P, ale navíc také n parametrů i v hledané lineární kombinaci. Zbývá však požadavek, že hle- daný bod P patří implicitně zadané množině M, což představuje dalších n rovnic. Celkem tedy máme n + m rovnic pro n + m proměnných a proto lze očekávat, že řešením bude diskrétní množina bodů P (tj. každý z nich bude izolovaným bodem). 1. FUNKCE A ZOBRAZENÍ NA Rn 239 8.21. Příklady. 8.21.1. Zkusme nějaký explicitní příklad. Za množinu S zvolme opět jednotkovou sféru v R3 a K bude kružnice K S vzniklá průnikem této sféry s rovinou zadanou rovnicí x + y + z = 0. Budeme hledat extrémní hodnoty funkce h(x, y, z) = x3 + y3 + z3 na objektech zadaných implicitně pomocí buď jen funkce F nebo dvojice funkcí F a G, které jsou definovány výrazy F(x, y, z) = x2 + y2 + z2 - 1, G(x, y, z) = x + y + z. Řešení. Začněme hledáním stacionárních bodů pro funkci h na sféře S. Výpočtem příslušných gradientů (např. grad h(x, y, z) = (3x2 , 3y2 , 3z2 )) dostaneme systém rovnic 0 = 3x2 - 2x 0 = 3y2 - 2y 0 = 3z2 - 2z 0 = x2 + y2 + z2 - 1, což je systém čtyř rovnic o čtyřech proměnných. Před řešením tohoto systému si zkusme odhadnout, kolik lokálních vázaných extrémů bychom měli čekat. Určitě bude h(P) v absolutní hodnotě rovno na jednotkové sféře nejvýše jedné a to na- stane ve všech průnicích souřadných os s S. Máme tedy pravděpodobně 6 lokálních extrémů. Dále uvnitř každé osminy sféry vytčené souřadnými rovinami může, ale nemusí, být další extrém. Jednotlivé kvadranty lze snadno oparametrizovat a prů- běh funkce h coby funkce dvou parametrů ověřit standardním způsobem (nebo si nechat vykreslit třeba v Maplu). Řešením systému (ať už rukou nebo opět v Maplu) obdržíme ve skutečnosti spoustu stacionárních bodů. Kromě šesti, o kterých už víme (dvě souřadnice nulové a jedna 1) a u kterých je = 3 2 , jsou to např. ještě body P = ( 3 3 , 3 3 , 3 3 ), ve kterých skutečně nastává lokální extrém. Jestliže omezíme náš zájem na body kružnice K, musíme přidat další funkci G jeden další volný parametr coby koeficient u jejího gradientu. Dostaneme tak větší systém rovnic 0 = 3x2 - 2x - 0 = 3y2 - 2y - 0 = 3z2 - 2z - 0 = x2 + y2 + z2 - 1 0 = x + y + z. Protože je i kružnice kompaktní množinou, nutně na ní musí mít h globální maxi- mum a globální minimum. Další rozbor ponecháme na čtenáři. 8.21.2. Určete, zda existují maxima a minima funkce f : (R+ )n R, f(x1, . . . , xn) = n x1 xn za podmínky x1 + + xn = c, c R+ , x1 > 0,. . . , xn > 0. 240 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Řešení. Normálový vektor k nadrovině definované podmínkou je (1, . . . , 1). Extrém může nastat v bodech, kdy je gradient zkoumané funkce násobkem normály. Pro tyto body tedy dostáváme soustavu 1 n n x1 ^xi xn 1 n xn-1 i = k, i = 1, . . . n. Tato soustava má na zkoumané množině jediné řešení x1 = = xn, k = 1, což od- povídá maximu dané funkce. Pokud bychom totiž v omezení uvažovali xi nezáporná, jednalo by se o kompaktní množinu, tedy daná funkce by na ní měla jak maximum, tak minimum. Minimum (nula) by nastávalo, pokud by libovolná z proměnných byla nulová, v nalezeném bodě tedy musí nastat maximum. Poznamenejme, že předchozí příklad je důkazem známé AG nerovnosti. Pro n reálných čísel x1, x2,. . . ,xn definujeme jejich aritmetický průměr jako číslo A(x1, . . . , xn) = x1 + + xn n . Geometrický průměr nezáporných reálných čísel x1, . . . , xN pak definujeme jako číslo G(x1, . . . , xn) = n x1 xn. Zmíněná nerovnost pak praví, že pro nezáporná reálná čísla x1, . . . , xn platí A(x1, . . . , xn) G(x1, . . . , xn), přičemž rovnost nastává právě pro x1 = = xn. 8.21.3. Určete, zda existují maxima a minima funkce f : R3 R, f(x, y, z) = z - xy2 na sféře x2 + y2 + z2 = 1. Pokud extrémy existují, určete je. Řešení. Řešíme soustavu x = -ky2 y = -2kxy z = k Z druhé rovnice dostáváme, že buď y = 0, nebo x = - 1 2k . První možnost vede k bodům (0, 0, 1), (0, 0, -1). Druhá pak nemůže být splněna (dosazením do rovnice koule dostaneme rovnici 1 4k2 + 1 2k2 + k2 = 1, která nemá řešení. Ve dvou vypočtených bodech na dané sféře má funkce maximum, resp. minimum. 8.21.4. Rozhodněte, zda existují extrémy funkce f : R3 R, f(x, y, z) = xyz, na elipsoidu určeném rovnicí g(x, y, z) = kx2 + ly2 + z2 = 1, k, l R+ Pokud extrémy existují, určete je. 1. FUNKCE A ZOBRAZENÍ NA Rn 241 Řešení. Nejprve sestavíme rovnice, které musí splňovat stacionární body dané funkce na elipsoidu: g x = f x : yz = 2kx g y = f y : xz = 2ly g z = f z : xy = 2z. Snadno nahlédneme, že řešením dané rovnice musí být trojice nenulových čísel. Po vydělení dvojic rovnic a dosazení do rovnice elipsy dostaneme osm řešení Dosta- neme osm stacionárních bodů x = 1 3k , y = 1 3l , z = 1 3 , v nichž ovšem funkce f nabývá pouze dvou různých hodnot. Protože f je spojitá a daný elipsoid je kompaktní, tak na něm f nabývá jak svého minima, tak maxima. Neboť navíc jak f tak g jsou spojitě diferencovatelné, tak tyto extrémy musí nastat v stacio- nárních bodech. Není tedy jiné možnosti, než že čtyři z daných stacionárních bodů jsou lokálními maximy dané funkce s maximem 1 3 3kl , zbývající čtyři pak minima s hodnotou - 1 3 3kl . 242 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 2. Integrování podruhé Nyní se vrátíme k procesu integrování, který jsme částečně popsali v druhé části šesté kapitoly. Nepůjdeme do detailů a budeme se soutředit na rozšíření tohoto procesu pro veličiny závislé na více proměnných, případně závislé na parametrech. 8.16 8.22. Integrály závislé na parametrech. Jestliže integrujeme podle jedné pro- měnné x funkci n + 1 proměnných f(x, y1, . . . , yn), potom výsledek bude funkcí F(y1, . . . , yn) v zbývajících proměnných. Často se v praktických úlohách setkáváme s úkolem vyšetřovat právě takovou funkci F. Např. můžeme hledat objem, povrch nebo obsah tělesa závisejícího na pa- rametrech a určit třeba minimální a maximální hodnoty (i s dodatečnými vazbami). Z první části této kapitoly víme, že pro takové účely máme nástroje opírající se o parciální derivace funkcí. Ideální by proto jistě bylo, kdybychom mohli operace derivování a integrování prohodit a následující věta to skutečně pro dosti širokou třídu funkcí potvrzuje: Věta. Pro spojitě diferencovatelnou funkci f(x, y1, . . . , yn) definovanou pro x z konečného intervalu [a, b] a na nějakém okolí bodu c = (c1, . . . , cn) Rn uvažujme integrál F(y1, . . . , yn) = b a f(x, y1, . . . , yn)dx. Potom platí pro všechny indexy j = 1, . . . , n F yj (c) = b a f yj (x, c1, . . . , cn)dx Důkaz. Pro ověření našeho vztahu je třeba vzpomenout definici Riemannova integrálu. Ta vyčísluje pro libovolnou spojitou funkci jeho hodnotu pomocí aproxi- mací konečnými součty (ekvivalentně horními, dolními nebo Riemannovými součty s libovolnými reprezentanty, viz odstavec 6.12 v šesté kapitole). Je zřejmé, že při důkazu je třeba brát v úvahu pouze souřadnici yj parametrů (ostatní jsou prostě konstantní pro všechny naše úvahy), proto si technicky formulace zjednodušíme, když se rovnou omezíme na případ n = 1 a tedy y = (y1). Zvolme proto nějaké dělení intervalu [a, b] a jeho reprezentanty i a zkou- mejme jednotlivé sčítance Riemannova součtu S, pro integrál derivované funkce f. S využitím věty o střední hodnotě dostáváme pro každý malý přírůstek h para- metru c = (c1): f(i, c + h) - f(i, c) = h f y (i, y) s hodnotou y [c, c + h]. Díky předpokládané spojitosti parciálních derivací a při známé normě dělení lze proto odhadnout odchylku sčítance f y (i, c)(xi+1 - xi) v Riemannově součtu od výrazu v příslušné aproximaci Riemannovými součty pro derivaci integrálu 1 h (F(c + h) - F(c)) i 1 h (f(i, c + h) - f(i, c))(xi+1 - xi). 2. INTEGROVÁNÍ PODRUHÉ 243 V limitě pro h 0 se tedy blížíme právě požadovanému tvrzení. Potřebujeme již pouze ověřit, že chybu v tomto odhadu budeme umět odhadnout pouze v závislosti na h, stejnoměrně přes celý interval přes který integrujeme. Při důkazu existence Riemannova integrálu pro spojité funkce jsme dokazovali, že funkce spojitá na konečném intervalu je ve skutečnosti stejnoměrně spojitá, tj. rozdíly hodnot umíme kontrolovat podél celého intervalu stejnoměrně ohraničením vzdálenosti nezávisle proměnné. Jestliže se podíváme na tuto argumentaci pozorněji, zjistíme, že podstanou vlastností intervalu byla pouze jeho kompaktnost. Proto platí, že i funkce více proměnných spojité na kompaktním intervalu jsou zde spojité stejnoměrně. Odtud vyplývá, že pro zvolenou malou mez pro vzdálenost |y - c| máme k dispozici univerzální odhad |f y (i, y) - f y (i, c)| () a () 0 při 0. V našem přiblížení Riemannovými součty můžeme proto přímo nahradit diferenci parciální derivací, aniž bychom chybu zvětšili o více než (). Tím je důkaz ukončen. Předchozí věta má četná využití. Např. ji můžeme ocenit při zkoumání integrál- ních transformací, kterým jsme se věnovali v druhé části předchozí kapitoly sedmé. Derivacemi známých výsledků tak dostaneme v řadě případů snadno transformace derivací původně transformovaných funkcí. Také naše předchozí výsledky o extrémech funkcí více proměnných nyní mají přímé použití např. pro minimalizaci ploch nebo objemů objektů zadanými funk- cemi v závislosti na parametrech. 8.17 8.23. Integrace funkcí více proměnných. Tak jak jsme motivovali integrování představou o výpočtu plochy pod grafem funkce jedné proměnné, můžeme prak- ticky stejně postupovat u objemu části trojrozměrného prostoru pod grafem funkce z = f(x, y) dvou proměnných. Místo výběru malých intervalů [xi, xi+1] dělících celý interval, přes který integrujeme, a přiblížením příslušné části objemu ploškou obdélníku s výškou danou hodnotou funkce f v reprezentantu tohoto intervalu , tj. výrazem f()(xi+1 - xi), budeme pracovat s děleními v obou proměnných a hodnotami reprezentujícími výšku grafu nad jednotlivými obdélníčky v rovině. Prvně se ale musíme vypořádat s oborem integrace, tj. oblastí v rovině proměn- ných, nad kterou chceme naši funkci f integrovat. Příkladem může sloužit funkce z = f(x, y) = 1 - x2 - y2, která pro (x, y) uvnitř jednotkového kruhu má za svůj graf povrch jednotkové sféry. Integrováním této funkce na jednotkovém kruhu tedy dostaneme objem poloviny jednotkové koule. Nejjednodušším přístupem je uvažovat pouze obory integrace S, které jsou dány jako součiny intervalů, tj. jsou zadány rozsahem x [a, b] a y [c, d]. Hovoříme v této souvislosti o vícerozměrném intervalu. Pokud je S jiná ohraničená množina v R2 , pracujeme místo ní s dostatečně velikou oblastní [a, b]×[c, d], ale upravíme naši funkci tak, že f(x, y) = 0 pro všechny body mimo S. Pro naši kouli bychom tedy integrovali na množině S = [-1, 1] × [-1, 1] funkci f(x, y) = 1 - x2 - y2 pro x2 + y2 1 0 jinak. Definice Riemannova integrálu pak zcela věrně sleduje náš postup z odstavce 6.11. Můžeme tak přitom činit pro libovolný konečný počet proměnných. Integrál existuje, jestliže pro každou volbu posloupnosti dělení (nyní ve všech proměnných 244 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI zároveň) a reprezentantů jednotlivých krychliček i [xi, xi+1] × . . . × [zj, zj+1] Rn , s maximální velikostí mezi všemi použitými intervaly jdoucí k nule, budou integrální součty (všimněme si, že potřebujeme tolik indexů pro označování subintervalů, kolik máme souřadnic) S, = i,...,j f(i,...,j)(xi+1 - xi) . . . (zj+1 - zj). konvergovat k jedné hodnotě, kterou zapisujeme S f(x, . . . , z) dx . . . dz Pro všechny spojité funkce f opět lze dokázat existenci Riemannova integrálu a tento výsledek lze snadno rozšířit pro ,,dostatečně spojité funkce na ,,dostatečně rozumných oborech integrace. Omezenou množinu S Rn označujeme za Riemannovsky měřitelnou, jestliže je její charakteristická funkce, definovaná (x1, . . . , xn) = 1 pro (x1, . . . , xn) S a (x1, . . . , xn) = 0 pro všechny ostatní body v Rn , Riemannovsky integrovatelná. Tato definice Riemannova integrálu nedává přímo rozumný návod, jak hod- noty integrálů skutečně vypočíst. Sama ale okamžitě vede k základním vlastnostem Riemannova integrálu (srovnejte s Větou 6.11): Věta. Množina Riemannovsky integrovatelných funkcí na vícerozměrném intervalu S Rn je vektorovým prostorem a Riemannův integrál je na něm lineární formou. Pokud je obor integrace S zadán jako disjunktní sjednocení konečně mnoha Ri- emannovsky měřitelných oborů Si, je integrál funkce f přes S dán součtem integrálů přes obory Si. Důkaz. Všechny vlastnosti plynou přímo z definice Riemannova integrálu. Do- poručujeme promyslet samostatně podrobnosti. První část věty lze zapsat obvyklou formulí říkající, že integrace lineární kom- binace (nad skaláry v R) integrovatelných funkcí fi : Rn R, i = 1, . . . , k, je vždy možná a spočte se takto: S (a1f1(x1, . . . , xn) + + akfk(x1, . . . , xn)) dx1 . . . dxn = a1 S f1(x1, . . . , xn) dx1 . . . dxn + + ak S fk(x1, . . . , xn) dx1 . . . dxn. Druhá část pak říká že pro disjukntní Riemannovsky měřitelné množiny S1 a S2 a na obou těchto množinách integrovatelnou funkci f : Rn R platí S1S2 f(x1, . . . , xn) dx1 . . . dxn = S1 f(x1, . . . , xn) dx1 . . . dxn + S2 f(x1, . . . , xn) dx1 . . . dxn. 2. INTEGROVÁNÍ PODRUHÉ 245 8.18 8.24. Násobné integrály. Riemannovsky integrovatelné množiny zejména zahr- nují případy, kdy lze S definovat pomocí spojité funkční závislosti souřadnic hranič- ních bodů tak, že pro danou první souřadnici x umíme zadat dvěmi funkcemi rozsah další souřadnice y [(x), (x)], poté rozsah další souřadnice z [(x, y), (x, y)] apod. pro všechny další souřadnice. V případě naší koule to skutečně umíme: pro x [-1, 1] definujeme pro y rozsah y [- 1 - x2, 1 - x2]. Objem koule pak můžeme buď spočítat integrováním výše uvedené funkce f nebo můžeme integrovat charakteristickou funkci koule, tj. funkci identicky rovnou jedné na oblasti S R3 , která je definována ještě dalším určením z [- 1 - x2 - y2, 1 - x2 - y2]. Podstatná je přitom následující věta, která převádí výpočet Riemannova in- tegrálu na postupný výpočet několika integrálů v jedné proměnné (a ostatní pro- měnné jsou přitom považovány za parametry, které se mohou objevovat i mezích pro integraci) Věta. Nechť S je ohraničená množina zadaná jako výše a f je spojitá funkce na S. Pak je Riemannův integrál funkce f přes množinu S vyčíslen formulí S f(x1, x2, . . . , xn)dx . . . dz = b a (x1) (x1) . . . (x,y,... ) (x,y,... ) f(x1, x2, . . . , xn) dxn . . . dx2 dx1 Důkaz. Výsledek vyplývá docela snadno přímo z definice Riemannova integrálu pomocí konečných součtů. Stačí si pečlivě hlídat vhodné poskládání jednotlivých sčítanců konečných součtů tak, aby vycházely postupně přiblížení integrálů ve vnitřních závorkách. Díky stejno- měrné spojitosti Důsledek. Pro vícerozměrný interval S = [a1, b1]×[a2, b2]×. . .×[an, bn] a spojitou funkci f(x1, . . . , xn) na S je násobný integrál S f(x1, . . . , xn) dx1 . . . dxn = b1 a1 b2 a2 . . . bn an f(x1, . . . , xn) dx1 . . . dxn nezávislý na pořadí ve kterém postupně integraci provádíme. Důkaz. V předchozí větě je v případě vícerozměrného intervalu S kterékoliv pořadí integrace vyjádřením oblasti S v požadovaném tvaru. Na výsledku integrálu tak pořadí integrace nemůže mít vliv. Tento důsledek jsme už jednou dříve využili při studiu vztahu Fourierových transformací a konvolucí, viz odstavec 7.9. 8.25. Změna souřadnic při integraci. Při výpočtu integrálů funkcí jedné pro- měnné jsme používali transformace souřadnic jako mimořádně silný nástroj. Zkusme proto závěrem naší diskuse o integrování naznačit, jak lze transformace souřadnic používat pro integrály funkcí více proměnných. Připomeňme nejdříve (s vhodnou interpretací pro následné zobecnění), jak je to s transformacemi pro jednu proměnnou. Integrovaný výraz f(x) dx vyjadřuje plochu obdélníčku určeného (linearizovaným) přírůstkem proměnné x a hodnotou f(x). 246 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Pokud proměnnou transformujeme vztahem x = u(t), vyjadřuje se i linearizovaný přírůstek jako dx = du dt dt a proto i příslušný příspěvek pro integrál je vyjádřen jako f(u(t)) du dt dt, přičemž buď předpokládáme, že znaménko derivace u (t) je kladné, nebo dojde k obrácení mezí integrálu, takže ve výsledku se znaménko neprojeví. Intuitivně je postup v n proměnných docela podobný, pouze musíme použít znalostí z lineární algebry o objemu rovnoběžnostěnů. V Riemannových součtech proužíváme pro Riemannovy integrály přiblížení, které bere objem (plochu) malého vícerozměrného intervalu a násobí tuto hodno- tou funkce v reprezentujícím bodě. Pokud použijeme transformaci souřadnic, dosta- neme nejen hodnotu funkce v reprezentujícím bodě v novém souřadném vyjádření, ale musíme také vést v patrnosti změnu plochy nebo objemu příslušného malého ví- cerozměrného intervalu. Opět tu půjde o lineární přiblížení změny a tu máme dobře zvládnutou -- jde přeci o působení lineárního přiblížení použité transformace, tj. akci Jacobiho matice, viz 8.13. Změna objemu je přitom dána (v absolutní hodnotě) pomocí determinantu z této matice (viz naše úvahy na toto téma v lineární algebře, zejména 4.25). Věta. Nechť G(t1, . . . , tn) : Rn Rn , (x1, . . . , xn) = G(t1, . . . , tn), je spojitě diferencovatelné zobrazení, S = G(T) a T jsou Riemannovsky měřitelné množiny a f : S R spojitá funkce. Potom platí S f(x1, . . . , xn)dx1 . . . xn = T f(G(t1, . . . , tn))| det(D1 G(t1, . . . , tn))|dt1 . . . dtn. Důkaz. Podrobný formální důkaz nebudeme prezentovat, je však přímočarou realizací výše uvedené úvahy ve spojení s definicí Riemannova integrálu. Abychom si přiblížili obsah tvrzení poslední věty, uvedeme jeho speciální případ pro integrál funkce f(x, y) ve dvou proměnných a transformaci G(s, t) = (g(s, t), h(s, t)). Dostáváme G(T ) f(x, y)dxdy = T f(g(s, t), h(s, t)) g s h t - g t h s dsdt. Úplně konkrétně, zkusme spočíst integrál z charakteristické funkce kružnice o poloměru R (tj. její plochu) a integrál z funkce f(t, ) = cos(t) zadané v polár- ních souřadnicích uvnitř kružnice o poloměru 1 2 (tj. objem schovaný pod takovou ,,čepičkou jarmulkou posazenou nad počátek , viz obrázek). 2. INTEGROVÁNÍ PODRUHÉ 247 -1,5 -1 -0,5 0 0,2 0,4 0 0,6 0,8 y 1 -1,50,5 -1 -0,51 0 0,5 11,5 x1,5 Nejprve spočítáme Jacobiho matici transformace x = r cos , y = r sin D1 G = cos -r sin sin r cos . Proto je determinant z této matice roven det D1 G(r, ) = r(sin2 + cos2 ) = r. Můžeme tedy přímo počítat pro kružnici S, která je obrazem obdélníku (r, ) [0, R] × [0, 2] = T. Dostaneme tedy plochu kružnice: S dxdy = 2 0 R 0 rdr d = R 0 2rdr = R2 . Integrace funkce f proběhne s využitím násobného integrování a integrace per par- tés obdobně: S dxdy = 2 0 /2 0 r cos rdr d = 2 - 2. 8.26. Příklady. 8.26.1. Určete povrch části válce x2 +z2 = 16, který leží uvnitř válce x2 +y2 = 16. Řešení. Integrál vypočteme v kartézských souřadnicích. Vzhledem k symetrii tělesa stačí integrovat přes první oktant (záměníme-li x za -x, či y za -y, či z za -z tak se rovnice tělesa nezmění). Část tělesa ležící v prvním kvadrantu je dána prostorem ležícím pod grafem funkce z2 = 16 - x2 a nad čtvrtkruhem x2 + y2 16, x 0, y 0. rovinou z = 0, je S = 8 4 0 16-x2 0 4 16 - x2 dy dx = 128. 8.26.2. Určete objem části prostoru ležící uvnitř válce x2 + y2 = 4 a ohraničené rovinami z = 0 a z = x + y + 2. 248 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Řešení. V příkladu budeme používat válcových souřadnic daných rovnicemi x = r cos(), y = r sin(), z = z s Jakobiánem této transformace J = r. Těleso rozdělíme na dvě části, ležící nad, respektive pod rovinou z = 0, jejich objemy označíme V1, resp. V2. Dále si všimněme, že částí tělesa o objemu V1 je i jehlan s vrholy [0, 0, 0], [0, 0, 2], [-2, 0, 0], [0, -2, 0]. Část tělesa ležící nad rovinou z = 0 tedy rozdělíme ještě na dvě části, jejichž objem spočítáme zvlášť. V1 - Vjehlan = -/2 2 0 r2 (sin() + cos()) + 2r dr d = 6 + 16 3 , Vjehlan = 4 3 Dále V1 - V2 = - 2 0 r2 (sin() + cos()) + 2r dr d = 8, tedy V1 + V2 = 4 + 40 3 . 8.26.3. Určete objem a souřadnice těžiště kužele o kruhové podstavě s poloměrem r a výšce h. Řešení. Otočíme-li kužel vrcholem dolů a ten umístíme do počátku souřadnic, pak ve válcových souřadnicích: V = 4 /2 0 r 0 h h r dz d d = 1 3 hr2 . Těžiště zjevně leží na ose z. Pro z-tovou souřadnici pak máme z = 1 V kužel zdV = 1 V /2 0 r 0 h h r z dz d d = 3 4 h. Těžiště tedy leží ve výšce 1 4 h nad středem podstavy kužele. 8.26.4. Určete objem tělesa v R3 , které je dáno průnikem koule x2 + y2 + z2 = 4 s válcem x2 + y2 = 1. Opět vzhledem k symetrii tělesa spočítáme pouze objem části tělesa ležící v prv- ním oktantu. Integrujeme ve válcových souřadnicích daných rovnicemi x = r cos(), y = r sin(), z = z, s Jacobiánem dané trasformace J = r, a to část prostoru mezi rovinou z = 0 a grafem funkce z = 4 - x2 - y2 = 4 - r2. Můžeme tedy rovnou psát dvojný integrál Řešení. V = 8 /2 0 1 0 r 4 - r2 dr d = 2 3 (8 - 3 3). 8.26.5. Určete objem tělesa v R3 , které je dáno průnikem koule x2 + y2 + z2 = 2 s paraboloidem z = x2 + y2 . Použijeme opět válcových souřadnic. 2. INTEGROVÁNÍ PODRUHÉ 249 Řešení. V = 2 0 1 0 (2-r2 ) r2 r dz dr d = 4 2 3 - 7 6 . 8.26.6. Určete objem tělesa v R3 , které je ohraničeno eliptickým válcem 4x2 +y2 = 1, rovinami z = 2y a z = 0, ležící nad rovinou z = 0. Řešení. Vzhledem k symetrii úlohy bude výhodné zavést souřadnice x = 1 2 r cos(), y = r cos(), z = z, s Jakobiánem příslušné transformace J = 1 2 r. Eliptický válec má v těchto souřadnicích rovnici r2 = 1. V = 0 1 0 r sin() 1 2 r dr d = 0 1 0 r2 sin() dr d = 0 1 3 sin() d = 2 3 . 8.26.7. Určete objem tělesa v R3 , které je ohraničeno paraboloidem 2x2 + y2 = z a rovinou z = 2. Řešení. Obdobně jako v předchozí úloze volíme ,,speciální souřadnice respektující symetrii úlohy: x = 1 2 r cos(), y = r sin(), z = z s Jacobiánem J = 1 2 r. Rovnice paraboloidu je v těchto souřadnicích z = r2 a pro objem tělesa můžeme psát V = 4 /2 0 2 0 2 r2 1 2 r dz dr d = = 2 2 /2 0 2 0 2r - r3 dr d = 2 2 /2 0 d = = 2. 8.26.8. Vypočtěte objem elipsoidu x2 + 2y2 + 3z2 = 1. Řešení. Uvážíme souřadnice x = r cos() sin() y = 1 2 r sin() sin() z = 1 3 r cos() Odpovídající determinant z Jakobiánu je pak 1 6 r2 sin(), objem je tedy 2 0 0 1 0 1 6 r2 sin() dr d d = 4 3 6 r3 . 8.26.9. Vypočtěte objem tělesa omezeného paraboloidem 2x2 + 5y2 = z a rovinou z = 1. 250 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI Řešení. Volíme souřadnice x = 1 2 r cos() y = 1 5 r sin() z = z Determinant Jakobiánu je r 10 , objem je tedy 2 0 1 0 1 r2 r 10 dz dr d = 2 10 . 3. Diferenciální operátory 7.11 8.27. Lineární a nelineární modely. Pojem derivace jsme zavedli, abychom mohli pracovat s okamžitými změnami studovaných veličin. Ze stejných důvodů jsme kdysi v úvodní kapitole zaváděli diference a právě vztahy mezi hodnotami veličin a změnami těch samých nebo jiných veličin vedly k rovnicím. Nejjednodušším modelem bylo úročení vkladů nebo půjček (a totéž pro tzv. Malthusiánský model populace). Přírůstek byl úměrný hodnotě, viz 1.12. V rámci spojitého modelování by stejný požadavek vedl na rovnici vztahující derivaci funkce y (x) s její hodnotou e7.20 (8.6) y (x) = r y(x) s konstantou úměrnosti r. Je snadné uhodnout řešení této rovnosti y(x) = C erx s libovolnou konstantou C. Tuto konstantu určíme jednoznačně volbou tzv. počá- teční hodnoty y0 = y(x0) v nějakém bodě x0. Pokud by část růstu v našem modelu byla dána konstatním působením nezávislém na hodnotě y nebo x (jako jsou např. paušální poplatky za vedení účtu nebo přirozený úbytek populace třeba v důsledku porážek na jatkách), mohli bychom použít rovnici s konstantou s na pravé straně e7.21 (8.7) y (x) = r y(x) + s. Zjevně bude řešením této rovnice funkce y(x) = C erx - s r . K tomuto závěru je velice lehké dojít, pokud si uvědomíme, že množinou věech řešení rovnice (8.6) je jednorozměrný vektorový prostor, zatímco řešení rovnice (8.7) se obdrží přičtením kteréhokoliv jednoho jejího řešení ke všem řešením předchozí rovnice. Lze pak snadno najít konstantní řešení y(x) = k pro k = -s r . Podobně se nám v odstavci 1.19 podařilo vytvořit tzv. logistický model popu- lačního růstu založený na předpokladu, že poměr změny velikosti populace p(n + 1) - p(n) a její velikosti p(n) je v afinní závislosti na samotné velikosti populace. Nyní bychom tentýž vztah pro spojitý model patrně formulovali pro populaci p(t) závislou na čase t jako e7.22 (8.8) p (t) = p(t) - r K p(t) + r , tj. při hodnotě p(t) = K pro velkou konstantu K je přírůstek nulový, zatímco pro p(t) blízké nule je poměr rychlosti růstu populace k její velikosti blízký r, což je malé číslo v řádu setin vyjadřující rychlost růstu populace za dobrých podmínek. 3. DIFERENCIÁLNÍ OPERÁTORY 251 Není jistě snadné vyřešit bez znalostí teorie takovou rovnici (i když právě tento typ rovnic zanedlouho zvládneme), nicméně jako cvičení lze jistě ověřit, že násle- dující funkce řešením pro každou konstantu C je p(t) = K 1 + CK e-rt . y 100 80 60 40 20 t 0 200150100500 100 80 60 40 20 x 200150100500 Srovnáním červeného grafu (levý obrázek) této funkce s volbou K = 100, r = 0, 05 a C = 1 (první dvě jsme takto použili v 1.19, poslední odpovídá přibližně počáteční hodnotě p(0) = 1) s pravým obrázkem (řešení diferenční rovnice z 1.19) vidíme, že skutečně oba přístupy k modelování populací dávají docela podobné výsledky. Pro srovnání výstupu je také do levého obrázku zeleně vkreslen graf řešení rovnice (8.6) s touž konstantou r a počáteční podmínkou. 7.12 8.28. Diferenciální rovnice prvního řádu. Obecně rozumíme (obyčejnou) di- ferenciální rovnicí prvního řádu vztah mezi derivací funkce y (x) v proměnné x, její hodnotou y(x) a samotnou proměnnou, který lze zapsat jako F(y (x), y(x), x) = 0 nějakou pevnou funkci F, která každé trojici reálných čísel přiřadí jedno reálné číslo. Zápis připomíná implicitně zadané funkce y(x), nicméně navíc je tu závislost na derivaci hledané funkce y(x). Pokud je alespoň rovnice explicitně vyřešena vzhledem k derivaci, tj. y (x) = f(x, y(x)), můžeme si dobře graficky představit, co taková rovnice zadává. Pro každou hodnotu (x, y) v rovině si totiž můžeme představit šipku udávající vektor (1, f(x, y)), tj. rychlost se kterou nám rovnice grafu řešení přikazuje pohybovat se rovinou. Např. pro rovnici (8.8) dostaneme takovýto obrázek (i s vyneseným řešením pro počáteční hodnotu jako výše). 252 8. SPOJITÉ MODELY S VÍCE PROMĚNNÝMI 0 x 200150100500 y(x) 100 80 60 40 20 Intuitivně lze na základě takových obrázků očekávat, že pro každou počáteční podmínku bude existovat právě jedno řešení naší rovnice. Takové tvrzení skutečně platí pro všechny rozumné funkce f, my si výsledek sformulujeme pro dosti velkou třídu rovnic takto: Věta (O existenci a jednoznačnosti řešení ODE). Nechť funkce f(x, y) : R2 R má spojité parciální derivace. Pak pro každý bod (x0, y0) R2 existuje interval [x0 - a, x0 + a], s a R kladným, a právě jedna funkce y(x) : R R, která je řešením rovnice y (x) = f(x, y(x)). Důkaz. Všimněme si, že funkce y(x) je řešením naší rovnice tehdy a jen tehdy, když y(x) = y0 + Z x x0 y (x) dx = y0 + Z x x0 f(x, y(x)) dx. Pravá strana tohoto výrazu je ovšem, až na konstantu, integrální operátor L(y)(x) = y0 + Z x x0 f(x, y(x)) dx a při řešení diferenciální rovnice vlastně hledáme pevný bod pro tento operátor L, tj. chceme najít funkci y = y(x) s L(y) = y. Pro operátor L můžeme docela lehce odhadnout, jak se liší jeho hodnoty L(y) a L(z) pro různé argumenty y(x) a z(x). Skutečně, díky spojitosti parciálních derivací funkce f (ve skuteč- nosti využíváme pouze tzv. Lipschitzovy podmínky pro parciální derivaci podle y) dostáváme, viz ?? |(L(y) - L(z))(x)| = ˛ ˛ ˛ ˛ Z x x0 f(x, y(x)) - f(x, z(x)) dx ˛ ˛ ˛ ˛ Z x x0 |f(x, y(x)) - f(x, z(x))| dx C Z x x0 |y(x) - z(x)| dx D|x - x0| dx 3. DIFERENCIÁLNÍ OPERÁTORY 253 pro vhodné konstanty C a D. Pro a dostatečně malé proto bude platit sup|x-x0| 5 budou jistě buď aspoň tři plné nebo aspoň tři čárkované. Situace je znázorněná na pravém obrázku. Ve zobrazeném kousku celé situace se sledovaný host se třemi jinými zná, zbylé puntíky jsou spojeny čárkovaně ­ to by znamenalo, že máme trojúhelník hostů, kteří se neznají. Pokud by se ale jedna dvojice z nich znala, vznikl by naopak trojúhelník hostů, kteří se znají. Nyní předpokládejme, že máme krabičku, která požírá jeden bit za druhým (třeba podle toho, jestli dveřmi zrovna prošel muž nebo žena ­ jednička nechť označuje třeba ženu), a má svítit buď modře nebo červeně podle toho, zda byl 261 262 9. KOMBINATORICKÉ METODY poslední bit nula nebo jednička (a bodle barvy světla tedy můžeme tedy poznat, zda je za dveřmi muž nebo žena). Opět si schéma můžeme pěkně znázornit: 0 S BLUE RED 0 1 1 1 0 Třetí uzel, ze kterého pouze vychází dvě šipky naznačuje start před prvním zaslaným bitem. 9.2 9.2. Základní pojmy grafů. V obou příkladech máme společné schéma. Máme nějakou konečnou množinu objektů, kterou si znázorňujeme jako uzly a jejich vlast- ností, které znázorňujeme spojnicemi mezi nimi. Už dávno víme, že takové situace umíme popisovat pomocí tzv. relací, viz. text začínající odstavcem 1.57 v šesté části první kapitoly. Třeba čtenáře neodstraší ukázka, jak se jednoduchým věcem dá složitě říkat: V našem prvním příkladu pracujeme na stejné množině hostů se dvěmi komplementárními symetrickými a antireflexními relacemi, ve druhém pak jde o příklad dvou antisymetrických relací na třech prvcích. My teď ale můžeme na relace pozapomnět a budeme pracovat s terminologií odpovídající našim obrázkům. Nenechte se zmást novým významem slova graf, pro který jsme již měli význam u funkcí. Ve skutečnosti není věcná podobnost až tak vzdálená. Definice. Grafem G = (V, E) rozumíme množinu V jeho vrcholů spolu s podmno- žinou E množiny V 2 všech dvouprvkových podmnožin ve V . Prvkům E říkáme hrany grafu. Vrcholům ve hraně e = {v, w}, v = w, říkáme hraniční vrcholy hrany e. O hranách, které mají daný vrchol v za hraniční říkáme, že z vrcholu v vycházejí. Orientovaným grafem G = (V, E) rozumíme množinu V jeho vrcholů spolu s podmnožinou E V × V . Prvnímu z vrcholů definujících hranu e = (v, w) říkáme počáteční vrchol hrany, druhému pak koncový vrchol. Hrana e vychází ze svého počátečního vrcholu a vchází do koncového. U orientovaných hran mohou být koncový a počáteční vrchol totožný, hovoříme pak o smyčce. Sousední hrany grafu jsou ty, které sdílí hraniční vrchol, u sousedních hran orientovaného grafu musí být vrchol pro jednu koncový a pro druhou počáteční. Naopak, sousední vrcholy jsou ty, které jsou hraničními pro tutéž hranu. Grafy jsou mimořádně dobrým jazykem pro přemýšlení o postupech a odvo- zování vztahů týkajících konečných množin objektů. Jsou totiž pěkným příkladem kompromisu mezi přirozeným sklonem k ,,přemýšlením v obrázcích a přesným ma- tematickým vyjadřováním. Obecný jazyk teorie grafů nám v konkrétních úlohách také umožňuje přidávat informace o vrcholech nebo hranách. Můžeme tak např. ,,obarvit vrcholy podle příslušnosti objektů k několika disjunktním skupinám nebo můžeme označit hrany několika různými hodnotami apod. Existence hrany mezi vr- choly různých barev může naznačit ,,konflikt . Např. když modré a červené uzly 1. GRAFY A ALGORITMY 263 představují pánskou a dámskou část večírku, pak hrana mezi vrcholy různých ba- rev může znamenat potenciální nevhodnost sdílení pokoje pro přenocování. Náš první příklad v předchozím odstavci můžeme tedy chápat jako graf s obarvenými hranami. Dokázané tvrzení v této řeči zní: V grafu Kn = (V, V 2 ) s n vrcholy a se všemi možnými hranami obarvenými na dvě barvy je vždy alespoň jeden trojúhelník z hran o stejné barvě, pokud je počet vrcholů alespoň šest. Výše znázorněný orientovaný graf s označenými hranami (hodnotami nula nebo jedna) představuje jednoduchý konečný automat. Tento název odráží představu, že graf popisuje proces, který se vždy nachází ve stavu popsaným některým z uzlů a další stav nastane procesem, odpovídajícím jedn z hran, které z vrcholu vychází. Teorií konečných automatů se zde nebudeme podrobněji zabývat. 9.3 9.3. Příklady užitečných jednoduchých grafů. Nejjednodušším grafem je graf bez hran, pro ten si ale ani nebudeme zavádět zvláštní označení. Opačný extrém je naopak užitečný a grafu se všemi možnými hranami říkáme úplný graf. Značíme symbolem Kn, kde n je počet vrcholů grafu. Graf K4 a K5 jsme již viděli, K3 je trojúhelník, K2 je úsečka. Dalším důležitým grafem je cesta, tj. graf, kde existuje uspořádání vrcholů (v0, . . . , vn) takové, že E = {e1, . . . , en}, kde ei = {vi-1, vi}, pro všechny i = 1, . . . , n. Hovoříme o cestě délky n a značíme ji Pn. Pokud cestu upravíme tak, že poslední a první vrchol splývají, dostaneme kružnici délky n a značíme CN . Na dalším obrázku vidíme K3 = C3, C5 a P5 0 000 00 000 00 0 1 111 11 11 111 1 0 0 1 1 0011 0 0 1 1 0011 0011 0011 0011 0011 0 0 1 1 0011 0011 0011 00110000 000000000000 00000000 00000000 000000000000 1111 11111111 111111111111 11111111 111111111111 0000 000000000000 00000000 00000000 000000000000 1111 11111111 111111111111 11111111 111111111111 0000000011111111 000000000000 00000000 00000000 111111111111 11111111 11111111 000000000000 00000000 00000000 111111111111 11111111 11111111 0000 0000 000000 00 11 111111 111111 11 00000111110000 0000 000000 00 11 111111 111111 11 0000 0000 000000 00 11 111111 111111 11 0000011111 00 00 000 0 1 111 111 1 00000 00000 11111 11111 0011 Dalším příkladem je tzv. úplný bipartitní graf, který vznikne tak, že vrcholy si obarvíme dvěmi barvami a pak přidáme všechny hrany, které spojí vrcholy různých barev. Značíme jej Km,n, kde m a n jsou počty vrcholů s jednotlivými barvami. Na obrázku je vidět K1,3, K2,3 a K3,3. 00110011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011000000000000000000000000 000000000 111111111111111111111 111111111111 000000000000000000000000 000000000 111111111111111111111 111111111111 0000000000000000 000000 11111111111111 11111111 0000000000000000 000000 11111111111111 11111111 00000000000000000000000000000000 000000000000 1111111111111111111111111111 1111111111111111 00000000 000 1111111 1111 0000000000000000 000000 11111111111111 11111111 0000000000000000000000000000000000000000 000000000000000 11111111111111111111111111111111111 11111111111111111111 000000000000000000000000 000000000 111111111111111111111 111111111111 000000000000000000000000 000000000 111111111111111111111 111111111111 000000000000000000000000 000000000 111111111111111111111 111111111111 000000000000000000000000 000000000 111111111111111111111 111111111111 0000000000000000000000000000000000000000 000000000000000 11111111111111111111111111111111111 11111111111111111111 0000000000000000000000000000000000000000 000000000000000 11111111111111111111111111111111111 11111111111111111111 0011 Dobrým příkladem grafu je také tzv. hyperkostka Hn v dimenzi n, která vznikne tak, že vrcholy jsou všechna čísla 0, . . . , 2n - 1. Hrany spojí právě ta čísla, která se v zápisu v dvojkové soustavě liší v právě jednom bitu. Na obrázku níže je H4 a popis vrcholů je naznačen. Všimněme si, že přímo z definice vyplývá, že hyperkostku v dané dimenzi vždy cky dostaneme tak, že vhodně spojíme hranami dvě hyperkostky o jednu dimenzi menší. Na obrázku je to naznačeno tak, že příslušné hrany mezi dvěmi disjunktními 264 9. KOMBINATORICKÉ METODY kopiemi H3 jsou čárkované. Samozřejmě ale můžeme tímto způsobem rozložit H4 mnoha různými způsoby. 1001 0011 0011 0 0 1 1 0 0 1 1 0011 0 0 1 1 0 0 1 1 000000001111111100000 0000000000 0000000000 000000000000000 0000000000 00000 11111 1111111111 1111111111 1111111111 1111111111 1111111111 00000 0000000000 0000000000 000000000000000 0000000000 00000 11111 1111111111 1111111111 1111111111 1111111111 1111111111 0000000000 0000000000 0000000000 0000000000 0000000000 00000 11111 1111111111 111111111111111 11111 11111 1111111111 11111 0000000011111111 0000000000 0000000000 0000000000 0000000000 0000000000 00000 11111 1111111111 111111111111111 11111 11111 1111111111 11111 0000000011111111 0000000011111111 0 0 1 1 0 0 1 1 0 0 1 1 0011 0011 0 0 1 1 0 0 1 1 0 0 1 1 000000001111111100000 0000000000 0000000000 0000000000 00000 00000 00000 00000 11111 1111111111 1111111111 1111111111 1111111111 11111 11111 00000 0000000000 0000000000 0000000000 00000 00000 00000 00000 11111 1111111111 1111111111 1111111111 1111111111 11111 11111 00000 00000 00000 0000000000 00000 0000000000 00000 00000 00000 11111 11111 11111 1111111111 11111 1111111111 11111 11111 11111 0000000011111111 00000 00000 00000 0000000000 00000 0000000000 00000 00000 00000 11111 11111 11111 1111111111 11111 1111111111 11111 11111 11111 0000000011111111 0000000011111111 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 00000000000000000000000000000000 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 11111111111111111111111111111111 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 0000000000000000 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 1111111111111111 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 00000000000000000000000000000000 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 11111111111111111111111111111111 0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 1111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 11111111111111111111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 11111111111111111111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 000000000000000000000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 00000000000000000000000000000000 0000000000000000 0000000000000000 1111111111111111 11111111111111111111111111111111 11111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 111111111111111111111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 11111111111111111111111111111111 1111111111111111 1111111111111111 0000 0001 0010 0100 0110 1110 1111 1011 0011 Poslední dva príklady jsou tzv. cyklický žebřík CLn s 2n vrcholy, který je složen propojením dvou kopií kružnice Cn tak, že hrany spojí odpovídající vrcholy dle pořadí a tzv. Petersenův graf, který je sice docela podobný CL5, ale ve skutečnosti je to nejjednoduší ,,vyvraceč nesprávných úvah ­ graf, na němž se vyplatí testovat tvrzení, než je začneme dokazovat. 0 0 1 1 0 0 1 1 0011 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 00110011 0 0 1 1 0011 0011 0011 0 0 1 1 0011 0011 0011 0011 0011 0 0 1 1 9.4 9.4. Morfismy grafů a podgrafy. Jako u všech matematických pojmů, klíčovou roli hrají zobrazení mezi objekty, která zachovávají uvažovanou strukturu. Definice. Pro grafy grafy G = (V, E) a G = (V , E ) budeme za morfismus f : G G považovat zobrazení fV : V V mezi množinami vrcholů takové, že je-li e = {v, w} hrana v E, pak e = {f(v), f(w)} musí být hranou v E . V dalším textu nebudeme ve značení odlišovat morfismus f a zobrazení fV . Zároveň pak takové zobrazení fV určuje i zobrazení fE : E E , f(e) = e , kde e a e jsou jako výše. Pro orientované grafy je definice shodná, jen pracujeme s uspořádanými dvoji- cemi e = (v, w) v roli hran. Všimněme si, že u grafů tato definice znamená, že pokud f(v) = f(w) pro dva různé vrcholy ve V , pak mezi nimi nesměla být hrana. U orientovaných grafů, taková hrana je přípustná, pokud je na společném obrazu smyčka. 1. GRAFY A ALGORITMY 265 Speciálním případem je morfismus libovolného grafu G do úplného grafu Km. Takový morfismus je ekvivalentní vybranému obarvení vrcholů grafu V pomocí m různých jmen uzlů Km tak, že stejně obarvené uzly nejsou spojeny hranou. Hovoříme v tomto případě o barvení grafu pomocí m barev. V případě, že je morfismus f : G G bijekcí na vrcholech takovou, že i f-1 je morfismem, hovoříme o izomorfismu grafů. Izomorfní grafy se liší pouze různým pojmenováním vrcholů. Snadno si budeme umět načrtnout až na izomorfismus všechny grafy na málo vrcholech (třeba třech nebo čtyřech). Obecně jde ale o nesmírně složitý kombinato- rický problém a i rozhodnutí o konkrétních dvou daných grafech, zda jsou izomorfní je obecně mimořádně obtížné. Jednoduchými a mimořádně užitečnými příklady morfismů grafů jsou pojmy cesta, sled a kružnice v grafu: Cestou délky n v grafu G rozumíme morfismus p : Pn G takový, že p je injektivní zobrazení (tj. všechny obrazy vrcholů v0, . . . , vn z Pn jsou různé). Sled délky n v grafu G je jakýkoliv morfismus s : Pn G (tj. v obrazu se mohou opakovat vrcholy). Sled si můžeme představit jako dráhu ,,přičinlivého ale tápajícího poutníka z uzlu f(v0) do uzlu fvn . Poutník se totiž v žádném uzlu nezastaví, ale klidně se po cestě grafem vrací do uzlů nebo i dokonce po hranách, kterými dříve šel. Cesta je naopak průchod grafem z počátečního uzlu f(v0) do koncového f(vn) bez takových zbytečných oklik. Obrazy cest i sledů jsou příkladem tzv. podgrafů, ne však stejným způsobem. Definujme nejprve obecně, co je to podgraf. Uvažujme graf G = (V, E) a nějakou podmnožiny V V . Indukovaný podgraf je graf G = (V , E ), kde e E patří i do E právě, když oba krajní vrcholy hrany e patří do V . Podgraf G = (V, E ) je takový graf, který má stejnou množinu vrcholů jako G, ale jeho množina hran E je libovolnou podmnožinou. Obecně můžeme pro konstrukci podgrafu použít oba procesy ­ napřed zvolíme V V a pak v indukovaném podgrafu vybereme cílovou množinu hran E . Úplně formálně tedy dostáváme: Definice. Graf G = (V , E ) je podgrafem v grafu G = (V, E), jestliže V V , E E. Snadno je vidět, že každý obraz homomorfismu (tj. obraz jak vrcholů tak hran) tvoří podgraf. Podgraf, který je homomorfním obrazem cesty nazýváme také cestou. Je zřejmé, každá taková cesta o n 2 vrcholech v grafu vzniká právě dvěma způsoby jako homomorfní obraz Pn, které se liší v počátečním a koncovém uzlu. Naopak, jestliže obraz sledu obsahuje k uzlů, můžeme obecně pro n > k najít nepřeberně způsobů, jak takový obraz obdržet. Kružnice v grafu G je injektivním homomorfním obrazem grafu Cn v G. Všim- něte si, že sama kružnice Cn je také homomorfním obrazem cesty Pn, kdy první a poslední bod cesty zobrazíme do téhož vrcholu a zvolíme orientaci cesty. Najděte si v předchozích obrázcích cesty nebo kružnice obsažené ve větších grafech. 9.5 9.5. Kolik je vlastně neizomorfních grafů? Odpovědět přesně je děsně těžké. Odhad- nout, že je neizomorfních grafů moc, je poměrně snadné: Všech možných grafů na n vrcholech je tolik, kolik je všech podmnožin v množině všech hran. Všech podmnožin o mohutnosti N je 2N . Isomorfních grafů nemůže být víc, než kolik je 266 9. KOMBINATORICKÉ METODY bijekcí na n vrcholech. Těch je n!. Neizomorfních grafů tedy nemůže být méně než k(n) = 2(n 2) n! . Jestliže si tuto funkci zlogaritmujeme při základu 2, dostaneme (s využitím zjevného vztahu n! nn ) log2 k(n) = n 2 ! - log2 n! n2 2 ,, 1 - 1 n - 2 log2 n n Pro n tedy zjevně dostáváme log2 k(n) = 1 2 n2 - O(n log2 n) viz terminologii pro odhady z 8.35. To znamená, že počet neizomorfních grafů na n uzlech roste asymptoticky stejně rychle jako množství všech možných grafů, tj. číslo 2(n 2). Můžeme to nepřesně formulovat tak, že velká většina všech možných grafů bude po dvou neizomorfní. 9.6. Příklad. 9.6.1. Určete, kolik existuje homomorfismů grafů a) z P2 do K5, b) z K3 do K5 Řešení. a) 5 4 4 = 80. b) 5 4 3 = 60. Jediné omezení je, že se uzly mezi kterými vede hrana nesmí zobrazit na tentýž uzel. 9.6 9.7. Stupně uzlů a skóre grafu. Izomorfní grafy se od sebe liší pouze přejme- nováním vrcholů. Proto musí mít stejné všechny číselné charakteristiky, které se přešíslováním vrcholů nemění. Jednoduché údaje tohoto typu můžeme dostat sle- dováním počtů hran vycházejících z jednotlivých vrcholů. Pro vrchol v V v grafu G = (V, E) říkáme, že jeho stupeň je k, jestliže v E existuje k hran, jejichž hraničním vrcholem v je. Píšeme v takovém případě deg v = k. Skóre grafu G s vrcholy V = (v1, . . . , vn) je posloupnost (deg v1, deg v2, . . . , deg vn) Je zřejmé, že pro izomorfní grafy se jejich skóre může lišit pouze permutací hodnot. Pokud tedy porovnáme skóre grafů setříděné podle velikosti hodnot, pak různá skóre zaručují neizomorfnost grafu. Naopak ale snadno najdeme příklad grafů se stejným skóre, které izomorfní být nemohou, např. G = C3 C3 má skóre (2, 2, 2, 2, 2, 2), stejně jako C6. Zjevně ale izomorfní nejsou, protože v C6 existuje cesta délky 5, která v druhém grafu být nemůže. Zajímají nás samozřejmě také kritéria, jaká skóre mohou vůbec grafy mít. Pro- tože každá hrana vychází ze dvou vrcholů, musí být v celkovém součtu skóre za- počtena každá hrana dvakrát. Proto platí e9.1 (9.1) vV deg v = 2|E|. Zejména tedy musí být součet všech hodnot skóre sudý. 1. GRAFY A ALGORITMY 267 Následující věta je naší první úvahou o operacích nad grafy. Protože je důlaz konstruktivní, jde vlastně o návod, jak pro dané skóre buď zjistit Věta (Algoritmus na sestrojení grafu s daným skóre). Pro libovolná přirozená čísla 0 d1 dn existuje graf G na n vrcholech s těmito hodnotami skóre tehdy a jen tehdy, když existuje graf se skóre (d1, d2, . . . , dn-dn - 1, dn-dn+1 - 1, . . . , dn-1 - 1) na n - 1 vrcholech. Důkaz. Na jednu stranu je implikace jednoduchá: Pokud existuje graf G o n - 1 vrcholech se zadaným skóre, pak můžeme přidat ke grafu G nový vrchol vn a spojit jej hranou s posledními dn uzly grafu G . Tím dostaneme požadovaný graf G s předepsaným skóre. Naopak je to o něco těžší. Postup nám zároveň ukáže, jak málo skóre určuje graf, z něhož vzniklo. Ukážeme, že při pevně zadaném skóre (d1, . . . , dn) s 0 d1 dn vždy existuje graf, jehož uzel vn je spojen hranou právě s posledními dn uzly vn-dn ,. . . , vn-1. Idea je jednoduchá -- pokud některý z posledních dn uzlů vk není hranou spojen s vn, musí být vn spojen s některým z vrcholů dřívějších. Pak bychom měli umět prohodit koncové vrcholy dvou hran tak, aby vn a vj spojeny byly a skóre se nezměnilo. Technicky to lze provést takto: Uvažme všechny grafy G s daným skóre a označme si pro každý takový graf číslo (G), které je největší index vrcholu, který není spojen hranou s vn. Nechť G je nyní pevně zvolený graf s (G) nejmenším možným. Pak buď je (G) = n - dn - 1 a tedy jsme získali požadovaný graf nebo je (G) n - dn. V posledním případě ale musí být vn spojen hranou s některým vi, i < (G). Protože je deg v(G) deg vi, nutně existuje také hrana spojující v(G) s v pro < i. Nyní záměnou hran {v , v(G)} s {v , vi} a {vi, vn} s {v(G), vn} dostáváme graf G s týmž skóre, ale menším (G ), což je spor s naší volbou. (Namalujte si obrázek!) Nutně tedy platí první z možností a důkaz je hotov. Všimněme si, že skutečně věta dává přesný postup, jak zkonstruovat graf se zadaným skóre. Pokud by takový graf neexistoval, algoritmus to po cestě pozná. Postup je takový, že od zadaného vzestupně uspořádaného skóre postupně odprava od hodnot odečítáme tolikrát jedničku, kolik je největší hodnota dn. Uspořádáme znovu výsledné skóre postupujeme stejně, dokud buď neumíme přímo graf se za- daným skóre napsat nebo naopak nevidíme, že takový neexistuje. Jestliže graf v některém z kroků sestrojíme, zpětným postupem přidáváme vždy jeden nový uzel a hrany podle toho, jak jsme odečítali jedničky. Zkuste si několik jednoduchých příkladů sami. Důležité upozornění -- lgoritmus sestrojuje pouze jeden z mnoha grafů, které mohou k danému skóre existovat! U orientovaných grafů rozlišujeme vstupní stupeň deg+ v vrcholu v a výstupní stupeň deg- v. Říkáme, že orientovaný graf je vyvážený, když pro všechny uzly platí deg- v = deg+ v. 9.7 9.8. Algoritmy a reprezentace grafů. Jak jsme již naznačovali, grafy jsou ja- zykem, ve kterém často formulujeme algoritmy. Samotný pojem (grafového) algoritmu můžeme (pro naše potřeby) formalizovat jako postup, kdy v nějakém orientovaném grafu přecházíme z uzlu do uzlu podél 268 9. KOMBINATORICKÉ METODY orientovaných hran a přitom zpracováváme informace, které jsou určeny a ovlivněny výsledkem předchozích operací, uzlem, ve kterém se zrovna nacházíme, a hranou, kterou jsme do uzlu vstoupili. Při zpracování informace se zároveň rozhodujeme, kterými výstupními hranami budeme pokračovat a v jakém pořadí. Pokud je graf neorientovaný, můžeme všechny hrany považovat za dvojice hran orientované opač- nými směry. Abychom mohli dobře takové algoritmy realizovat (většinou s pomocí počítače), je třeba umět uvažovaný graf efektivně zadat. Jednou z možností je tzv. hranový seznam (Edge List). Graf G = (V, E) si v něm reprezentujeme jako dva seznamy V a E propojené ukazately tak, že každý vrchol ukazuje na všechny z něj vycházející hrany a každá hrana ukazuje na svůj počáteční a koncový vrchol. Je vidět, že pamět potřebná na uchování grafu je v tomto případě O(|V | + |E|), protože na každou hranu ukazujeme právě dvakrát a na každý vrchol ukazujeme tolikrát, kolik je jeho stupeň a součet stupňů je také roven dvojnásobku počtu hran. Až na konstantní násobek jde tedy stále o optimální způsob uchovávání grafu v paměti. Zcela jiný způsob je zadání tzv. matice sousednosti grafu. Uvažme (neoriento- vaný) graf G = (V, E), zvolme uspořádání jeho vrcholů V = (v1, . . . , vn) a definujme matici AG = (aij) nad Z2 (tj. zaplněnou jen nulami a jedničkami) takto: aij = 1 jestliže je hrana eij = {vi, vj} v E 0 jestliže není hrana eij = {vi, vj} v E Popřemýšlejte samostatně, jak vypadají matice grafů z příkladů na začátku této kapitoly. Při nejjednodušším způsobu uchovávání matic v poli je zadání grafu pomocí matice sousednosti velice neefektivní metoda. Potřebuje totiž vždy O(n2 ) místa v paměti. Pokud je ale v grafu málo hran, dostáváme tzv. řídkou matici se skoro všemi prvky nulovými. Existují ovšem postupy, jak tyto řídké matice uchovávat v paměti efektivněji. Promyslete si podrobně, jak se v obou způsobech zadání grafu zpracují základní operace nad grafem, kterými rozumíme: ˇ odebrání hrany ˇ přidání hrany ˇ přidání vrcholu ˇ odebrání vrcholu ˇ dělení hrany nově přidaným vrcholem Jako jednoduchou aplikaci maticového počtu si uvedeme následující tvrzení: 9.8 9.9. Věta. Nechť G = (V, E) je graf s uspořádanými vrcholy V = (v1, . . . , vn) a maticí sousednosti AG. Označme Ak G = (a (k) ij ) prvky k-té mocniny matice AG = (aij). Pak a (k) ij je počet sledů délky k mezi vrcholy vi a vj. Důkaz. Tvrzení je pouze jiným vyjádřením definice matice sousednosti pro případ k = 1 a celý důkaz povedeme indukcí přes délku k. Předpokládejme tedy, že věta platí pro nějaké k a zkoumejme, kolik je sledů délky k + 1 mezi vrcholy vi a vj pro nějaké pevné indexy i a j. Jistě každý takový sled obdržíme pomocí jedné hrany z vi do nějakého uzlu v a nějakého sledu délky k mezi v a vj. Různé volby přitom dávají vždy různé výsledky. Proto, označíme-li a (k) j počet různých sledů délky k z 1. GRAFY A ALGORITMY 269 v do vj, pak námi hledaný počet sledů délky k + 1 bude a (k+1) ij = n =1 ai a (k) j . To je ale právě formulka pro násobení matice AG s mocninou Ak G. Dokázali jsme, že naše čísla a (k+1) ij jsou prvky matice Ak+1 G . Důsledek. Jsou-li G = (V, E) a AG jako v předchozí větě, pak lze všechny vrcholy G spojit cestou právě, když má matice (A + In)n-1 samé nenulové členy (zde In označuje jednotkovou matici s n řádky a sloupci). Důkaz. Díky distributivitě násobení matic a skutečnosti, že jednotková matice In komutuje s každou jinou maticí stejného rozměru, dostaneme roznásobením (A + In)n-1 = An-1 + n - 1 1 An-2 + + n - 1 n - 2 A + In. Výsledná matice má za členy čísla (ve značení jako v minulé větě) a (n-1) ij + n - 1 1 a (n-2) ij + + n - 1 a (n-1- ) ij + + (n - 1)aij + ij, kde ii = 1 pro všechny i a ij = 0 pro i = j. Toto číslo evidentně zadává součet počtů sledů délek 0, . . . , n - 1 mezi vrcholy vi a vj vynásobených kladnými konstantami. Bude proto nenulové právě tehdy, jestliže mezi těmito vrcholy existuje nějaká cesta. 9.9 9.10. Poznámka. Ještě si všimněme vlivu permutace našeho uspořádání uzlů V na matici sousednosti grafu. Není obtížné si uvědomit, že permutace uzlů grafu G má za následek jednu a tutéž permutaci řádků a i sloupců matice AG. Každou takovou permutaci můžeme zadat právě jednou tzv. permutační maticí, tj. maticí z nul a jedniček, která má v každém řádku a každém sloupci právě jednu jedničku a jinak nuly. Je-li P taková parmutační matice, pak nová matice sousednosti izomorfního grafu G bude AG = P AG PT , kde PT značí transponovanou matici a tečkou označujeme násobení matic. Každou permutaci umíme napsat jako složení transpozic a proto příslušnou permutační matici dostaneme jako součin příslušných matic pro transpozice. V případě permutačních matic je matice transponovaná zároveň maticí inverzní. Tyto úvahy lze dále rozvíjet a přemýšlet o souvislostech matic sousednosti a matic lineárních zob- razení mezi vektorovými prostory. Nebudeme zde zacházet do podrobností. 9.10 9.11. Prohledávání v grafu. Mnoho užitečných algoritmů je založeno na postup- ném prohledávání všech všech vrcholů v grafu. Zpravidla máme zadaný počáteční vrchol nebo si jej na začátku procesu zvolíme. V průbehu procesu vyhledávání pak v každém okamžiku máme vrcholy ˇ již zpracované, tj. ty, které jsme již při běhu algoritmu procházeli a definitivně zpracovali; ˇ aktivní, tj. ty vrcholy, které jsou detekovány a připraveny pro zpracovávání; ˇ spící, tj. ty vrcholy, na které teprve dojde. 270 9. KOMBINATORICKÉ METODY Zároveň si udržujeme přehled o již zpracovaných hranách. V každém okamžiku musí být množiny vrcholů a/nebo hran v těchto skupinách disjunktním rozdělením množin V a E vrcholů a hran grafu G a některý z aktivních vrcholů je aktuálně zpracováván. Sledujme nejprve princip obecně na příkladě prohledávání vrcholů. V dalších odstavcích pak budeme postup používat pro algoritmy řešící konkrétní úlohy. Na počátku průběhu tedy máme jeden aktivní vrchol a všechny ostaní vrcholy jsou spící. V prvním kroku projdeme všechny hrany vycházející z aktivního vrcholu a jejich příslušným koncovým vrcholům, které jsou spící, změníme statut na aktivní. V dalších krocích vždy u zpracovávaného vrcholu probíráme ty z něho vycházející hrany, které dosud nebyly probrány a jejich koncové vrcholy přidáváme mezi aktivní. Tento postup aplikujeme stejně u orientovaných i neorientovaných grafů, jen se drobně mění význam adjektiv koncový a počáteční u vrcholů. V konkrétních úlohách se také můžeme omezovat na některé z hran, které vy- chází z aktuálního vrcholu. Na principu to ale nic podstatného nemění. Pro realizaci algortimů je nutné se rozhodnout, v jakém pořadí zpracováváme aktivní vrcholy a v jakém pořadí zpracováváme hrany z nich vycházející. V zásadě příchází v úvahu dvě možnosti zpracovávání vrcholů: (1) vrcholy vybíráme pro další zpracování ve stejném pořadí, jak se stávaly aktiv- ními (fronta) (2) dalším vrcholem vybraným pro zpracování je poslední zaktivněný vrchol (zá- sobník). V prvním případě hovoříme o prohledávání do šířky, ve druhém o prohledávání do hloubky. Na první pohled je zřejmá role volby vhodných datových struktur pro uchová- vání údajů o grafu. Hranový seznam umožňuje projít všechny hrany vycházející z právě zpracovávaného vrcholu v čase lineárně úměrném jejich počtu. Každou hranu přitom diskutujeme nejvýše dvakrát, protože má právě dva konce. Zjevně tedy platí: Věta. Celkový čas realizace vyhledávání do šířky i do hloubky v čase O((n+m)K), kde n je počet vrcholů v grafu, m je počet hran v grafu a K je čas potřebný na zpracování jedné hrany, resp. jednoho vrcholu. 1. GRAFY A ALGORITMY 271 Následující obrázky slouží pro ilustraci prohledávání do šířky a do hloubky:. 0011 0 0 1 1 0011 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0011 0 0 1 1 0011 0 0 1 1 0 0 1 1 0011 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0011 0011 0011 Je na nich zachyceno prvních osm kroků prohledávání do šířky Petersenova grafu na 10 vrcholech. Zakroužkovaný vrchol je ten právě zpracovávaný, modré velké puntíky jsou již zpracované uzly, čárkované červené hrany jsou již zpracované a červené drobné uzly jsou ty aktivní (poznají se také podle toho, že do nich již vede některá zpracovaná hrana). Hrany zpracováváme v pořadí orientace proti hodinovým ručkám, přičemž za ,,první bereme směr ,,kolmo dolů . Totéž je dalších obrázcích postupem ,,do hloubky . Všimněte si, že první krok je stejný jako v předchozím případě. 0011 0 0 1 1 0011 0011 0 0 1 1 0011 0 0 1 1 0 0 1 1 0011 0 0 1 1 0 0 1 1 0011 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 9.11 9.12. Souvislé komponenty grafu. Každý graf G = (V, E) se přirozeně rozpadá na disjunktní podgrafy Gi takové, že vrcholy v Gi a w Gj jsou spojeny nějakou cestou právě, když i = j. Tento postup si můžeme formalizovat takto: Nechť je G = (V, E) neorientovaný graf. Na množině vrcholů grafu G zavedeme relaci tak, že v w právě když existuje cesta z v do w. Promyslete si, že tato relace je dobře definovaná a že se jedná o ekvivalenci. Každá třída [v] této ekvivalence definuje indukovaný podgraf G[v] G a disjunktní sjednocení těchto podgrafů je ve skutečnosti původní graf G. Skutečně, podle definice naší ekvivalence, žádná hrana původního grafu nemůže 272 9. KOMBINATORICKÉ METODY propojovat uzly z různých komponent. Podgrafům G[v] říkáme souvislé komponenty grafu G. Je-li graf G orientovaný, pak postupujeme úplně stejně, pouze u definice relace výslovně požadujeme aby cesta existovala z uzlu v do uzlu w nebo naopak z uzlu w do uzlu v. Jako skutečně jednoduchý příklad prohledávání v grafu si můžeme uvést algo- ritmus na vyhledání všech souvislých komponent v grafu. Jedinou informací, kterou musíme zpracovávat je, kterou komponentu aktuálně procházíme. Samotné prohle- dávání, tak jak jsme jej prezentovali, projde právě všechny vrcholy jedné kom- ponenty. Kdykoliv při běhu algoritmu skončíme s prázdnou množinou aktivních vrcholů ke zpracování, máme nachystánu jednu celou komponentu na výstup. Stačí pak vzít jakýkoliv další dosud spící vrchol a pokračovat dále. Teprve až nebudou ani žádné spící vrcholy, ukončíme algoritmus. Definice. Řekneme, že graf G = (V, E) je ˇ souvislý, jestliže má právě jednu souvislou komponentu; ˇ vrcholově k­souvislý, jestliže má alespoň k + 1 vrcholů a bude souvislý po ode- brání libovolné podmnožiny k - 1 vrcholů; ˇ hranově k­souvislý, jestliže bude souvislý po odebrání libovolné podmnožiny k - 1 hran. Případ k = 1 v definici jen opakuje souvislost grafu G. Silnější souvislost grafu je žádoucí např. u síťových aplikací, kdy klient požaduje značnou redundanci po- skytovaných služeb v případě výpadku některých linek (tj. hran) nebo uzlů (tj. vrcholů). Obecně lze dokázat tvrzení tzv. Mengerovy věty, kterou teď nebudeme dokazo- vat: Tvrzení. Pro každé dva vrcholy v a w v grafu G = (V, E) je počet hranově různých cest z v do w roven minimálnímu počtu hran, které je třeba odstranit, aby se v a w ocitly v různých komponentách vzniklého grafu. Speciálním případem je 2­souvislý graf. To je takový souvislý graf o alespoň třech vrcholech, kdy vynecháním libovolného vrcholu nenarušíme jeho souvislost. Na tomto příkladu si odvodíme několik pěkných charakterizací: Věta. Pro graf G = (V, E) s alespoň třemi vrcholy jsou následující podmínky ekvi- valentní: ˇ G je 2­souvislý; ˇ každé dva vrcholy v a w v grafu G leží na společné kružnici; ˇ graf G je možné vytvořit z trojúhelníku K3 pomocí postupných dělení hran. Důkaz. Na jednu stranu je implikace zřejmá: Jestliže každé dva vrcholy sdílejí kružnici, pak jsou mezi nimi vždy alespoň dvě různé cesty a tedy odebrání vrcholu nemůžeme pokazit souvislost. Opačná implikace není o mnoho složitější. Budeme postupovat indukcí podle minimální délky cesty spojující vrcholy v a w. Pokud vrcholy sdílí hranu e, pak díky 2­souvislosti je i graf bez této hrany souvislý a je v něm proto cesta mezi v a w. Spolu s hranou e tato cesta vytváří kružnici. Předpokládejme, že umíme takovou sdílenou kružnici sestrojit pro všechny vrcholy spojitelné cestou délky nejvýše k a uvažujme vrcholy v a w a je spojující nejkratší cestu (v = v0, e1, . . . , vk = w) délky 1. GRAFY A ALGORITMY 273 k + 1. Pak v1 a w umíme spojit cestou o délce nejvýše k a proto leží na společné kružnici. Označme si P1 a P2 příslušné dvě různé cesty mezi v1 a w. Graf G \ {v1} je ale také souvislý, existuje tedy cesta P z v do w, která neprochází vrcholem v1 a tato nutně musí někdy poprvé narazit na jednu z cest P1 a P2. Předpokládejme, že se tak stane ve vrcholu z na cestě P1. Pak je cesta, která vznikne složení části cesty P z v do z, části cesty P1 ze z do w a opačnou cestou k P2 z w do v hledanou kružnicí (nakreslete si obrázek!). 9.12 9.13. Metrika na grafech. V posledním důkazu jsme používali délku cest pro měření ,,vzdálenosti vrcholů. Ukážeme, že takto skutečně lze matematicky vybu- dovat pojem vzdálenosti na grafu: Na každém (neorientovaném) grafu definujeme vzdálenost uzlů v a w jako číslo dG(v, w), které je rovno počtu hran v nejkratší možné cestě z v do w. Pokud cesta neexistuje, píšeme dG(v, w) = . Budeme v dalším uvažovat pouze souvislé graf G. Pak pro takto zadanou funkci dG : V × V N platí obvyklé tři vlastnosti vzdálenosti: ˇ dG(v, w) 0 a přitom dG(v, w) = 0 právě, když v = w; ˇ vzdálenost je symetrická, tj dG(v, w) = dG(w, v); ˇ platí trojúhelníková nerovnost, tj. pro každou trojici vrcholů v, w, z platí dG(v, z) dG(v, w) + dG(w, z). Říkáme, že dG je metrika na grafu G. Kromě těchto standardních tří vlastností splňuje metrika na grafu evidentně ještě ˇ dG(v, w) má vždy nezáporné celočíslené hodnoty; ˇ je-li dG(v, w) > 1, pak existuje nějaký vrchol z různý od v a w a takový, že dG(v, w) = dG(v, z) + dG(z, w). Lze dokázat, že pro každou funkci dG s výše uvedenými pěti vlastnostmi na V × V pro konečnou množinu V lze nadefinovat hrany E tak, aby G = (V, E) byl graf s metrikou dG. Zkuste si ukázat jako cvičení! 9.13 9.14. Dijkstrův algoritmus pro hledání nejkratších cest. Dá se tušit, že nejkratší cestu v grafu, která vychází z daného uzlu v a končí v jiném uzlu w budeme umět hledat pomocí prohledávání grafu do šířky. Při tomto typu prohledávání totiž postupně diskutujeme vrcholy, do kterých se umíme dostat z výchozího vrcholu po jediné hraně, poté projdeme všechny, které mají vzdálenost nejvýše 2 atd. Na této jednoduché úvaze je založen jeden z nejpoužívanějších grafových algoritmů ­ tzv. Dijkstrův algoritmus. Tento algoritmus hledá nejkratší cesty v realističtější podobě, kdy jednotlivé hrany e jsou ohodnoceny ,,vzdálenostmi , tj. kladnými reálnými čísly w(e). Kromě aplikace na hledání vzdáleností v silničních nebo jiných sítích to mohou být také výnosy, toky v sítích atd. Vstupem algoritmu je graf G = (V, E) s ohodnocením hran a počáteční vrchol v0. Výstupem je ohodnocení vrcholů čísly dw(v), která udávají nejmenší možný součet ohodnocení hran podél cest z vrcholu v0 do vrcholu v. Postup dobře funguje v orientovaných i neorientovaných grafech. Pro konečný chod algoritmu a jeho výsledek je skutečně podstatné, že všechna naše ohodnocení jsou kladná. Zkuste si rozmyslet třeba cestu P3 se záporně ohod- nocenou prostřední hranou. Při procházení sledu mezi krajními vrcholy bychom 274 9. KOMBINATORICKÉ METODY ,,vzdálenost zmenšovali každým prodloužením sledu o průchod prostřední hranou tam a zpět. Dijkstrův algoritmus vyžaduje jen drobnou modifikaci obecného prohledávání do šířky: ˇ U každého vrcholu v budeme po celý chod algoritmu udržovat číselnou hodnotu d(v), která bude horním odhadem skutečné vzdálenosti vrcholu v od vrcholu v0. ˇ Množina již zpracovaných vrcholů bude v každém okamžiku obsahovat ty vr- choly, u kterých již nejkratší cestu známe, tj. d(v) = dw(v). ˇ Do množiny aktivních (právě zpracovávaných) vrcholů W zařadíme vždy právě ty vrcholy y z množiny spících vrcholů Z, pro které je d(y) = min{d(z); z Z}. Předpokládáme, že graf G má alespoň dva vrcholy. Formálněji lze Dijkstrův algoritmus popsat takto: (1) Iniciační krok: Nastavíme hodnoty u všech v V , d(v) = 0 pro v = v0 pro v = v0, nastavíme Z = V , W = . (2) Test cyklu: Jestliže ohodnocení všech vrcholů y Z je rovno rovno , algorit- mus končí, v opačném případě pokračujeme dalším krokem. (Algoritmus tedy zejména končí, pokud je Z = .) (3) Aktualizace statutu vrcholů: ˇ Najdeme množinu N všech vrcholů v Z, pro které d(v) nabývá nejmenší možné hodnoty = min{d(y); y Z}; ˇ posledně zpracované aktivní vrcholy W přesuneme do množiny zpracova- ných a za nové aktivní vrcholy zvolíme W = N a odebereme je ze spících, tj. množina spících bude nadále Z \ N. (4) Tělo hlavního cyklu: Pro všechny hrany v množině EW Z všech hran vycházejí- cích z některého aktivního vrcholu v a končících ve spícím vrcholu y opakujeme: ˇ Vybereme dosud nezpracovanou hranu e EW Z; ˇ Pokud je d(v) + w(e) < d(y), nahradíme d(y) touto menší hodnotou. Pokračujeme testem v kroku 2. 9.14 9.15. Věta. Pro všechny vrcholy v v souvislé komponentě vrcholu v0 najde Dijskt- rův algoritmus vzdálenosti dw(v). Vrcholy ostatních souvislých komponent zůstanou ohodnoceny d(v) = . Algoritmus lze implementovat tak, že ukončí svoji práci v čase O(n log n + m), kde n je počet vrcholů a m je počet hran v grafu G. Důkaz. Napřed ukážeme správnost algoritmu, tj. budeme muset ověřit, že ˇ algortimus po končeném počtu kroků skončí; ˇ výstup v okamžiku ukončení bude mít požadované vlastnosti. Formulace testu cyklu zaručuje, že při každém jeho průchodu se zmenší počet spících vrcholů alespoň o jeden, protože N bude vždy neprázdná. Nutně tedy algoritmus po konečném počtu kroků skončí. Po průchodu iniciačním cyklem zjevně platí e9.1 (9.2) d(v) dw(v) 1. GRAFY A ALGORITMY 275 pro všechny vrcholy grafu. Předpokládejme tedy, že tato nerovnost platí při vstupu do hlavního cyklu algoritmu a ověříme, že platí i po výstupu z cyklu. Skutečně, pokud v kroku 4 měníme d(y), pak je to proto, že jsme našli vrchol v s vlastností dw(y) dw(v) + w({v, y}) d(v) + w({v, y}) = d(y), kde napravo již máme nově změněnou hodnotu. Rovnost (9.2) bude proto jistě platit i v okamžiku ukončení algoritmu a zbývá nám ověřit, že na konci algoritmu bude platit i nerovnost opačná. Za tímto účelem si promysleme, co se vlastně děje v krocích 3 a 4 v algoritmu. Označme si 0 = d0 < < dk všechny existující různé konečné vzdálenosti dv(v) vrcholů grafu G od počátečního vrcholu v0. Tím máme zároveň rozdělenu množinu vrcholů grafu G na disjunktní podmnožiny Vi vrcholů se vzdáleností právě di. Při prvním průchodu hlavním cyklem máme N = V0 = {v0}, číslo bude právě d1 a množinu spících vrcholů změníme na V \ V0. Předpokládejme, že by tomu takto bylo až do j­tého průchodu včetně, tj. při vstupu do cyklu by platilo N = Vj, = dj a j i=0Vi = V \ N. Uvažme nějaký vrchol y Vj+1, tj. dwy = dj+1 < a existuje cesta (v0, e1, v1, . . . , v , e +1, y) celkové délky dj+1. Pak ovšem jistě e9.2 (9.3) dw(v ) dj+1 - w({v , y}) < d +1 Podle našeho předpokladu tedy již dříve (v některém z předchozích průchodů hlav- ním cyklem) byl vrchol v aktivní a tedy již v tom průchodu bylo jeho ohodnocení rovno dw(v ) = d(v ) = di pro některé i j. Proto při stávajícím průchodem hlavním cyklem bude výsledkem nastavení d(y) = dwv + w({v , y}) = dj+1 a toto v dalších průchodech již nikdy nebude měněno. V nerovnosti (9.2) tedy ve skutečnosti nastává po ukončení chodu algoritmu rovnost. Naše analýza průchodu hlavním cyklem nám zároveň umožňuje odhadnout čas potřebný na chod algoritmu (tj. počet elementárních operací s grafem a dalšími objekty s ním spojenými). Je totiž vidět, že hlavním cyklem projdeme tolikrát, kolik v grafu existuje různých vzdáleností di. Každý vrchol při jeho zpracování v kroku 3 budeme uvažovat právě jednou a budeme muset přitom umět setřídit dosud spící vrcholy. To dává odhad O(n log n) na tuto část algoritmu, pokud budeme používat pro uchovávání grafu seznam hran a vrcholů obohacený o ohodnocení hran a spící vrcholy budeme uchovávat ve vhodné datové struktruře umožňující vyhledání množiny N aktivních vrcholů v čase O(log n + |N|). To lze dosáhnout datovou strukturou, které se říká halda. Každá hrana bude právě jednou zpracovávána v kroku 4 protože vrcholy jsou aktivní pouze při jednom průchodu cyklem. Všimněme si, že pro nerovnost (9.3), která byla podstatná pro analýzu algo- ritmu, je nutný předpoklad o nezáporných vahách všech hran. V praktickém použití bývají přidávána různá heuristická vylepšení. Např. není nutné dopočítávat celý algoritmus, pokud nás zajímá pouze nejkratší cesta mezi dvěma vrcholy. V okamžiku, kdy totiž je vrchol vyřazován z aktivních víme, že jeho vzdálenost je již spočtena správně. Také není nutné na začátku algoritmus iniciovat s nekonečnou hodnotou. Sa- mozřejmě by to při programování ani nešlo, můžeme však postupovat ještě daleko lépe než jen přiřadit dostatečně velikou konstantu. Například při počítání nejkratší cesty po silniční síti můžeme jako iniciaci volit předem známe vzdušné vzdálenosti 276 9. KOMBINATORICKÉ METODY bodů. Pak totiž známe předem odhady vzdáleností d0 w(v) vrcholů v a v0 takové, že pro všechny hrany e = {v, y} platí |d0 w(v) - |d0 w(y)| w(e) a tato nerovnost nám stačí pro důkaz správnosti algoritmu. 9.15 9.16. Eulerovy sledy a Hamiltonovy kružnice. Každý si asi pamatujeme na hříčky typu ,,nakreslete obrazek jedním tahem . V řeči grafů to zachytíme takto: Definice. Sled, který projde všechny hrany grafu právě jednou se nazývá uzavřený eulerovský sled a grafům, které takový sled připouští říkáme eulerovské. Eulerovský sled samozřejmě projde zároveň každý vrchol grafu alespoň jednou, může ale vrcholy procházet i vícekrát. Nakreslit graf jedním tahem, který začíná a končí v jednom vrcholu, tedy znamená najít eulerovský sled. Terminologie odkazuje na klasický příběh o sedmi mostech ve městě Královec (Königsberg, tj. Kaliningrad), které se měly projít na procházce každý právě jednou, a důkaz nemožnosti takové procházky pochází od Leonharta Eulera z roku 1736. Situace je znázorněna na obrázku. Nalevo neumělý náčrt řeky s ostrovy a mosty, napravo odpovídající (multi)graf. Vrcholy tohoto grafu odpovídají ,,souvislé pev- nině , hrany mostům. Pokud by nám vadily násobné hrany mezi vrcholy (což jsme zatím formálně nepřipouštěli), stačí do hran za každý most přidat ještě jeden vr- chol, tj. rozdělit hrany pomocí nových vrcholů. Kupodivu je obecné řešení takového problému dosti snadné, jak ukazuje následující věta. Samozřejmě také ukazuje, že se Euler zamýšleným způsobem procházet skutečně nemohl. Věta. Graf G je eulerovský tehdy a jen tehdy, když je souvislý a všechny vrcholy v G mají sudé stupně. Důkaz. Je-li graf eulerovský, nutně musíme při procházení všech hran každý vrchol stejněkrát opustit jako do něj vstupujeme. Proto nutně musí být stupeň kaž- dého vrcholu sudý. Kdo důkaz této implikace formalizovanější, může uvážit kružnici, která začne a skončí ve vrcholu v0 a projde všechny hrany. Každý vrchol bude je- denkrát nebo vícekrát na této cestě a jeho stupeň bude roven dvojnásobku počtu výskytů. Předpokládejme naopak, že graf G má všechny vrcholy jen sudých stupňů, a uvažme nejdelší možný sled (v0, e1, . . . , vk) v G bez opakujících se hran. Předpoklá- dejme na okamžik, že vk = v0. To znamená, že do v0 vchází nebo vychází v tomto sledu jen lichý počet hran a tedy jistě existuje nějaká hrana vyházející z v0, která v tomto sledu není. To by ale znamenalo, že jej umíme prodloužit, aniž bychom opa- kovali hranu, což je spor. Nutně proto musí být v našem sledu v0 = vk. Definujme nyní podgraf G = (V , E ) v grafu G tak, že do něj dáme právě všechny vrcholy a hrany v našem pevně zvoleném sledu. Pokud V = V , pak díky souvislosti grafu G nutně existuje hrana e = {v, w} taková, že v V a w / V . Pak ovšem můžeme 1. GRAFY A ALGORITMY 277 náš pevně zvolený sled začít a skončit ve vrcholu v a následně pokračovat hranou e, což je opět spor s jeho největší možnou délkou. Proto nutně V = V . Zbývá tedy už jen ukázat, že také E = E. Předpokládejme, že by hrana e = {v, w} / V . Opět stejně jako výše můžeme náš sled začít a skončit ve v a poté pokračovat hranou e, což by opět byl spor. Důsledek. Graf lze nakreslit jedním tahem právě, když má všechny stupně vrcholů sudé nebo když existují pravě dva vrcholy se stupněm lichým. Důkaz. Nechť G je graf s právě dvěma vrcholy lichého stupně. Uvažme graf G , který vznikne z G přidáním jednoho nového vrcholu w a dvou hran, které spojují w s dvěma vrcholy lichého stupně. Tento graf už bude eulerovský a eulerovský sled v G vede na požadovaný výsledek. Naopak, pokud jde graf G nakreslit jedním tahem, který končí v různých vr- cholech, bude nutně náš graf G eulerovský a proto má G požadované stupně vr- cholů. Obdobný požadavek na průchod grafem, ovšem tak, abychom prošli právě jed- nou každým vrcholem (tj. zároveň nejvýše jednou každou hranou), vede na obtížné problémy. Takový průchod grafem je realizován kružnicí, která obsahuje všechny vrcholy grafu G, hovoříme o hamiltonovských kružnicích v grafu G. Graf se na- zývá hamiltonovský, jestliže má hamiltonovskou kružnici. Lze ukázat, že neexistuje algoristmus, který by v polynomiálním čase rozhodnul, zda je graf hamiltonovský. Problém nalezení hamiltonovské kružnice je podstatou mnoha problémů v lo- gistice, tj. když řešíme optimální cesty při dodávkách zboží. 9.17. Příklady. 9.17.1. Dokažte, že vrcholový graf musí být vrcholově 2-souvislý. Udejte příklad grafu, který je vrcholově 2-souvislý a přesto v něm neexistuje hamiltonovská kruž- nice. Řešení. V hamiltonovském grafu vedou mezi libovolnými dvěma uzly dvě neprotí- nající se cesty (,,oblouky hamiltonovské kružnice). Odstraněním jednoho bodu, se tedy zjevně neporuší souvislost grafu (odstraněný bod může ležet pouze na jedné ze dvou cest). 9.17.2. Dokažte nebo vyvraťte: a) Každý graf s méně než devíti hranami je rovinný. b) Graf, který není rovinný, není ani hamiltonovský. c) Graf, který není rovinný, je hamiltonovský. d) Graf, který není rovinný, není eulerovský. e) Graf, který není rovinný, je eulerovský. f) Každý hamiltonovský graf je rovinný. g) Každý eulerovský graf je rovinný. Řešení. a) Ano. Triviální důsledek charakterizace rovinných grafů (K3,3 i K5 mají mini- málně 9 hran) b) Ne. (K3,3) c) Ne. (k libovolnému nerovinnému grafu přidáme jeden vrchol a ten spojíme jedinou hranou s libovolným vrcholem původního grafu) 278 9. KOMBINATORICKÉ METODY d) Ne. (Protipříklad K5) e) Ne. (K3,3) f) Ne. (K5) g) Ne. (K5) 9.16 9.18. Stromy. Často potřebujeme při řešení praktických problémů místo posilo- vání redundancí (jako u počítačových nebo rozvodných sítí) naopak minimalizovat počet hran grafu při zachování jeho souvislosti. To samozřejmě je vždy možné, dokud je v grafu alespoň jedna kružnice. Souvislý graf, ve kterém není žádná kružnice, se nazývá strom. Graf neobsahu- jící kružnice nazýváme les (nepožadujeme přitom souvislost grafu). Můžeme tedy formulovat matematickou větu: ,,Strom je souvislý les. Obecně v grafech nazýváme vrcholy stupně jedna listy (případně také koncové vrcholy). Následující lemma ukazuje, že každý strom lze vybudovat postupně z jediného vrcholu přidáváním listů: Lemma. Každý strom s alespoň dvěma vrcholy obsahuje alespoň dva listy. Pro libovolný graf G s listem v jsou následující tvrzení ekvivalentní: ˇ G je strom; ˇ G \ v je strom. Důkaz. Pro důkaz existence listů opět použijeme cestu nejdelší možné délky v grafu G. Nechť P = (v0, . . . , vk) je taková cesta. Pokud by v0 nebyl list, pak by z něj vedla hrana e s druhým koncovým vrcholem v, který nemůže být vrhcolem v P, protože to bychom získali kružnici. Pak by ale bylo možné prodloužit P o tuto hranu, což také nejde. Ze sporu tedy plyne, že v0 je list a totž platí o vk. Předpokládejme nyní, že v je list stromu G. Uvážíme-li libovolné dva jiné vr- choly w, z v G, nutně mezi nimi existuje cesta a žádný vrchol uvnitř této cesty nemůže mít stupeň jedna. Proto tato cesta zůstane i v G \ v a dokázali jsme, že po odbrání v zůstane graf spojitý. Samozřejmě v něm nemůže být kružnice, když ze stromu vzniknul odebráním vrcholu. Je-li naopak G \ v strom, nemůže přídání vrcholu stupně 1 vytvořit kružnici a také souvislost výsledného grafu je zřejmá. Ve skutečnosti lze stromy popsat mnoha ekvivalentními a prakticky užitečnými vlastnostmi. Některé z nich jsou v následující větě: 9.17 9.19. Věta. Pro každý graf G = (V, E) jsou následující podmínky ekvivalentní (1) G je strom; (2) pro každé dva vrcholy v, w grafu G existuje právě jedna cesta z v do w; (3) graf G je souvislý, ale vyjmutím libovolné hrany vznikne nesouvislý graf (4) graf G neobsahuje kružnici, každým přidáním hrany do grafu G však již kružnice vznikne (5) G je souvislý graf a mezi velikostí množin jeho vrcholů a hran platí vztah |V | = |E| + 1. Důkaz. Větu bylo ve skutečnosti obtížnější sformulovat než dokázat. 1. GRAFY A ALGORITMY 279 Dokážeme nejprve, že vlastnosti 2­5 platí pro stromy. Každý strom o alespoň dvou vrcholech má list v a jeho odebráním dostaneme opět strom. Stačí tedy do- kázat, že platí-li 2­5 pro nějaký strom, platí také po přidání nového listu. To je ale vesměs zřejmé. Pro důkazy opačných implikací opět nemusíme dělat mnoho. V případě vlast- ností 2 a 3 pracujeme se souvislým stromem a přímo jejich formulace vylučují existenci kružnice. V případě čtvrté vlastnosti naopak stačí ověřit souvislost G. Li- bovolné dva vrcholy v a w v G jsou ovšem buď spojeny hranou nebo přidáním této hrany vznikne kružnice, tj. i bez ní existuje mezi nimi cesta. Poslední implikaci zvládneme indukcí vzhledem k počtu vrcholů. Předpoklá- dejme, že grafy o n vrcholech a n - 1 hranách jsou stromy. Graf o n + 1 vrcholech a n hranách má celkový součet stupňů vrcholů 2n a tedy musí obsahovat alespoň jeden list. Pak ovšem vzniknul přidáním listu ke stromu. Stromy jsou velice speciální třída grafů a většinou je používáme v různých podo- bách s dodatečnými požadavky. Vrátíme se k nim později v souvislosti s praktickými aplikacemi. 9.18 9.20. Rovinné grafy. Velice často se setkáváme s grafy, které jsou nakresleny v rovině. To znamená, že každý vrchol grafu je ztotožněn s nějakým bodem v rovině a hrany mezi vrcholy v a w odpovídají spojitým křivkám c : [0, 1] R2 spojujícím vrcholy c(0) = v a c(1) = w. Pokud navíc platí, že se jednotlivé dvojice hran protínají nejvýše v koncových vrcholech, pak hovoříme o rovinném grafu G. Otázka, jestli daný graf připouští realizaci jako rovinný graf, vyvstává velice často v aplikacích. Jednoduchý příklad je následující: Tři dodavatelé vody, elektřiny a plynu mají každý své jedno přípojné místo v blízkosti tří rodinných domků. Chtějí je všichni napojit tak, aby se jejich sítě nekřížily (třeba se jim nechce kopat příliš hluboko. . . ). Je to možné zvládnout? Odpověď zní ,,není . V tomto případě se to zdá být jasné. Jde o bipartitní úplný graf K3,3, kde tři vrcholy představují přípojná místa, další tři pak domky. Hrany jsou linie sítí. Všechny hrany umíme zvládnout, jedna poslední ale už nejde, viz obrázek na kterém neumíme čárkovanou hranu nakreslit bez křížení: 0 0 1 1 0 0 1 1 0011 0011000 000000000 000000000 000000000 111 111111111 111111111 111111111 000 000000000 000000000 000000000 111 111111111 111111111 111111111 0 000 000 000 1 111 111 111 0 000 000 000 1 111 111 111 0 000 000 000 1 111 111 1110 0 1 1 Pro skutečný důkaz ovšem potřebujeme skutečné matematické nástroje. V tomto případě alespoň naznačíme: 280 9. KOMBINATORICKÉ METODY Můžeme se opřít o docela pracně dokazatelný topologický výsledek, že každá spojitá uzavřená křivka v rovině, která sama sebe neprotíná (tj. ,,pokřivená kruž- nice ), rozděluje rovinu na dvě části. Jinými slovy, každá jiná spojitá křivka spo- jující jeden bod uvnitř takové křivky a jeden vně musí nutně naši křivku protínat. Protože jsou v grafu K3,3 jednotlivé vrcholy v každé z trojic vrcholů nespojených hranami stejné, až na volbu pořadí, můžeme naši modrou silnou kružnici považovat za obecný případ kružnice čtyřmi body a diskutovat umístění zbylých dvou vrcholů. Aby byl graf rovinný, musely by být oba buď uvnitř naší kružnice nebo vně. Obě možnosti jsou opět rovnocenné, nechť jsou tedy uvnitř. Nyní diskutujme jejich po- lohu vůči vhodné kružnici se dvěma modrými silnými a dvěma černými hranami (tj. přes tři modré a jeden černý vrchol) a vůči ní diskutujme pozici zbývajícího černého vrcholu. Dojdeme k nemožnosti umístit poslední hranu bez křížení. Zcela obdobně lze ukázat, že úplný graf K5 také není rovinný. Obecně se dá dokázat tzv. Kuratowského věta: Věta. Graf G je rovinný právě tehdy když žádný jeho podgraf není izomorfní dělení grafu K3,3 nebo grafu K5. Jedna implikace této věty je zřejmá ­ dělením rovinného grafu vzniká vžy opět rovinný graf a jestliže podgraf nelze v rovině nakreslit bez křížení, totéž musí platit i pro celý graf G. Opačný směr důkazu je naopak velice složitý a nebudeme se jím zde zabývat. Problematice rovinných grafů je věnováno ve výzkumu a aplikacích hodně po- zornosti, my se zde omezíme pouze na vybrané ilustrace. Zmiňme alespoň naokraj, že existují algoritmy, které testují rovinatost grafu na n vrcholech v čase O(n), což určitě nejde přímou aplikací Kuratowského věty. 9.19 9.21. Stěny v rovinných grafech. Uvažme (konečný) rovinný graf G, včetně jeho realizace v R2 a nechť S je množina všech bodů x R2 , které nepatří žádné hraně, ani nejsou vrcholem. Množina R2 \ G se rozpadne na disjunktní souvislé podmnožiny Si, kterým říkáme stěny rovinného grafu G. Jedna stěna je výjimečná ­ ta jejíž doplněk obsahuje všechny vrcholy grafu. Budeme jí říkat neohraničená stěna S0. Množinu všech stěn budeme označovat S = {S0, S1, . . . , Sk} a rovinný graf G = (V, E, S). Jako příklad si můžme rozebrat stromy. Každý strom je zjevně rovinný graf, jak je vidět například z možnosti realizovat jej postupným přidáváním listů k jedinému vrcholu. Samozřejmě také můžeme použít Kuratowského větu ­ když není v G žádná kružnice, nemůže obsahovat jakékoliv dělení grafů K3,3 nebo K5. Protože strom G neobsahuje žádnou kružnici, dostáváme pouze jedinou stěnu S0 a to tu neohraničenou. Protože víme, jaký je poměr mezi počty vrcholů a hran pro všechny stromy, dostáváme vztah |V | - |E| + |S| = 2. Vztah mezi počty hran, stěn a vrcholů lze odvodit pro všechny rovinné grafy. Jde o tzv Eulerův vztah. Všimněme si, že z něho zejména vyplývá, že počet stěn v rovinném grafu nezávisí na způsobu, jak jeho rovinnou realizaci vybereme: Věta. Nechť G = (V, E, S) je souvislý rovinný graf. Pak platí |V | - |E| + |S| = 2. Důkaz. Pokud G neobsahuje kružnici, tj. jde o strom, tvrzení jsme již dokázali v 9.19(5), protože každý strom má zjevně pouze jedinou stěnu S0. 1. GRAFY A ALGORITMY 281 Předpokládejme dále, že hrana e v grafu G je obsažena v kružnici. Pak je i graf G \ e souvislý. Můžeme tedy postupovat indukcí přes počet hran. Graf s jedinou hranou vztah splňuje a jestliže jej splňuje i G , pak to znamená |V | - |E| + 1 + |S| - 1 = 2 protože s odebráním jedné hrany dojde nutně i k propojení právě dvou stěn grafu G do jedné v G . 9.20 9.22. Konvexní mnohostěny v prostoru. Rovinné grafy si můžeme dobře před- stavit jako namalované na povrchu koule místo v rovině. Sféra vznikne z roviny tak, že přidáme jeden bod ,,v nekonečnu . Opět můžeme stejným způsobem hvořit o stěnách a pro takovýto graf pak jsou všechny jeho stěny rovnocenné (i stěna S0 je ohraničená). Naopak, každý konvexní mnohostěn P R3 si můžeme představit jako graf nakreslený na povrchu koule (můžeme si představit, že hrany a vrcholy daného mnohostěnu promítneme na dostatečně velkou sféru z libovolného bodu uvnitř P). Vypuštěním jednoho bodu uvnitř jedné ze stěn (ta stane neohraničenou stěnou S0) pak obdržíme rovinný graf jako výše tak, že ,,proděravěnou sféru natáhneme do roviny . Rovinné grafy, které vzniknou z konvesních mnohočlenů zjevně 2­souvislé, pro- tože každé dva vrcholy v konvexním mnohoúhelníku leží na společné kružnici. Navíc v nich platí, že každá stěna kromě S0 je vnitřkem nějaké kružnice a S0 je vnějškem nějaké kružnice (při kreslení na sféře jsou všechny stěny vnitřek nějaké kružnice). Názorné se zdá i to, že ve skutečnosti budou grafy vznikající z konvexních mnoho- úhelníků 3­souvislé. Ve skutečnosti platí dosti náročná Steinitzova věta: Věta. Libovolný vrcholově 3­souvislý rovinný graf G vzniká z konvexního mno- hostěnu v R3 . 9.21 9.23. Platónská tělesa. Jako ilustraci kombinatorické práce s grafy odvodíme klasifikaci tzv. pravidelných mnohostěnů, tj. mnohostěnů poskládaných ze stejných pravidelných mnohoúhelníků tak, že se jich v každém vrcholu dotýká stejný počet. Již v dobách antického myslitele Platóna se vědělo, že jich je pouze pět: Přeložíme si požadavek pravidelnosti do vlastností příslušného grafu: chceme aby každý vrchol měl stejný stupeň d 3 a zároveň aby na hranici každá stěny byl stejný počet k 3 vrcholů. Označme n počet vrcholů, e počet hran a s počet stěn. Máme k dispozici jednak vztah provazující stupně vrcholů s počtem hran: dn = 2e 282 9. KOMBINATORICKÉ METODY a podobně počítáme počet hran, které ohraničují jednotlivé stěny, a bereme v úvahu, že každé je hranicí dvou stěn, tj. 2e = ks. Eulerův vztah pak říká 2 = n - e + s = 2e d - e + 2e k . Úpravou odtud dostáváme pro naše známé d a k vztah 1 d + 1 k = 1 2 + 1 e . Protože nejen d a k, ale také e a n musí být přirozená čísla (tj. zejména je 1 e > 0), dostáváme z této rovnosti velice silné omezení možností. Dosadíme-li minimální možnou hodnotu d = 3, obdržíme drobnou úpravou nerovnost - 1 6 + 1 k = 1 e > 0. Odtud vyplývá k, d {3, 4, 5} a dopočítáním ostatních hodnot pro jednotlivé mož- nosti těcho hodnot dostáváme následující výčet všech možností řešení: d k n e s 3 3 4 6 4 3 4 8 12 6 4 3 6 12 8 3 5 20 30 12 5 3 12 30 20 Ve skutečnosti ale také všechny odpovídající pravidelné mnohostěny existují - již jsme je viděli na obrázcích výše. U prvních třech jistě nejsou pochybnosti, nazna- číme pro ilustraci konstrukci dvanáctistěnu (malujte si přitom obrázek). Začneme s krychlí a na všech jejích stěnách budeme zaráz a stejným způsobem stavět ,,stany áčka . Horní vodorovné tyčky přitom nachystáme na úrovni ploch stěn krychle tak, aby byly pro sousední stěny vždy na sebe kolmé a jejich délku zvolíme tak, aby lichoběžníky bočních stěn stanu měly tři stejně dlouhé strany. Nyní budeme zdvi- hat zaráz stejně všechny stany při zachovávání poměrů tří stran lichoběžníku. Jistě nastane právě jednou okamžik, ve kerém budou sousední lichoběžníkové a trojůhel- níkové stěny koplanární (tj. v jedné rovině). Tak vznikne pravidelný dvanáctistěn. Zkuste si sestrojit dvacetistěn jako cvičení. 2. Aplikace kombinatorických postupů I v této části budeme nejprve pokračovat v úvahách založených na grafových postupech. 9.22 9.24. Kořenové stromy, binární stromy a haldy. Stromy využíváme pro or- ganizaci dat tak, abychom v datech uměli buď rychle vyhledávat nebo v nich udr- žovat pořádek, nejčastěji obojí. Protože ve stromu není žádná kružnice, volba jednoho vrcholu vr zadává orien- taci všech hran. Skutečně, do každého vrcholu vede z vr právě jedna cesta a orientaci hran bereme podél ní. Přitom není možné, že by pro různé cílové vrcholy probíhaly příslušné cesty jednu hranu v různých směrech ­ to by opět vedlo na kružnici. 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 283 Situace se tedy po výběru jednoho vrcholu začíná více podobat skutečnému stromu v přírodě ­ jeden jeho vrchol je výjimečný tím, že roste ze země. Stromy s jedním vybraným ,,počátečním vrcholem nazýváme kořenové stromy, význačný vrchol vr je kořen stromu. V kořenovém stromu je dobře definován pojem následník a předchůdce vrcholu takto: vrchol w je následník v a naopak v je předchůdce w právě tehdy, když existuje cesta z kořene stromu do w která prochází v a v = w. Přímý následník a přímý předchůdce vrcholu jsou pak následníci a předchůdci přímo spojení hranou. Často o nich mluvíme také jako o synech a otcích (patrně v narážce na genealogické stromy). K vyhledávání se nejčastěji používají tzv. binární stromy, které jsou speciálním případem kořenového stromu, kdy každý otec má nejvýše dva následníky (někdy se ale pod stejným označením binární strom předpokládá, že všechny vrcholy kromě listů mají právě dva následníky). Pokud máme s vrcholy spojeny klíče v nějaké úplně uspořádané množině (např. reálná čísla), hledání vrcholu s daným klíčem je realizováno jako hledání cesty od kořene stromu a v každém vrcholu se podle veli- kosti rozhodujeme, do kterého ze synů budeme pokračovat (resp. zastavíme hledání, pokud jsme již ve hledaném vrcholu). Abychom mohli tuto cestu jednoznačně krok po kroku určovat, požadujeme aby jeden syn společně se všemi jeho následníky měli menší klíče než druhý syn a všichni jeho následníci. Pro efektivní vyhledávání se snažíme o tzv. vyvážené binární stromy, ve kterých se délky cest z kořene do listů liší maximálně o jedničku. Nejdále od vyváženého stromu na n vrcholech je tedy cesta Pn (která formálně může být považována za binární strom), zatímco dokonale vyvážený strom, kde kromě listů má každý otec právě dva syny je možné sestrojit pouze pro hodnoty n = 2k - 1, k = 1, 2, . . . . Ve vyvážených stromech dohledání vrcholu podle klíče bude vždy vyžadovat pouze O(log2 n) kroků. Hovoříme v této souvislosti také často o binárních vyhledávacích stromech. Jako cvičení si rozvažte, jak lze účinně vykonávat základní operace s grafy (přidávání a odebírání vrcholů se zadanými klíči, včetně vyvážení) nad binárními vyhledávacími stromy. Mimořádně užitečným příkladem využití struktury binárních stromů je datová struktura halda. Jde opět o vyvážené binární stromy s vrcholy opatřenými klíči a požadujeme aby podél všech cest od kořene k listům ve stromu klíče klesaly (tzv. maximální halda) nebo naopak stoupaly (tzv. minimální halda). Díky tomuto uspo- řádání umíme v konstatním čase odebírat z haldy podmnožiny buď maximálních nebo minimálních prvků a skutečné náklady na takovou operaci spočívají v obno- vení struktury haldy po odebrání kořene. Jako cvičení si ukažte, že je to možné zvládnout v logaritmickém čase. 4 6 11 9 8 7 3 1 5 Na obrázku nalevo je binární vyhledávací strom (který ale není vyvážený), napravo je příklad maximální haldy. 9.23 284 9. KOMBINATORICKÉ METODY 9.25. Izomorfismy stromů. Stromům, jejich různým variantám a použití je vě- nována obsáhlá literatura. My se zde už pouze na chvíli zamyslíme nad obecným problémem hledání izomorfismu grafů pro speciální třídu stromů. Budeme postu- povat tak, že napřed zesílíme strukturu, kterou mají naše izomorfismy zachovávat a nakonec ukážeme, že postup je použitelný i pro úplně obecné stromy. Pro přehled nad strukturou kořenových stromů je kromě vztahů otec­syn ještě užitečné mít syny uspořádány v pořadí (třeba v představě odleva doprava nebo podle postupného růstu atd.). Hovoříme o pěstěných stromech T = (V, E, vr, ), kde je částečné uspořádání na hranách takové, že srovnatelné jsou vždy právě hrany směřující od jednoho otce k synům. Morfismem kořenových stromů T = (V, E, vr) a T = (V , E , vr) rozumíme takový morfismus grafů : T T , který převádí vr na vr. Obdobně pro izo- morfismy. Pro pěstěné stromy navíc požadujeme aby zobrazení hran zachovávalo částečná uspořádání a . Pro pěstěné stromy T = (V, E, vr, ) zavedeme jejich (jak uvidíme) jednoznačný popis pomocí slov z nul a jedniček. Obrazně si můžeme představit, že strom kreslíme a každý přírůstek naznačíme dvěma tahy, které si označíme 0 (dolů) a 1 (nahoru). Začneme od listů, kterým takto všem přiřadíme slovo 01. Celý strom pak budeme popisovat zřetězováním částí slov tak, že má-li otec v syny uspořádány jako po- sloupnost v1, . . . , v , a jsou-li již jednotliví synové označeni slovy W1, . . . W , pak pro otce použijeme slovo 0W1 . . . W 1. Strom na levém obrázku výše tedy zapíšeme postupně takto (přidáváme postupně vrcholy podle vzdálenosti od kořene, syny máme uspořádány zleva doprava) 01, 01, 01 01, 001011, 0011 0010010111, 000111 000100101110001111. Hovoříme o kódu pěstěného stromu. Ověřte si, že skutečně kreslením cest dolů a nahoru (třeba si můžeme představit že dolů malujeme levý obrubník cesty a nahoru pravý) získáme skutečně původní strom s jednou hranou směřující shora do kořene navíc. Věta. Dva pěstěné stromy jsou izomorfní právě, když mají stejný kód Důkaz. Z konstrukce je zřejmé, že izomorfní stromy budou mít stejný kód, zbývá tedy pouze dokázat, že různé kódy vedou na neizomorfní stromy. Dokážeme to indukcí podle délky kódu (tj. počtu nul a jedniček). Ten je roven dvojnásobku počtu hran zvýšenému o jedničku, tj. dvojnásobku počtu vrcholů, jde tedy vlastně o indukci vzhledem k počtu vrcholů stromu T. Nejkratší možný kód odpovídá nejmenšímu stromu s jedním vrcholem. Předpokládejme, že věta platí pro stromy o nejvýše n vrcholech, tj. pro kódy o délce nejvýše k = 2n, a uvažme kód tvaru 0W1, kde W je slovo o délce 2n. Jistě je ve W jednoznačně určena nejmenší levá část W1, která obsahuje stejně nul a jedniček (při kreslení stromu to zna- mená první okamžik, kdy se vrátíme do kořenového vrcholu stromu odpovídajícího 0W1). Stejně najdeme W2 jako další úsek obsahující stejně nul a jedniček atd., až celé slovo W vyjádříme jako W = W1W2 . . . W . Podle indukčního předpokladu od- povídají všem kódům Wi jednoznačně pěstěné stromy, až na izomorfismy, a pořadí jejich kořenů jakožto synů kořenu našeho stromu T je dáno jednoznačně pořadím v kódu. Nutně proto je i pěstěný strom T jednoznačně určený kódem 0W1, až na izomorfismus. 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 285 Nyní můžeme docela snadno využít klasifikaci pěstěných stromů pomocí kódů k popisu všech stromů. U kořenových stromů potřebujeme určit pořadí jejich synů jednoznačně až na izomorfismus. Na pořadí synů ovšem nezáleží právě tehdy, když jsou podgrafy určené jejich následníky izomorfní. Můžeme proto využít obdobu (v jistém smyslu rekurzivní) konstrukce kódu pro pěstěné stromy a postupovat obdobně s využitím lexikografického uspořádní synů podle jejich kódů. Tzn. že kód W1 > W2 jestliže buď ve W1 narazíme při čtení z leva dříve na jedničku než ve W2 nebo je W2 počátečním úsekem slova W1. Kořenový strom budeme tedy popisovat zřetězováním částí slov tak, že má-li otec v syny již označeny kódy W1, . . . W , pak pro otce použijeme slovo 0W1 . . . W 1 kde pořadí W1, . . . , W je zvoleno tak aby W1 W2 W . Pokud není určen kořen ve stromě, můžeme se jej pokusit určit tak, aby byl ,,přibližně uprostřed stromu . To lze realizovat tak, že všechny jednotlivé vrcholy stromu označíme hodnotou tzv. výstřednosti. Definujeme výstřednost exT(v) vr- cholu v v grafu T jako největší možnou vzdálenost z v do nějakého vrcholu w v T, kterou lze dosáhnout. Tento pojem má smysl pro všechny grafy, u stromu ale díky nepřítomnosti kružnic platí, že maximální hodnoty excentricity vždy dosahuje buď právě jeden vrchol nebo právě dva vrcholy. Skutečně, nejdelší možná cesta z kteréhokoliv vrcholu stromu nutně končí v některém z jeho listů. Pro strom na dvou vrcholech tvrzení platí a u stromu na n 3 vrcholech odebráním listů dostaneme strom menší, u nějž se excentrity všech vrcholů, které zůstaly, zmenší právě o jed- ničku. Tvrzení tedy plyne indukcí podle počtu vrcholů stromu. Navíc je zřejmé, že dva vrcholy s maximální excentricitou musí být spojeny hranou. Nyní tedy můžeme přiřadit jednoznačný kód, až na izomorfismus i každému stromu. Pokud existuje jediný vrchol s maximální excentricitou, použijeme jej jako kořene, v opačném případě postupujeme stejně pro dva stromy vzniklé z T odebrá- ním hrany spojující vrcholy s maximální excentricitou a kód vznikne zřetězením kódů obou stromů v pořadí podle lexikografického uspořádání. Důsledek. Dva stromy T a T jsou izomorfní právě, když mají společný kód. 9.24 9.26. Kostra grafu. V praktických aplikacích často zadává graf všechny možnosti propojení mezi objekty, příkladem může být třeba silniční nebo vodovodní nebo elektrická síť. Pokud nám stačí zajistit propojitelnost každých dvou vrcholů při minimálním počtu hran, hledáme vlastně v grafu G podgraf T na všech vrcholech grafu G, který je stromem. Definice. Libovolný strom T = (V, E ) v grafu G = (V, E), E E se nazývá kostra grafu G. Evidentně může kostra v grafu existovat pouze, pokud je graf G souvislý. Místo formálního důkazu, že platí i opak uvedeme přímo algoritmus, jak kostru grafu sestrojit. Algoritmus 1. Postupovat můžeme například takto: Seřadíme zcela libovolně všechny hrany e1, . . . , em v E do pořadí a postupně budujeme množiny hran Ei tak, že v (i + 1)­vém kroku přidáme hranu ei k Ei jestliže tím nevznikne v grafu Gi = (V, Ei {ei}) kružnice, a ponecháme Ei beze změny v případě opačném. Al- goritmus skončí pokud buď má již graf Gi pro nějaké i právě n - 1 hran nebo je již 286 9. KOMBINATORICKÉ METODY i = m. Pokud zastavujeme z druhého důvodu, byl původní graf nesouvislý a kostra neexistuje. Lemma. Výsledkem předchozího algoritmu je vždy les T. Jestliže algoritmus skončí s k n - 1 hranami, má původní graf n - k komponent. Zejména je tedy T kostrou právě, když algoritmus skončí pro dosažení n - 1 hran. Důkaz. Podle pravidla v algoritmu, výsledný podgraf T v G nikdy neobsahuje kružnice. Je tedy lesem. Jestliže je výsledný počet hran n-1, jde o strom, viz Věta 9.19. Zbývá pouze ukázat, že souvislé komponenty grafu T mají stejné množiny vr- cholů jako souvislé komponenty původního grafu G. Každá cesta v T je i cestou v G, musí tedy všechny vrcholy ze jednoho stromu v T ležet všechny v jedné komponentě G. Pokud by ale existovala v G cesta z v do w takové, že její koncové vrcholy leží v různých stromech v T, pak na ní existuje poslední vrchol vi v komponentě určené v a vi+1 v ní neleží. Příslušná hrana {vi, vi+1} musela někdy při chodu algoritmu ale vytvářet kružnici, protože jinak by se bývala ocitla mezi hranami v T. Protože se během algoritmu hrany neodebírají, musí tedy zůstavat cesta mezi vi a vi+1 v T. To je ovšem spor s našimi předpoklady a proto v a w nemohou ležet v různých stromech v T. Počet komponent v T je dán pevným vztahem mezi počtem vrcholů a hran ve stromech. Poznámka. Jako vždy bychom se měli zabývat otázkou, jak složitý je uvedený algoritmus. Kružnice přidáním nové hrany vznikne tehdy a jen tehdy, jestli její koncové vrcholy leží ve stejné souvislé komponentě budovaného lesu T. Stačí nám proto průběžně udržovat znalost souvislých komponent. K realizaci algoritmu proto potřebujeme (v abstraktní podobě) umět pro již zadané třídy ekvivalence na dané množině (v našem případě jsou to vrcholy) slu- čovat dvě tříd ekvivalence do jedné a nalézat pro daný prvek, do které třídy patří. Pro sjednocení jistě potřebujeme O(k) času, kde k je počet prvků slučovaných tříd a jistě můžeme použít ohraničení počtu k celkovým počtem vrcholů n. Můžeme si ale pamatovat spolu se třídami i počty jejich prvků a průběžně pro každý vrchol uchovávat informaci do které třídy patří. Sjednocení dvou tříd tedy představuje přeznačení jména u všech prvků jedné z nich. Jestliže při přeznačování příslušnosti vrcholů k třídám budeme vždy přeznačovat tu menší z nich, pak celkový počet operací potřebných v našem algoritmu bude O(n log n + m). Dokažte si jako cvičení! Algoritmus 2. Kostru můžeme ale hledat také jinak a rychleji: Budeme v grafu G = (V, E) s n vrcholy a m hranami postupně budovat strom T. Začneme v libo- volně zvoleném vrcholu v a prázdnou množinou hran, tj. T0 = ({v}, ). V i­tém kroku hedáme mezi hranami, které dosud nejsou v Ti-1, mají v Ti-1 jeden koncový vrchol, ale druhý koncový vrchol fo Ti-1 nepatří. První takovou hranu přidáme i s druhým koncovým vrcholem a získáme tak Ti. Algoritmus skončí, až taková hrana neexistuje. Evidentně je výsledný graf T souvislý a podle počtu vrcholů a hran je to strom. Ukážeme, že vrcholy T splývají s vrcholy souvislé komponenty G. Předpokládejme proto, že do nějakého vrcholu w vede z v cesta. Pokud by w nebyl vrchol v T, pak zcela stejně jako v důkazu předchozího lematu na ní najdeme poslední vrchol vi, který ještě do T patří. Další hrana cesty by ale v okamžiku ukončení algoritimu připadal v úvahu pro přidání do T, což je spor. 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 287 Tento algoritmus tedy v čase O(n + m) nalezne kostru souvislé komponenty zvoleného počátečního vrcholu v. 9.27. Počet koster úplného grafu. K určení počtu koster úplného grafu o n uz- lech může sloužit pojem Prüferovy posloupnosti kostry grafu. Prüferovu posloup- nost můžeme přiřadit kostře grafu Kn a to následujícím způsobem: označme vr- choly v grafu Kn postupně od 1 do n a odstraňujme postupně listy dané kostry (od nejmenšího) a s každým odstraněným listem zapíšme do posloupnosti souseda právě odstraněného listu. Opakujeme tak dlouho, dokud v kostře nezbubou pouze dva vrcholy. Získaná posloupnost má evidentně n-2 členů, které mohou nabývat hodnot od 1 do n. Obráceně není těžké dokázat, že pro každou takovou posloupnost existuje právě jedna kostra grafu Kn, která se do této posloupnosti výše popsaným postupem zakóduje. Celkem dostáváme, že existuje právě nn-2 různých koster grafu Kn. 9.28. Příklady. 9.28.1. Kolik existuje různých koster grafu K5? Kolik různých jich existuje až na izomorfismus? Řešení. Existují tři navzájem neizomorfní kostry (se skóre (1, 2, 2, 2, 1), (1, 2, 3, 1, 1), (4, 1, 1, 1, 1)). Příslušné třídy isomorfních grafů mají postupně 5 4 2 2, 5 4 3 a 5 prvků, celkem 125 různých koster, což souhlasí s obecným vzorcem pro počet koster úplného grafu. 9.25 9.29. Minimální kostra. Protože je to obecnou vlastností stromů, každá kostra grafu G má stejný počet hran. Tak, jak jsme ale již dříve hledali nejkratší cesty v grafech s ohodnocenými hranami, budeme v případě koster jistě chtít umět najít kostry s minimálním součtem ohodnocení použitých hran. Definice. Nechť G = (V, E, w) je souvislý graf s ohodnocenými hranami s nezá- pornými vahami w(e) pro všechny hrany. Jeho minimální kostra T je taková kostra grafu G, která má mezi všemi jeho kostrami minimální součet ohodnocení všech hran. O praktičnosti takové úlohy můžete přemýšlet třeba v souvislosti s rozvodnými sítěmi elektřiny, plynu, vody apod. Kupodivu je docela jednoduché minimální kostru najít za předpokladu, že jsou všechna ohodnocení w(e) hran v grafu G nezáporná. Následujícímu postupu se říká Kruskalův algoritmus: ˇ Setřídíme všech m hran v E tak, aby w(e1) w(e2) w(em). ˇ v tomto pořadí aplikujeme na hrany postup z Algoritmu 1 pro kostru v před- chozím odstavci. Jde o typický příklad takzvaného ,,hladoveckého přístupu , kdy se k maximali- zaci zisku (nebo minimalizaci nákladů) snažíme dostat výběrem momentálně (snad) nejvýhodnějšího kroku. Často tento přístup zklame, protože nizké náklady na za- čátku procesu mohou zavinit vysoké na jeho konci. V našem případě ale skutečně dostaneme vždy minimální kostru: Věta. Kruskalův algoritmus správně řeší problém minimální kostry pro každý sou- vislý graf G s nezáporným ohodnocením hran. Algoritmus pracuje v čase O(m log m), kde m je počet hran v G. 288 9. KOMBINATORICKÉ METODY Důkaz. POZDEJI ??? 9.26 9.30. Další algoritmy pro minimální kostru. I druhý z našich algoritmů pro kostru grafu v předchozím odstavci vede na minimální kostru, když v každém oka- mžiku volíme ze všech možných hran ei = {vi, vi1+}, vi Vi, vi+1 V \vi tu, která má minimální ohodnocení. Výsledný postup se zpravidla nazývá Primův algoritmus podle jeho práce z r. 1957, ve skutečnosti byl ale popsán českým matematikem Jar- níkem již v roce 1930. Raději mu proto říkejme Jarníkův algoritmus. Jarník přitom reagoval na ještě dřívější algoritmus brněnského matematika O. Borůvky z r. 1928. Věta. Jarníkův algoritmus najde minimální kostru pro každý souvislý graf s libo- volným ohodnocením hran. Důkaz. POZDEJI ??? Poznámka. Borůvkův algoritmus je docela podobný, konstruuje ale postupně stále co nejvíce souvislých komponent zaráz. Začneme tedy s jednoprvkovými kompo- nentami v grafu T0 = (V, ) a pak postupně vždy každou komponentu propojíme nejkratší možnou hranou s komponentou jinou. Opět lze dokázat, že takto obdržíme minimální kostru. V pseudokódu by šel tento algoritmus zapsat následovně: (1) Inicializace. Udělej graf S složený z vrcholů grafu G; (2) Hlavní cyklus. Dokud má S více než jednu komponentu opakuj: pro každý strom T v S najdi nejmenší hranu spojující T s G \ T, tuto hranu přidej do E; všechny hrany z E přidej do S; 9.31. Příklady. 9.31.1. Uvažme následující postup pro určování minimální cesty mezi dvěma vr- choly v ohodnoceném neorientovaném grafu: nejprve nalezneme minimální kostru grafu, za minimální cestu pak prohlásíme jedinou cestu spojující dva dané vrcholy v minimální kostře. Dokažte, že je tento postup správný, nebo uveďte protipříklad. Řešení. Postup není správný. Stačí uvážit například kružnici s hranami ohodno- cenými až na jednu jedničkami, zbývající hrana ohodnocená dvojkou. 9.31.2. Máme dánu následující tabulku vzdáleností světových metropolí: Londýna, Mexico City, New Yorku, Paříže, Pekingu a Tokia: L MC NY P Pe T L 5558 3469 214 5074 5959 MC 2090 5725 7753 7035 NY 3636 6844 6757 P 5120 6053 Pe 1307 Jaká je nejmenší délka kabelu, kterým je možné propojit tato města? (předpoklá- dáme, že délka kabelu potřebného k propojení daných dvou měst je právě vzdálenost v tabulce). Řešení. Aplikací algoritmu na hledání minimální kostry zjistíme, že hledaná délka je 12154. (v kostře jsou hrany LPe, LP, LNY, PeT, MCNY). 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 289 9.31.3. Označme vrcholy v grafu K5 postupně čísly 1, 2,. . . 5 a každou hranu i, j, i = 1, . . . , 5 ohodnoťme číslem 1, pokud je (i + j) liché, číslem 2, pokud je (i + j) sudé. Kolik existuje různých maximálních koster v tomto grafu? Řešení. 18. 9.31.4. Označme vrcholy v grafu K5 postupně čísly 1, 2,. . . 5 a každou hranu {i, j}, i = 1, . . . , 5 ohodnoťme číslem 1, pokud je (i + j) liché, číslem 2, pokud je (i + j) sudé. Kolik existuje různých minimálních koster v tomto grafu? Řešení. 12. 9.31.5. Označme vrcholy v grafu K6 postupně čísly 1, 2,. . . 6 a každou hranu i, j, i = 1, . . . , 6 ohodnoťme číslem 1, pokud je (i + j) dává zbytek 1 po dělení třemi, číslem 2, pokud je (i + j) dává zbytek 2 po dělení třemi a konečně číslem 3, pokud je (i + j) dělitelné třemi. Kolik existuje různých minimálních koster v tomto grafu? Řešení. 16. 9.31.6. Označme vrcholy v grafu K6 postupně čísly 1, 2,. . . 5 a každou hranu i, j, i = 1, . . . , 6 ohodnoťme číslem 1, pokud je (i + j) dává zbytek 1 po dělení třemi, číslem 2, pokud je (i + j) dává zbytek 2 po dělení třemi a konečně číslem 3, pokud je (i + j) dělitelné třemi. Kolik existuje různých maximálních koster v tomto grafu? Řešení. 16. 9.27 9.32. Problém obchodního cestujícícho. Z naší krátké exkurze do grafových problémů a algoritmů by mohl vzniknout dojem, že je v zásadě možné nalézat hezké a jednoduché algoritmy řešící uvažované problémy. To bylo ale způsobeno tím, že jsme si dosud vybírali pouze problémy jednoduché. V drtivé většině případů je tomu naopak, teoretické výsledky pouze ukazují, že algoritmus fungující alespoň v polynomiálním čase neexistuje a používají se takové, které dávají výsledky rozumně dobré, nikoliv však optimální. Jedním z nejsledovanějších takových kombinatorických problémů je úloha, kdy máme najít v grafu s ohodnocenými hranami minimální hamiltonovskou kružnici, tzn. kružnici s minimálním součtem vah použitých hran mezi všemi možnými ha- miltonovskými kružnicemi. Praktické vyjádření ne vždy na první pohled prozradí, že jde právě o tento problém. Setkáváme se s ním např. při ˇ plánování dodávek zboží nebo služeb ˇ organizaci poštovní služby (rozvoz pošty, výběr pošty ze schránek) ˇ plánování údržby sítí (např. bankomatů) ˇ obsluha požadavků z fronty (např. při paralelních požadavcích na čtení z hard disku) ˇ plánování postupného měření jednotlivých částí celku (např. při studiu struk- tury krystalu proteinu pomocí rentgenu, kdy náklady jsou soustředěny zejména na posuvy a zaostření pro jednotlivá měření) ˇ plánování dělení materiálů (např. při kladení tapet jejich dělení na použité pásy tak, aby navazoval vzorek a došlo k co nejmenším ztrátám) 290 9. KOMBINATORICKÉ METODY I v případě hledání minimální hamiltonovské kružnice můžeme uplatnit hlado- vecký (anglicky ,,greedy ) přístup. Algoritmus začne v libovolném vrcholu v1, který se stane aktivním a všechny ostatní si označí za spící. Postupuje pak postupně v krocích tak, že vždy najde ten dosud neumístěný vrchol z spících, do kterého vede z aktivního vrcholu nejméně ohodnocená hrana, aktivní vrchol označí jako zpra- covaný, tento nový vrchol se stane aktivním. Algoritmus skončí buď neúspěchem, když nenajde žádnou hranu z aktivního uzlu do spícího uzlu, ale hamiltonovská kružnice ještě nebyla nalezena, nebo využitím všech vrcholů. Pokud ve druhém pří- pědě existuje hrana z posledního přidaného uzlu vn do v1, získáme hamiltonovskou kružnici. Je zjevné, že tento algoritmus jen velice zřídka vyprodukuje skutečně minimální hamiltonovskou kružnici. Na úplném grafu zato vždy alespoň nějakou najde. Je do- kázáno, že se dokonce polynomiálně rychlými algoritmy nelze libovolně přibližovat k optimálnímu řešení. 9.28 9.33. Toky v sítích. Další skupina aplikací jazyka teorie grafů se týká přesunu nějakého měřitelného materiálu v pevně zadané síti. Vrcholy v orientovaném grafu představují body, mezi kterými lze podél hran přenášet předem známá množství, která jsou zadána formou ohodnocení hran. Některé vybrané vrcholy představují zdroj sítě ), jiné výstup ze sítě. Podle analogie potrubní sítě pro přenos kapaliny říkáme výstupním vrcholům stok sítě ). Síť je tedy pro nás orientovaný graf s ohod- nocenými hranami a vybranými vrcholy, kterým říkáme zdroje a stoky. Je zřejmé, že se můžeme bez újmy na obecnosti omezit na orientované grafy s jedním zdrojem a jedním stokem. V obecném případě totiž vždy můžeme přidat jeden stok a jeden zdroj navíc a spojit je vhodně orientovanými hranami s všemi zadanými zdroji a stoky tak, že ohodnocení přidaných hran bude zároveň zadávat maximální kapacity jednotlivých zdrojů a stoků. Situace je naznačena na obrázku, kde černými vrcholy nalevo jsou zobrazeny všechny zadané zdroje, zatímco černé vrcholy napravo jsou všechny zadané stoky. Nalevo je jeden přidaný (virtuální) zdroj jako bílý vrchol a napravo jeden stok. Označení hran není v obrázku uvedeno. Definice. Síť je orientovaný graf G = (V, E) s vybraným jedním vrcholem z na- zvaným zdroj a jiným vybraným vrcholem s nazvaným stok, spolu s nezáporným ohodnocením hran w : E R. Tokem v síti S = (V, E, z, s, w) rozumíme ohodno- cení hran f : E R takové, že součet hodnot u vstupních hran u každého vrcholu v, kromě zdroje a stoku, je stejný jako součet u výstupních hran z téhož vrcholu, tj. eIN(v) f(e) = eOUT (v) f(e). Velikost toku f je dána celkovou balancí hodnot u zdroje . 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 291 Z definice je zřejmé, že velikost toku můžeme stejně dobře vypočíst jako hod- notu |f| = eIN(s) f(e) - eOUT (v) f(e). Na obrázku máme nakreslenu jednoduchou síť se zvýrazněným bílým zdrojem a černým stokem. Součtem maximálních kapacit hran vstupujících do stoku vidíme, že maximální možný tok v této síti je 5. 4 0011 0 0 1 1 0011 0011 0011 0011 00110011 0011 2 3 2 5 3 3 2 2 1 3 2 1 2 0 0 1 1 9.29 9.34. Problém maximálního toku v síti. Naší úlohou bude pro zadanou síť na grafu G určit maximální možný tok. Na konci minulého odstavce jsme pohledem na obrázek zjistili, že maximální tok v této síti nemůže přesáhnout císlo 5. Podstatné na naší úvaze bylo, že jsme sečetli hodnoty maximálních kapacit u množiny hran, pres které musí jít každá cesta ze z do s. Zároven umíme snadno najít tok, který toto maximum skutecne realizuje (protože je naše sít tak jednoduchá). Tuto rozvahu mužeme zformalizovat takto: Definice. Řezem v síti S = (V, E, z, s, w) rozumíme takovou množinu hran C E, že po jejím odebrání nebude v grafu G = (V, E \ C) žádná cesta z z do s. Číslo |C| = eC w(e) nazýváme velikost řezu C. Evidentně platí, že nikdy nemůžeme najít větší tok, než je hodnota kteréhokoliv z řezů. N a dalším obrázku máme zobrazen tok sítí s hodnotou 5 a čárkovanými lomenými čarami jsou naznačeny řezy o hodnotách 12, 8 a 5. 2/3 0011 0011 0011 0011 0 0 1 1 0011 00110011 0011 2/2 1/3 1/2 0/2 1/2 1/1 0/2 1/3 2/2 2/4 1/3 2/5 1/1 0011 Sestavíme funkční algoritmus, který pomocí postupných konstrukcí vhodných cest najde řez s minimální možnou hodnotou a zároveň najde tok, který tuto hod- notu realizuje. Tím dokážeme následující větu: Věta. Maximální velikost toku v dané síti S = (V, E, z, s, w) je rovna minimální velikosti řezu v této síti. Myšlenka algoritmu je vcelku prostá ­ prohledáváme cesty mezi uzly grafu a snažíme se je ,,nasytit co největším tokem. Zavedeme si za títo účelem terminologii. O neorientované cestě v síti S = (V, E, z, s, w) z vrcholu v do vrcholu w řekneme, že je nenasycená, jestliže pro všechny hrany této cesty orientované ve směru z v do 292 9. KOMBINATORICKÉ METODY w platí f(e) < w(e) a f(e) > 0 pro hrany orientované opačně. Za rezervu kapacity hrany e pak označujeme číslo w(e) - f(e) pro případ hrany orientované ve směru z v do w a číslo f(e) při orientaci opačné. Pro zvolenou cestu bereme za rezervu kapacity minimální rezervu kapacity z jejích hran. Fordův-Fullkersonův algoritmus. Vstupem je síť S = (V, E, z, s, w) a výstu- pem maximální možný tok f : E R. ˇ Iniciace: zadáme f(e) = 0 pro všechny hrany e E a prohledáváním do šířky z vrcholu z najdeme množinu vrcholů U V , do kterých existuje nenasycená cesta;. ˇ Hlavní cyklus: Dokud s U opakujeme ­ zvolíme nenasycenou cestu P ze zdroje z do s a zvětšíme tok f u všech hran této cesty o její minimální rezervu ­ obnovíme U. ˇ na výstup dáme maximální tok f a minimální řez C tvořený všemi hranami vycházejícími z U a končícími v doplňku V \ U. Důkaz správnosti algoritmu. Jak jsme viděli, velikost každého toku je nejvýše rovna hodnotě kteréhokoliv řezu. Stačí nám tedy ukázat, že v okamžiku zastavení algoritmu jsme vygenerovali řez i tok se stejnou hodnotou. Algoritmus se zastaví při prvním případu, kdy neexistuje nenasycená cesta ze zdroje z do stoku s. To znamená, že U neobsahuje s a pro všechny hrany e z U do zbytku je f(e) = w(e), jinak bychom museli koncový vrchol e přidat k U. Zároveň ze stejného důvodu všechny hrany e, které začínají v komplementu V \ U a končí v U musí mít tok f(e) = 0. Pro velikost toku celé sítě jistě platí |f| = hrany z U do V \ U f(e) - hrany z V \ U do U f(e). Tento výraz je ovšem v okamžiku zastavení roven hrany z U do V \ U f(e) = hrany z U do V \ U w(e) = |C|, což jsme chtěli dokázat. Zbývá ovšem ukázat, že algoritmus skutečně zastaví. Všimněme si, že pro celočíslené hodnoty ohodnocení hran získáme také celočí- selný tok. 0/3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0/2 0/2 0/2 1/1 0/2 0/3 0/2 2/4 0/3 1/5 0/1 2/3 2/2 0011 0/3 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0/2 0/2 2/2 1/1 0/2 2/3 2/2 2/4 0/3 3/5 0/1 2/3 2/2 0011 Chod algoritmu je ilustrován na obrázku. Vlevo jsou vybaveny dvě nejkratší ne- nasycené cesty ze zdroje do stoku (horní má dvě hrany, spodní tři). Jsou vyznačeny 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 293 červeně. Napravo je pak nasycena další cesta v pořadí a je vyznačena modře. Je nyní zjevné, že nemůže existovat další nenasycená cesta ze zdroje do stoku. Proto algoritmus v tomto okamžiku skončí. 9.30 9.35. Dodatečné podmínky na tok. Naše úloha připouští i další podmínky. Můžeme např. požadovat dodržení maximální kapacity průtoku přes jednotlivé vr- choly. Nebo můžeme chtít dodržet nejen maximální ale také minimální toky přes jednotlivé hrany či vrcholy. Přidání kapacit vrcholů je jednoduché ­ prostě vrcholy zdvojíme a dvojčata oznčující vstup do vrcholu a výstup z vrcholu spojíme právě jednou hranou s pří- slušnou kapacitou. Omezení minimálními průtoky lze zahrnout do iniciace našeho algoritmu. Je ovšem zapotřebí otestovat, jestli takový tok vůbec existuje. V literatuře lze najít řadu dalších nuancí, nebudeme se jim zde věnovat. 9.36. Příklady. 9.36.1. Řezem v síti (V, E, z, s, w) můžeme také rozumět množinu hran C S takovou, že v síti (V, E \C, z, s, w) neexistuje žádná cesta ze zdroje z do stoku (cíle, spotřebiče) s, ale pokud z C odebereme libovolnou hranu e, tak už nová množina tuto vlastnost mít nebude, tedy v (V, E\Ce, z, s, w) existuje cesta ze z do s. Určete všechny tyto řezy (a jejich hodnoty) v následující síti: 4 5 6 2 1 2 10 Z S 4 2 2 Řešení. Označíme-li hrany dle obrázku Z S a b c d e f gh i j pak jsou řezy následující: {f,i},{f,h,j,a},{f,j,c,a,d,e},{f,j,c,a,d,f}, {b,j,c},{b,j,h},{b,i}, jejich hodnoty jsou pak 12, 9, 20, 18, 15, 10, 15. 9.36.2. Najděte maximální tok v síti z předchozího příkladu. Řešení. Z teorie a předchozího příkladu víme, že hodnota maximálního řezu je 9. Tento tok f není zadán jednoznačně. Můžeme volit například f(a) = 2, f(b) = 4, f(c) = 1, f(h) = 1, f(j) = 4, f(f) = 2, f(i) = 7, f(v) = 0 pro všechny ostatní hrany v daného grafu. 294 9. KOMBINATORICKÉ METODY 9.36.3. Určete maximální tok a jemu odpovídající minimální řez v následujícím ohodnoceném orientovaném grafu: 01 01 01 0101 01 01 8 7 10 7 12 13 8 18 28 16 5 9 18 17 7 6 20 17 8 Z S A B C D E F 13 Řešení. Min. řez. dán množinou {F, S}, jeho hodnota je 39. 9.36.4. Určete maximální tok a jemu odpovídající minimální řez v následujícím ohodnoceném orientovaném grafu: 01 01 01 0101 01 01 13 19 23 8 7 11 9 7 10 15 14 7 17 23 11 9 20 15 10 2 Z S A B C D E F Řešení. Řez je dán množinou {F, S, D}, hodnota je 29. 9.36.5. Určete maximální tok a jemu odpovídající minimální řez v následujícím ohodnoceném orientovaném grafu: 01 01 01 0101 01 01 10 20 30 9 9 19 20 20 5 10 8 9 7 4 8 11 5 9 12 14 Z S A B C D E F Řešení. Min. řez odpovídá množině (B, D, S). Hodnota je 40. 9.36.6. Určete maximální tok a jemu odpovídající minimální řez v následujícím ohodnoceném orientovaném grafu: 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 295 01 01 01 0101 01 01 20 18 3 7 5 10 7 11 9 12 8 20 17 10 11 9 11 Z S A B C D E F 7 2 2 Řešení. Min. řez je dán množinou {Z, A, E}. Hodnota je 32. 9.31 9.37. Další aplikace. Hezkým využitím toků v sítí je řešení úlohy bipartitního párování. Úlohou je v bipartitním grafu najít maximální podmnožinu hran takovou, aby žádné dvě hrany nesdílely vrchol. Jde o abstraktní variantu docela obvyklé úlohy ­ třeba spárování kluků a holek k tanci v tanečních, kdybychom měli předem známé možnosti, ze kterých vybíráme. Tento problém docela snadno převedeme na hledání maximálního toku. Při- dáme si uměle navíc ke grafu zdroj, který propojíme hranami jdoucími do všech vrcholů v jedné skupině v bipartitním grafu, zatímco ze všech vrcholů ve druhé skupině vedeme hranu do přidanéhoho stoku. Všechny hrany opatříme maximální kapacitou 1 a hledáme maximální tok. Za páry pak bereme hrany s nenulovým tokem. Jiným využitím toků je důkaz tzv. Mengerovy věty (uvedli jsme ji jako tvzerní v 9.12). Můžeme se na ně dívat takto: V orientovaném grafu ohodnotíme všechny hrany e maximální kapacitou 1 a totéž pro všechny vrcholy. Dále si zvolíme li- bovolnou dvojici vrcholů v a w, které považujeme za zdroj a stok. Jestliže nás pak zajímá tok tímto grafem, dostaneme právě počet zcela různých cest z v do w (hrany i vrcholy jsou různé kromě začátku a konce). Každý řez přitom odděluje v a w do různých souvislých komponent zbylého grafu. Ze skutečnosti, že hodnota minimálního řezu je rovna hodnotě toku v síti nyní vyplývá požadované tvrzení. 9.32 9.38. Stromy her. Obrátíme teď naši pozornost k velice rozšířeným užitím stro- mových struktur při analýzách možných strategií nebo postupů. Zcela jistě se s nimi setkáme v teorii umělé inteligence a v části teorie her. Své místo ale mají také v ekonomii a mnoha dalších oblastech lidských činností. Budeme v této souvislosti hovořit o hrách. V matematickém smyslu se teorie her zabývá modely, ve kterých jeden nebo více partnerů činí kroky podle předem známých pravidel a většinou také ve předem známém pořadí. Většinou se možné kroky nebo úkony ohodnocují nějakými výnosy nebo ztrátami pro daného partnera. Smyslem je pak nalezení strategie hráče, tj. algoritmického postupu, podle kterého může hráč maximalizovat výnos, případně minimalizovat ztrátu. Budeme se zabývat tzv. extenzivním popisem her. To je takový popis, kdy máme k dispozici úplnou a konečnou analýzu všech možných stavů hry a výsledná analýza zadává skutečně přesnou rozvahu o výnosech či ztrátách za předpokladu nejlepšího možného chování zúčastněných partnerů. Strom hry je kořenový strom, který má za uzly všechny možné stavy hry, a tyto uzly budou označeny podle toho, který z hráčů je zrovna na tahu. Hrany budou všechny možné tahy daného hráče v 296 9. KOMBINATORICKÉ METODY daném stavu. Takový úplný popis pomocí stromu můžeme konstruovat pro běžné hry jako jsou piškvorky, šachy, apod. Jako jednoduchý příklad uveďme jednoduchou variantu hry Nim. (Názem za- vedl patrně Charles Bouton ve své analýze těchto her z roku 1901 ­ prý pochází z německého ,,Nimm! , což česky znamená ,,Ber! .) Na stole leží na jedné hromádce k sirek, kde k > 1 je přirozené číslo, a hráči postupně odebírají každý jednu nebo dvě sirky. V normální variantě hry vyhraje ten, kdo jako poslední má co vzít. Ve variantě hry ,,na žebráka naopak prohrává ten, kdo vzal všechny zbývající sirky. Strom takové hry, včetně všech potřebných informací můžeme setrojit následovně: ˇ Stavu s sirkami na stole a s prvním hráčem na tahu odpovídá podstrom s kořenem označeným F , stavu s týmž počtem sirek a druhým hráčem na tahu odpovídá podstrom s kořenem S . ˇ Uzel F má levého syna S -1 a pravého syn S -2, u uzlu S jsou to obdobně synové F -1 a F -2. ˇ Listy jsou vždy buď F0 nebo S0 (při normálním režimu hry, při hře na žebráka by to byly stavy F1 a S1, ve kterých příslušný hráč prohrál). Každý průběh hrou začínající v kořenu Fk odpovídá právě jednomu listu výsledného stromu. Je tedy vidět, že celkový počet p(k) možných her pro Fk je roven p(k) = p(k - 1) + p(k - 2) pro k 3 a snadno vidíme, že p(1) = 1 a p(2) = 2. Takovou diferenční rovnici jsme už řešili. Jejím řešením jsou tzv. Fibonacciova čísla a umíme pro ně explicitní formuli, viz. část o diferenčních rovnicích v první kapitole. Známe proto i formuli pro počet možných průběhů her. Počet možných stavů hry je přitom roven počtu všech uzlů ve stromu. Hra přitom vždy skončí výhrou buď prvního nebo druhého hráče. U podobných her může kromě toho hra končit také remízou. 9.33 9.39. Analýza hry. Připravená stromová struktura nám teď snadno umožní ana- lyzovat hru tak, abchom mohli sestavit skutečně algoritmickou strategii pro každého hráče. Je k tomu jednoduchý rekurzivní postup pro ohodnocení kořene podstromu. Budeme označovat jako W uzly ve kterých (při optimální strategii obou) vítězí první hráč a L v případě opačném, případně ještě můžeme značit jako T (z anglic- kého ,,win a ,,loose z pohledu prvého hráče, znak T odpovídá anglickému ,,tie ro remízu). Postup je tento: (1) Listy označíme buď W nebo L, případně T, podle pravidel hry (u normálního průběhu naší varianty Nim to tedy bude W pro S0 a L pro F0) (2) Uzel F označíme W, jestliže existuje syn, který je W. Pokud takový syn nee- xistuje, ale mezi syny existuje uzel s označením T, bude i označovaný uzel T. Ve zbývajícím případě, kdy jsou všichni synové L bude i označovaný uzel L. (3) Uzel S označíme L, jestliže existuje syn označený L. Pokud takový syn nee- xistuje, ale mezi syny existuje uzel s označením T, bude i označovaný uzel T. Ve zbývajícím případě, kdy jsou všichni synové W bude i označovaný uzel W. Voláním této procedury na kořen stromu obdžíme ohodnocení všech uzlů a tím také i strategii pro každého z hráčů: ˇ První hráč se snaží v každém svém kroku přesunout do uzlu označeném W, pokud to ale nejde, hledá alespoň T 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 297 ˇ Druhý hráč je se snaží v každém svém kroku dostat hru do uzlu označeného L, pokud to nejde, hledá alespoň T. Hloubka rekurze je dána hloubkou stromu. Např. u našeho Nim s k sirkami je to právě k. Získaná analýza ještě není příliš užitečná. Pro její užití v uvedené formě totiž potřebujeme mít k dispozici celý strom hry a to je obecně skutečně velice mnoho dat (u minipiškvorek na hřišti 3 × 3 má příslušný strom jednotlivé desítky tisíc uzlů). Zpravidla se v takovéto podobě používá analýza pomocí stromové struktury tehdy, když zkoumáme pouze malý úsek celého stromu pomocí vhodných heuristických metod a tento kousek si naopak dynamicky utváříme během hry. To je fascinující oblast moderní teorie umělé inteligence, my se jí zde ale nebudeme věnovat. Pro naše potřeby úplné formální analýzy ale umíme najít kompaktnější vyjád- ření stromové struktury grafu. Pokud si nakreslíme náš strom pro hru Nim, okamžitě vidíme, že se nám mnohokráte opakují pořád ty stejné situace hry v různých lis- tech, a to podle toho, jaká byla historie hry. Ve skutečnosti, jsou ale strategie určeny pouze počtem zbývajících sirek a tím, kdo je na tahu. Můžeme proto stejnou hru popsat pomocí grafu, který bude mít za uzly počty zývajících sirek a celá strategie bude zadána určením, jestli v dané situaci vyhrává ten, kdo je na tahu nebo naopak ten, kdo táhl předtím. K popisu možných tahů budeme používat orientované hrany. Příklad pro naši hru Nim je na obrázku. Nalevo je úplný strom pro hru se třemi sirkami, napravo je orientovaný graf zobrazující hru se sedmi sirkami. Úplný strom pro hru se sedmi sirkami by měl již 21 listů a počet listů roste exponenciálně s počtem sirek! 5N F0 L L F3 L S2 S1 F1 F0 W L L S0 W 0P 1N 3P 7N 6P 4N 2N Orientovaný acyklický graf má pro každý počet sirek právě jeden vrchol a ten zároveň nese označení, zda při jeho průchodu celkově vyhrá ten, kdo je zrovna na řadě (písmeno N od ,,next ), nebo ten druhý (písmeno P od slova ,,previous ). Celkově je v něm vždy jen k + 1 vrcholů pro hru s k sirkami. Zároveň v sobě graf uschovává kompletní strategii: pokud z uzlu, ve kterém se hráč nachází, vychází hrana končící v uzlu s označením P, hráč použije tento tah. Naopak, každý acyklický orientovaný graf můžeme považovat za popis hry. Výchozími situacemi jsou v ní ty uzly, do kterých nevedou žádné hrany (jeden nebo více), hra končí v listech (opět jeden nebo více). Strategii hry obdržíme opět jednoduchou rekurzivně volanou procedurou: ˇ Listy označíme písmenem P (skutečně prohrává ten, kdo je na tahu a nachází se v listu). 298 9. KOMBINATORICKÉ METODY ˇ Uzel grafu označíme jako N, pokud z něj vede hrana do uzlu označeného jako P. V opačném případě označíme uzel jako P. (Pro zjednodušení nyní uvádíme pouze případy her bez remíz.) V našem speciálním případě hry Nim je tedy situace obzvláště jednoduchá. Z uvedené strategie vyplývá, že hráč, který je na tahu prohrává, pokud je počet sirek dělitelný třemi, a vyhrává ve zbylých dvou případech zbytků 1 a 2 po dělení třemi. Hry, které umíme reprezentovat výše uvedeným způsobem pomocí acyklického orientovaného grafu nazýváme nestranné. Jde právě o takévé hry, ve kterých ˇ V každé herní situaci mají oba hráči stejné možnosti tahů. ˇ Hra má konečný celkový počet herních situací. ˇ Hra má tzv. nulový součet, tj. lze její výsledek formulovat pomocí výhry jednoho (a tím prohry druhého) hráče, resp. remízy. Příkladem nestranné hry jsou např. piškvorky na předem známém rozměru použité čtverečkové sítě. Zde sice hráči používají různé symboly, podstatné ale je, že je mohou umístit do kteréhokoliv dosud neobsazeného pole. Naopak šachy nestrannou hrou v tomto smyslu nejsou, protože možné tahy jednotlivých hráčů jsou v každé situaci silně závislé od množství figurek, které zrovna mají k dispozici. 9.34 9.40. Součet her. Klasická hra Nim se hrává poněkud složitěji. Hráči mají před sebou tři hromádky sirek (nebo jiných objektů), každou o daném počtu k. Ten kdo je na řadě může brát libovolný počet sirek, ale pouze z jedné hromádky. Vyhrává, při normální hře, ten, kdo bere naposled. (Při hře na žebráka takový hráč naopak prohrává.) Pokud bychom takto hráli s jednou hromádkou, je to jednoduché. První hráč shrábne vše a druhý prohrál. Se třemi to ovšem tak snadno nepůjde. Zároveň se nám patrně nechce věřit, že znalost analýzy možností pro jednu hromádku nebude pro takovouto kombinovanou hru užitečná. Zavedeme si tzv. součet nestranných her. Věcně to bude tak, že situace ve hře kombinované ze dvou současných her budou uspořádané dvojice jednotlivých možných situací. Tahem pak rozumíme využití možného tahu v jedné z her (a druhá zůstane nezměněna). Jsou-li G1 = (V1, E1) a G2 = (V2, E2) dva acyklické orientované grafy, pak jejich součtem rozumíme graf G = (V, E), kde V = V1 × V2 E = {(v1v2, w1v2); (v1, w1) E1} {(v1v2, v1w2); (v2, w2) E2}. V případě jedné hry jsme si vystačili s postupným označováním uzlů grafu od listů písmeny N a P podle toho, jestli je nebo není (pomocí orientovaných hran) ,,vidět nějaké P. V součtu her se ovšem pohybujeme po jednotlivých hranách složitěji, budeme proto potřebovat jemnější nástroj, jak si vyjadřovat dosažitelnost uzlů značených jako P z dalších uzlů. Dobře k tomu poslouží tzv. Spragueova­ Grundyova funkce g : V N, kterou definujeme na acyklickém orientovaném grafu G = (v, E) rekurzivně takto: (1) Všechny listy v označíme g(v) = 0. (2) Pro vrchol v V definujeme g(v) = min{a N; neexistuje hrana (v, w) s g(w) = a}. Při definici jsme použili funkci, které se říkává minimální vyloučená hodnota. Definujeme ji pro podmnožiny S přirozených čísel N = {0, 1, . . . } vztahem mex S = min N \ S. 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 299 Naše funkce g(v) je právě mex S pro množinu S všech hodnot g(w), které podél hran vidím z vrcholu v. Na přirozených číslech definujeme ještě jednu operaci. Je to binární operace (a, b) a b, kterou dostaneme tak, že vyjádříme čísla a a b ve dvojkové soustavě a vzniklé vektory a a b ve vektrovém prostoru (Z2)k nad Z2 sečteme (k je dostatečně velké). Výsledkem je opět vyjádření pro ab ve dvojkové soustavě. Sčítání vektorů ve (Z2)k je známá operace XOR na jednotlivých bitech. Věta. (1) Vrchol v V v orientovaném acyklickém grafu G = (V, E) je P pozice právě, když je hodnota Spragueovy­Grundyho funkce g(v) = 0. (2) Pro orientované acyklické grafy G1 = (V1, E1), G2 = (V2, E2) a G = (V, E) = G1 + G2 a jejich Spragueovy­Grundyovy funkce g1, g2 a g platí: g(v1v2) = g(v1) g(v2) Důkaz. POZDĚJI ???? Z věty okamžitě dostáváme srozumitelný a prakticky užitečný výsledek: Důsledek. Vrchol v1v2 v součtu grafů je P­pozice právě, když g1(v1) = g2(v2). Poznámka. V tomto textu nemůžeme jít do podrobností, obecně lze ale dokázat, že každý konečný acyklický orientovaný graf je izomorfní s konečným součtem vhodně zobecněných her Nim. Naší analýzou jednoduché hry a konstrukcí funkce g jsme tedy v podstatě (alespoň implicitně) zvládli analýzu všech nestranných her. 9.35 9.41. Vytvořující funkce. Docela často jsou v kombinatorických úvahách uži- tečné výsledky dosahované ve ,,spojitých metodách , tj. zejména klasické matema- tické analýze. Tomu můžeme rozumět i naopak ­ v podstatě byly všechny výsledky v analýze dosaženy vhodným přeložením problému na kombinatorickou úlohu (za příklad může sloužit třeba převedení problému integrace racionálních funkcí lome- ných na rozklad těchto funkcí na tzv. parciální zlomky). Není proto divu, že tyto již zvládnuté postupy můžeme dobře využívat přímo. V závěru naší procházky po aplikacích kombinatorických postupů se proto po- díváme alespoň na jednu oblast, kde se nám shodí znalosti ze spojitých metod. Začněme jednoduchým příkladem: Máme v peněžence 4 korunové mince, 5 dvou- korunových a 3 pětikorunové. Z automatu, který nevrací, chceme Colu za 22 Kč. Kolika způsoby to umíme, aniž bychom ztratili přeplatek? Hledáme zjevně čísla i, j a k taková, že i + j + k = 22 a zároveň i {0, 1, 2, 3, 4}, j {0, 2, 4, 6, 8, 10}, k {0, 5, 10, 15}. Uvažme součin polynomů (třeba nad reálnými čísly) (1 + x2 + x3 + x4 )(x2 + x4 + x6 + x8 + x10 )(x5 + x10 + x15 ). Mělo by být zřejmé, že hledaný počet řešení je právě koeficient u x22 ve výsledném polynomu. Skutečně tak dostáváme 4 možnosti 35+32+11, 35+22+31, 2 5 + 5 2 + 2 1 a 2 5 + 4 2 + 4 1. Tento prostinký příklad zasluhuje větší pozornost, než by se mohlo na první pohled zdát. Jednotlivé polynomy svými koeficienty vyjadřovaly posloupnost hod- not, kterých jsem uměli dosahovat: Jestliže budeme (pro jistotu, abychom nemuseli předem dělat odhady velikostí) pracovat s nekonečnými posloupnostmi, pak pomocí jednotlivých korun umíme dosáhnout hodnot 0, 1, 2, . . . s četnostmi (1, 1, 1, 1, 1, 0, 0, . . . ) 300 9. KOMBINATORICKÉ METODY (pokračují samé nuly), u dvoukorun a pětikorun to budou poslounosti četností (1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, . . . ), (1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, . . . ). Ke každé takové posloupnosti s konečně mnoha nulovými členy můžeme přiřadit polynom a hodou okolností řešení naší úlohy bylo možné odečíst ze součinu těchto polynomů. Takový postup můžeme používat obecně pro práci s posloupnostmi. Definice. Vytvořující funkce pro nekonečnou posloupnost a = (a0, a1, a2, . . . ) je (formální) mocninná řada a(x) = a0 + a1x + a2x2 + = i=0 aixi . Některým jednoduchým operacím s posloupnostmi odpovídají jednoduché ope- race nad mocninnými řadami: ˇ Sčítání (ai +bi) posloupností člen po členu odpovídá součet a(x)+b(x) přísluš- ných vytvořujících funkcí. ˇ Vynásobení ( ai) všech členů posloupnosti stejným skalárem odpovídá vynásobení a(x) příslušné vytvořující funkce. ˇ Vynásobení vytvořující funkce a(x) monomem xk odpovídá posunutí posloup- nosti doprava o k míst a její doplnění nulami zleva. ˇ Pro posunutí posloupnosti doleva o k míst (tj. vynechání prvních k míst po- sloupnosti) nejprve od a(x) odečteme polynom bk(x) odpovídají posloupnosti (a0, . . . , ak-1, 0, . . . ) a poté podělíme vytvořující funkci xk . ˇ Dosazením monomu f(x) za x vytvoříme specifické kombinace členů původní posloupnosti. Jednoduše je vyjádříme pro f(x) = x, což odpovídá vynásobení k­tého členu posloupnosti skalárem k . Dosazení f(x) = xn nám do posloup- nosti mezi každé dva členy vloží n - 1 nul. První dvě pravidla říkají, že přiřazení vytvořující funkce posloupnosti je homomor- fismus vektorových prostorů nad zvoleným prostorem skalárů. 9.36 9.42. Příklady vytvořujících funkcí. Uvedeme několik jednoduchých příkladů vytvořujících funkcí. Řadu z nich jsme viděli při práci s mocninnými řadami ve třetí části šesté kapitoly. Snad si všichni vzpomenou na vytvořující funkci zadanou geometrickou řadou: a(x) = 1 1 - x = 1 + x + x2 + . . . která tedy odpovídá konstantní posloupnosti (1, 1, 1, . . . ). Obecně, pro každou po- sloupnost ai s členy velikosti |an| = O(nk ) s konstantním exponentem k, konverguje její vytvořující funkce na nějakém okolí nuly (viz 5.30 a 6.27). Můžeme s nnimi pak opravdu na konvergenčním intervalu zacházet jako s funkcemi, zejména je umíme sčítat, násobit, skládat, derivovat a integrovat. Několik jednoduchých příkladů ­ DODĚLAT ???? 9.37 9.43. Diferenční rovnice s konstantními koeficienty. Hezkým a poučným příkladem na užití vytvořujících funkcí je úplná diskuse řešení lineárních diferenč- ních rovnic s konstantními koeficienty. Zabývali jsme se jimi již v třetí části první kapitoly, viz např. 1.16. Tam jsme ale přímo odvodili vzorec pro rovnice prvního řádu, odůvodnili jednoznačnost a existenci řešení, ale řešení samo jsme pak v pod- statě ,,uhádli . Nyní můžeme řešení skutečně odvodit. 2. APLIKACE KOMBINATORICKÝCH POSTUPŮ 301 Zkusme nejprve dobře známý příklad Fibonaciovy posloupnosti zadané reku- rencí Fn+2 = Fn + Fn+1, F0 = 0, F1 = 1 a pišme F(x) pro vytvořující funkci této posloupnosti. Definiční rovnost můžeme vyjádřit pomocí F(x), když použijeme naše operace pro posuv členů poslounosti. Víme totiž, že xF(x) odpovídá posloupnosti (0, F0, F1, F2, . . . ) a x2 F(x) posloup- nosti (0, 0, F0, F1, . . . ). Proto vytvořující funkce xF(x) + x2 F(x) - F(x) odpovídá posloupnosti (-F0, F0 - F1, 0, 0, . . . , 0, . . . ). Obdrželi jsme tedy rovnici pro vytvořující funkci F(x): (1 - x - x2 )F(x) = x. Abychom lépe viděli odpovídající posloupnost, můžeme ještě výsledný výraz upra- vit na součet jednodušších. Víme totiž, že lineární kombinace vytvořujících funkcí odpovídá stejným kombinacím posloupností. Racionální funkce lomené jsme se na- učili rozkládat na tzv. parciální zlomky, viz 6.16. Tímto postupem vyjádříme F(x) = 1 1 - x - x2 = A x - x1 + B x - x2 = a 1 - 1x + b 1 - 2x kde A, B jsou vhodné (obecně) komplexní konstanty a x1, x2 jsou kořeny polynomu ve jmenovateli. Konstanty a, b, 1 a 2 získáme jednoduchou úpravou jednotlivých zlomků. Výsledkem je obecné řešení pro naši vytvořující funkci F(x) = n=0 (an 1 + bn 2 )xn a tím i obecně řešení naší rekurence. Srovnejte tento postup s výsledkem v 1.17. Pro obecné lineární diferenční rovnice řádu k je účinný stejný postup. Je-li Fn+k = a0Fn + + ak-1Fn+k-1, pak vytvořující funkce pro výslednou posloupnost je F(x) = xk-1 1 - a0xk-1 - - ak-1x . Rozkladem na parciální zlomky dostaneme obecný výsledek, který jsme zmiňovali již v odstavci 3.6. 9.38 9.44. Pěstované binární stromy. Jako další příklad uvedeme výpočet počtu pn neizomorfních pěstovaných binárních stromů na n vrcholech. Každý takový pěstovaný strom je vyjádřen jako kořen, podstrom jeho levého syna a podstrom jeho pravého syna (které mohou být i prázdné). Výjimkou je pouze strom na prázdné množině uzlů, který nemá ani kořen. Pro nízké hodnoty n můžeme určit přímo (jediný prázdný strom, na jednom uzlu pouze kořen, na dvou uzlech je buď pravý nebo levý syn atd.): p0 = 1, p1 = 1, p2 = 2, p3 = 5, . . . . 302 9. KOMBINATORICKÉ METODY Označme si P(x) = p0 + p1x + p2x2 + . . . vytvořující funkci pro naši posloupnost pi. Protože pro každé rozdělení n - 1 uzlů mezi dva syny můžeme použít kterékoliv ze synů nezávisle na sobě, platí pro počet všech různých možností vztah pn = i+j=n-1 pi pj kde i, j 0. To je ovšem koeficient u xn-1 ve funkci P(x)P(x). Odvodili jsme tedy vztah (konstatní jednička napravuje první člen po posuvu o jednu pozici doprava) P(x) = 1 + x(P(x))2 . Odtud spočteme P(x) jako řešení kvadratické rovnice (x považujeme za parametr, zatímco P(x) hledanou neznámou), tj. P(x) = 1 1 - 4x 2x . Protože naše hodnota P(x) se pro x 0+ blíží k hodnotě p0 = 1, nemůže vyhovovat řešení se znaménkem +. Zkusíme tedy znaménko mínus. Abychom dostali řešení, potřebujeme vyjádřit jako mocnicnou řadu výraz 1 - 4x. Dosazením této řady a dalšími úpravami dostáváme pn = - 1 2 (-4)n+1 1/2 n + 1 = 1 n + 1 2n n . Jsou to tzv. Catalánova čísla, která se v kombinatorice často objevují. Literatura [1] Zuzana Došlá, Jaromír Kuben, Diferenciální počet funkcí jedné proměnné, MU Brno, 2003, 215 s., ISBN 80-210-3121-2. [2] Zuzana Došlá, Roman Plch, Petr Sojka, Diferenciální počet funkcí více proměnných s pro- gramem Maple, MU Brno, 1999, 273 s. [3] Pavel Horák, Úvod do lineární algebry, MU Brno, skripta. [4] Ivana Horová, Jiří Zelinka, Numerické metody, MU Brno, 2. rozšířené vydání, 2004, 294 s., ISBN 80-210-3317-7. [5] Jiří Matoušek, Jaroslav Nešetřil, Kapitoly z diskrétní matematiky, Univerzita Karlova v Praze, Karolinum, Praha, 2000, 377 s. [6] Riley, K.F., Hobson, M.P., Bence, S.J. Mathematical Methods for Physics and Engineering, second edition, Cambridge University Press, Cambridge 2004, ISBN 0 521 89067 5, xxiii + 1232 pp. [7] František Šik, Lineární algebra zaměřená na numerickou analýzu, MU, 1998, 176 s. ISBN 80-210-1996-2. [8] Jan Slovák, Lineární algebra. učební texty, Masarykova univerzita, elektronicky dostupné na www.math.muni.cz/~slovak [9] Pavol Zlatoš, Lineárna algebra a geometria, skripta MFF Univerzity komenského v Brati- slavě. 303