knuth-umeni programovani - i

669

Click here to load reader

Upload: siskinx

Post on 08-Nov-2015

389 views

Category:

Documents


22 download

DESCRIPTION

programovanie

TRANSCRIPT

  • Umn programovn 1. dl, Zkladn algoritmy Donald E. Knuth Computer Press, a.s., 2008. Vydn prvn.

    Peklad: David Krsensk Odborn korektura: Pavel Tpfer, Jan Kuera Jazykov korektura: Alena Lnkov Vnitn prava: Petr Sojka Sazba: Petr Sojka Rejstk: David Krsensk, Petr Sojka Oblka: Ivana Mitkov

    Authorized translation from the English language edition, entitled THE ART OF COMPUTER PROGRAMMING, VOLUME 1: FUNDAMENTAL ALGORITHMS, 3rd EDITION, 0201896834 by KNUTH, DONALD E., published by Pearson Education, lne, publishing as Addison-Wesley Professional, Copyright 1997 Addison-Wesley. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval systm, without permission from Pearson Education, Inc. CZECH language edition publis-hed by COMPUTER PRESS, A.S., Copyright 2008. Autorizovan peklad z originlnho anglickho vydn The Art of Computer Programing, Volume 1: Fundamental Algorithms, 3rd Edition. Originln copyright: Addison-Wesley, 1997. Peklad: Computer Press, a.s., 2008.

    Computer Press, a. s., Holandsk 8, 639 00 Brno

    Objednvky knih: http://knihy.cpress.cz [email protected] tel.: 800 555 513

    ISBN 978-80-251-2025-5 Prodejn kd: K1463 Vydalo nakladatelstv Computer Press, a. s., jako svou 2992. publikaci.

    Computer Press, a.s. Vechna prva vyhrazena. dn st tto publikace nesm bt koprovna a rozmnoovna za elem roziovn v jakkoli form i jakmkoli zpsobem bez psemnho souhlasu vydavatele.

    Koment na zadn stran oblky: Radek Hylmar Technick spoluprce: Ji Matouek, Petr Sojka,

    David Krsensk, Ji Rybika, Petr Klma Odpovdn redaktor: Radek Hylmar Technick redaktor: Ji Matouek Produkce: Daniela Neasov

  • Tuto srii knih s lskou a vzpomnkami vnuji potai Typu 650, kter byl kdysi instalovn

    na Case Institute of Technology a se kterm jsem proil mnoho nezapomenutelnch veer.

  • PEDMLUVA

    Tady je knka, o jej vydn jste ns dali v tiscch dopis. Jej sestaven nm trvalo mnoho let, kdy jsme provovali bezpoet rznch

    recept a vybrali z nich jen ty nejlep, ty nejzajmavj a ty nejdokonalej. Nyn se meme bez jedinho stnu pochybnosti zaruit

    za jeden kad z nich: budete-li se doslova dret pedepsanch postup, doshnete pesn stejnho vsledku jako my, pestoe jste teba nikdy dosud

    nevaili. McCallova kuchaka (1963)

    PROCES ppravy program pro slicov potae je zvlt zajmav, a to nejen pro sv ekonomick a vdeck pnosy, ale tak pro sv estetick strnky, dky nim se podob skldn ver nebo hudby. Tato kniha je prvnm z nkolika svazk, ve kterch ten pozn rzn dovednosti zdatnho programtora.

    Nsledujc kapitoly nejsou ovem pojaty jako vod do programovn po-ta; pedpokldme, e ji ten v tomto smyslu jist zkuenosti m. Po-adavky ke studiu knihy jsou fakticky velmi jednoduch, ale zatenk mus vnovat jistou prci a as zkladnmu seznmen s slicovm potaem. ten tto knihy by ml: a) Mt njakou pedstavu o prci slicovho potae s uloenm programem;

    nen nutn znt jeho elektroniku, ale spe vdt, jak se instrukce ukldaj do pamti potae a nsledn vykonvaj.

    b) Bt schopen pevst een problm do natolik explicitnch pojm, e jim doke porozumt" i pota. (Potae toti nemaj dn zdrav rozum"; udlaj pesn to, co jim ekneme, nic mn a nic vce. Tento princip je pi prvnm setkn s potaem nejobtnj.)

    c) Mt alespo njak znalosti zkladnch potaovch technik, jako je tvorba cykl (opakovan provdn jist mnoiny instrukc), voln podprogram a prce s indexovanmi promnnmi.

    d) Znt alespo trochu potaovou hantrku - vdt, co je pam", regis-try", bity", pohybliv dov rka", peteen", software". K vtin vraz, kter nejsou definovny pmo v textu, je uvedena strun definice v rejstku na konci svazku.

    Tyto tyi pedpoklady bychom mon mohli shrnout do jedinho poadavku, a sice e ten ji napsal a otestoval dejme tomu nejmn tyi programy pro nejmn jeden pota.

  • PEDMLUVA

    Celou tuto srii knih se snam pst tak, aby slouila nkolika elm. Knihy jsou pedevm referennmi publikacemi, kter shrnuj poznatky z nkolika dle-itch oblast. Knihy je tak mon vyut jako uebnice k samostatnmu studiu nebo pro vysokokolsk kursy pota a informatiky. Pro splnn obou tchto cl jsem do textu zalenil velk mnostv cvien a vtinu z nich jsem doplnil i o odpovdi. Moj snahou bylo tak zaplnit strnky fakty, a nikoli vgnm, obecnm vkladem.

    Srie knih je urena pro tene, kte se budou o potae zajmat hloubji, nemus to ale nutn bt potaov specialist. Jednm z mch hlavnch cl bylo skuten zpstupnit tyto techniky programovn i lidem, kte pracuj v jinch oblastech a mohou potae vhodn vyut, ale kte na druh stran nemaj as hledat vechny potebn informace v rznch odbornch asopisech.

    Tma tchto knih bychom mohli oznait jako nenumerickou analzu". Po-tae bvaly tradin spojovny s eenm rznch numerickch problm, jako je vpoet koen rovnice, numerick interpolace a integrace atd., ale podobnm tmatm se zde nijak do hloubky nevnujeme. Numerick programovn pota je velice zajmavou a rychle se rozvjejc oblast poznn a je mu vnovna cel ada knih. Od zatku 60. let 20. stolet se ale potae stle astji pouvaj i pi een problm, v nich se s sly pracuje tm jen nhodou; zde ji nevyuvme schopnosti pota provdt aritmetick vpoty, ale schopnosti jejich rozhodovn. Stn a odtn i v tchto nenumerickch oblastech pece jen vyuijeme, nsoben a dlen ji mn. Samozejm e i lovk, kter se zajm pedevm o numerick programovn pota, vyuije znalost nenumerickch technik, protoe ty jsou zde uvedeny na pozad numerickch program.

    Vsledky vzkum v oblasti nenumerick analzy najdete v rznch od-bornch asopisech. Moj snahou bylo vyhledat v tto rozshl literatue ty nejzkladnj techniky, kter se pi programovn daj uplatnit v mnoha rznch situacch. Pokusil jsem se tyto mylenky sjednotit do jaksi teorie", ale zrove jsem se pokusil ukzat i jej aplikaci na rzn praktick problmy.

    Nenumerick analza" je pro tento obor samozejm neobyejn nelicho-tivm nzvem; mnohem vhodnj je charakterizovat jej pomoc vstinho po-zitivnho oznaen. Pojem zpracovn informac" je pro uvaovanou publikaci pli irok a techniky programovn" jsou jako pojem naopak pli zk. Rd bych proto navrhl, aby se tmata probran v tchto knihch oznaovala jako analza algoritm. Tento nzev by ml mt vznam: teorie vlastnost uritch potaovch algoritm".

    Cel srie knih oznaen titulem Umn programovn je vytvoena podle nsledujc obecn osnovy:

    Dl 1. Zkladn algoritmy Kapitola 1. Zkladn principy Kapitola 2. Informan struktury

    Dl 2. Seminumerick algoritmy Kapitola 3. Nhodn sla

  • PEDMLUVA

    Kapitola 4. Aritmetika Dl 3. Razen a vyhledvn

    Kapitola 5. azen Kapitola 6. Vyhledvn

    Dl 4. Kombinatorick algoritmy Kapitola 7. Kombinatorick vyhledvn Kapitola 8. Rekurze

    Dl 5. Syntaktick algoritmy Kapitola 9. Lexikln prohledvn Kapitola 10. Lexikln analza

    Svazek 4 hovo o tak rozshlm tmatu, e jej ve skutenosti tvo ti samostatn knihy (svazky 4A, AB a 4C). Pipravuji tak dva dal svazky na speciln tmata: Svazek 6, Teorie jazyk (Kapitola 11) a Svazek 7, Kompiltory (Ka-pitola 12).

    Knihu s uvedenmi kapitolami jsem zaal pst v roce 1962, a to v jedinm svazku, ale brzy jsem zjistil, e bude lpe se vnovat jednotlivm tmatm do hloubky, ne je jen peltnout po povrchu. Vsledn rozsah textu znamen, e jedna kad z kapitol obsahuje vc ne dost materilu pro cel semestrln kurs na vysok kole; m proto smysl vydat celou srii v nkolika svazcch. Vm, e je neobvykl mt v cel knize jen dv kapitoly, ale rozhodl jsem se pro zachovn pvodnho slovn kapitol, a tm pdem pro snaz kov odkazy. Plnuji tak zkrcenou verzi svazk 1 a 5, kter by mla slouit jako obecnj reference a/nebo jako studijn materil pro potaov kursy dnho studia; jejm obsahem bude podmnoina materil z cel srie a speciln informace budou vynechny. I ve zkrcen verzi bude zachovno stejn slovn kapitol jako v kompletnm dle.

    Tento svazek mete povaovat za jaksi prnik" cel srie, protoe ob-sahuje zkladn materil, kter se pouv v dalch svazcch. Zbvajc svazky 2 a 5 se oproti tomu daj st nezvisle na sob. Svazek 1 je nejen referenn prukou pro studium ostatnch svazk, ale zrove me slouit pro studijn kursy nebo pro samostatn studium k tmatu datovch struktur (tm zdrazu-jeme ltku kapitoly 2) nebo jako text z diskrtn matematiky (kde zdrazujeme ltku kapitol 1.1, 1.2, 1.3.3 a 2.3.4) nebo jako vklad tmatu programovn ve strojovm jazyce (tentokrt klademe draz na kapitoly 1.3 a 1.4).

    Pi psan tchto kapitol jsem zvolil jin pstup, ne jak pebr vtina souasnch knih programovn pota: nepokoum se nauit tene praco-vat se softwarem nkoho jinho. Namsto toho chci, aby se nauil sm pst lep software.

    Mm pvodnm clem bylo pivst tene k hranicm poznatk ve vech rozebranch tmatech. Dret krok s oborem, kter je ekonomicky tak ziskov, je ale neobyejn tk, a vzhledem k rychlmu rozmachu informatiky je tento sen doslova nemon. Tento obor se stal pestrou mozaikou, do jejch desetitisc

  • viii PEDMLUVA

    kamnk pisply svmi drobnmi vsledky desetitisce lid po celm svt. Vzal jsem si proto nov cl: soustedit se na klasick" techniky, kter budou dleit i za nkolik destek let, a popsat je tak, jak nejlpe umm. Zejmna jsem se pokusil sledovat historii kadho z tmat a tm vytvoit pevn zklady pro budouc pokrok. Pokusil jsem se volit takovou terminologii, kter je strun a je v souladu se souasnm stavem. A pokusil jsem se do textu zahrnout vechny znm mylenky o programovn sekvennch pota, kter jsou krsn a daj se snadno vyslovit.

    Nyn je na mst nkolik slov k matematickmu obsahu cel srie knih. Ltka je uspodna takovm zpsobem, e ji doke strvit kad ten se znalostmi stedokolsk algebry (snad jen pesko nkter nronj sti); matematicky zdatn ten se zde dozv spoustu zajmavch matematickch postup souvisejcch s diskrtn matematikou. Tto dvoj rovn vkladu jsem doshl jednak ohodnocenm kadho ze cvien, mezi nimi jsou zvl vyznaena cvien matematickho charakteru, a tak dky uspodn vtiny st, kdy jsou nejdleitj matematick vsledky uvedeny ped pslunm dkazem. Vlastn dkazy jsou buto ponechny jako cvien (odpovdi jsou shrnuty do samostatn sti textu), nebo jsou uvedeny na konci vkladu.

    ten, kterho zajm spe programovn ne matematika, me po dosa-en obtnjch st matematickho vkladu zbytek pslun sti peskoit. Na druh stran matematicky orientovan ten zde najde mnostv zajmavho materilu. Vznamn st publikovanch matematickch teori k programovn pota byla pitom chybn, a proto je jednm z kol tto knky nasmrovat tene matematicky sprvnm smrem. A protoe se sm povauji za matema-tika, je moj povinnost udrovat v co nejvt mon me tak matematickou sprvnost textu.

    Pro vtinu matematickho vkladu v tchto svazcch sta zkladn znalosti diferencilnho a integrlnho potu, protoe vtina ostatnch potebnch teori je odvozena pmo v textu. Ve vkladu ale obas pouvm sloitj konstrukce teorie funkc komplexn promnn, teorie pravdpodobnosti, teorie sel a dal; v takovm ppad odkazuji tene na pslunou uebnici.

    Nejt rozhodnut, jak jsem musel pi pprav tchto svazk uinit, se tkalo zpsobu vkladu rznch postup. Vhody vvojovch diagram a ne-formlnho popisu algoritm krok za krokem jsou dostaten znm; podrobnj rozbor je uveden napklad v lnku "Computer-Drawn Flowcharts" z asopisu ACM Communications, ronk 6 (z 1963), strnky 555-563. Pi popisu jak-hokoli potaovho algoritmu je nicmn poteba tak formln, pesn jazyk, a proto jsem se musel rozhodnout, jestli pro tyto ely pout vy, algebraick jazyk jako ALGOL nebo FORTRAN, nebo strojov orientovan jazyk. Mnoz z dnench potaovch expert nebudou zejm s tmto nzorem souhlasit, ale z nsledujcch dvod jsem nakonec dospl k definitivnmu pesvden, e je toto rozhodnut sprvn: a) Kad programtor je siln ovlivnn jazykem, ve kterm pe programy; lid

    maj obrovskou tendenci preferovat takov konstrukce, kter jsou v danm

  • PEDMLUVA

    jazyce nejjednodu, nikoli ty, kter jsou nejlep pro dan pota. Po-rozum-li programtor strojov orientovanmu jazyku, bude pouvat mno-hem efektivnj metody a vrazn se pibl realit.

    b) Vechny programy, kter spolen napeme, jsou a na nkolik mlo vjimek krtk, take by je ml bt schopen zpracovat prakticky jakkoli vhodn pota.

    c) Jazyky vy rovn jsou nevhodn pro diskusi rznch dleitch otzek nzk rovn, jako je linkovn koprogram, generovn nhodnch sel, arit-metika s vcensobnou pesnost a ada problm souvisejcch s efektivnm vyuvnm pamti.

    d) lovk s vnjm zjmem o potae by ml mt dobr znalosti strojovho jazyka, protoe ten je jednou z nejdleitjch soust potae.

    e) Vstupem mnoha softwarovch program, popsanch v ad pklad, bude tak jako tak njak kd ve strojovm jazyce.

    f) Zhruba kadch pt rok pichzej a vychzej z mdy njak nov alge-braick jazyky, zatmco j zde hovom o zkladnch, nadasovch princi-pech.

    Na druh stran piznvm, e v programovacch jazycch vy rovn se pro-gramy p o nco snze a e se tak vrazn snze lad. Zhruba od roku 1970 pu sv vlastn programy ve strojovch jazycch nzk rovn jen vjimen, protoe dnen potae jsou dostaten velk a rychl. My se ale v tto knce zamujeme na celou adu problm, u kterch m vznam programovn jako umn. Nkter kombinatorick vpoty se napklad mus opakovat bilinkrt a kad mikrosekunda, o kterou zkrtme vnitn smyku cyklu, znamen sporu zhruba 11,6 dne vpoetnho asu. Podobn m smysl vnovat vt sil i pi psan jakhokoli softwaru, kter se bude pouvat mnohokrt denn v instalacch na mnoha potach, protoe napsat jej musme vdy pouze jednou.

    Mme-li tedy za sebou rozhodnut pro strojov orientovan jazyk, kter z jazyk to m bt? Mohl jsme zvolit jazyk njakho konkrtnho potae X, ale potom by si lid, kte k potai X nemaj pstup, mohli myslet, e je tato kniha jen pro majitele systmu X. Navc pota X bude mt nejspe spoustu rznch zvltnost, kter jsou vzhledem k ltce uvdn v tto knize naprosto irelevantn a kter bychom si takto navc museli vysvtlit; a nakonec vrobce potae X pijde za dva roky s potaem X + 1 nebo dokonce 10X a pota X ji nebude nikoho zajmat.

    Tomuto dilematu jsem se vyhnul tm, e jsem se pokusil vytvoit ideln" pota, kter pracuje podle velmi jednoduchch pravidel (ta se mete nauit dejme tomu za pouhou hodinu), ale kter zrove velice pipomn skuten potae. Nen dvod, pro by se studenti mli bt uit se vlastnosti vce ne jednoho potae; jakmile zvldnou jeden strojov jazyk, pizpsob se ostatnm ji snadno. Tak profesionln programtor se ve sv karie setkv s adou rznch strojovch jazyk. Jedinou zbvajc nevhodou tohoto mytickho" potae tedy je, e programy pro nj napsan si jen velmi tko vyzkoume.

  • PEDMLUVA

    Natst to ale velk problm nen, protoe ada dobrovolnk napsala simul-tory tohoto hypotetickho potae. Takovto simultory jsou ideln pro vuku, protoe se s nimi pracuje jet snze ne se skutenmi potai.

    Ke kadmu tmatu jsem se pokusil citovat ty nejlep prvn dokumenty a vybral jsem tak nkter novj prce. V odkazech na literaturu pouvm standardn zkratky nzv periodik; vjimkou jsou nejastji citovan asopisy, kter zkracuji nsledujcm zpsobem:

    CACM = Communications of the Association for Computing Machinery JACM = Journal of the Association for Computing Machinery Comp. J. = The Computer Journal (British Computer Society) Math. Comp. = Mathematics of Computation AMM = American Mathematical Monthly SICOMP = SIAM Journal on Computing FOCS = IEEE Symposium on Foundations of Computer Science SODA = ACM-SIAM Symposium on Discrete Algorithms STO = ACM Symposium on Theory of Computing Crelle = Journal fiir die reine und angewandte Mathematik

    Citaci uvedenou o dv strnky zpt zkrtm tak napklad na zpis "CACM 6 (1963), 555-563". Vrazem "CMath" oznauji dle knihu Concrete Mathematics, kterou cituji v vodu do sti 1.2.

    Velk st odbornho obsahu tchto knih je soustedna do cvien. Pokud jsou za njakm netrivilnm cvienm skryt ciz mylenky, snam se uvst jejich autora. Pslun odkazy na literaturu jsou obvykle uvedeny v doprovodnm textu dan sti knihy nebo v odpovdi na cvien, ale v ad ppad jsou cvien zaloena na rznm nepublikovanm materilu, ke ktermu ani nelze uvst dal odkazy.

    Pi pprav tchto knih mi samozejm po celou tu dobu pomhala spousta jinch lid, kterm jsem nesmrn zavzn. Dkuji pedevm sv en Jill za jej nekonenou trplivost, za ppravu nkolika ilustrac a za nevslovnou dal pomoc. Dkuji tak Robertu W. Floydovi, kter v edestch letech vrazn pomohl zlepit tento materil. Svoj pomoc pisply i tisce jinch - sepsat jen jejich jmna by zabralo celou dal knku! Mnoz z nich laskav svolili k vyuit jejich dosud nepublikovan prce. Moje vzkumn prce na Caltech a Stanfordu podporovala po dlouh lta nadace National Science Foundation a Office of Naval Research. Vynikajc pomoc a spoluprci mi poskytuje tak vydavatelstv Addison-Wesley, a to hned od zahjen projektu v roce 1962. Nejlpe ale vem podkuji, kdy jim dnes mohu ukzat, e jsem s jejich podklady mohl napsat prv takovou knihu, jakou ode mne oekvali.

    Pedmluva ke tetmu vydn Po deseti rocch vvoje systm potaov sazby TfeX a METR FONT si dnes mohu splnit sen, se kterm jsem tyto prce zanal: mohu tyto systmy aplikovat

  • PEDMLUVA

    na cel dlo Umn programovn. Pinejmenm cel text tto knihy se nachz uvnit mho osobnho potae v takov elektronick podob, kterou bude mon snadno pizpsobit i budoucm zmnm v technologich zobrazovn a tisku. Dky novmu uspodn jsem do textu mohl zalenit doslova tisce zlepen, na kter jsem u dlouho ekal.

    V tomto novm vydn jsem znovu proel cel text slovo za slovem, pokusil jsem se zachovat mladickou nevzanost pvodnch vt a zrove do nich vnst kousek sudku zralho mue. Pidal jsem destky novch cvien a k destkm jinch jsem doplnil nov a rozen odpovdi.

    Kniha Umn programovn je vak stle ve vvoji. U nkterch st uvidte JL proto symbol ve vstavb", kterm se omlouvm, e dan materil nen zcela aktuln. Supliky mm pln dleitho materilu, kter chci zalenit do poslednho, nejslavnjho, tvrtho vydn Svazku 1, ale nejprve musm dokonit svazky 4 a 5 a jejich vydn nechci odkldat vce, ne kolik je absolutn nezbytn.

    Vtinu nronch prac na pprav novho vydn zajistili Phyllis Winkler a Silvio Levy, kte zodpovdn pepsali a upravili text druhho vydn, a dle Jeffrey Oldham, jen pevedl tm vechny pvodn ilustrace do formtu METfi-POST. Opravil jsem veker chyby, na kter mne teni druhho vydn upo-zornili (a tak nkolik chyb, kterch si nikdo neviml), a pokouel jsem se nezanst nov chyby s novm materilem. Pesto vm, e v knize njak z-vady bt mohou, a kadou z nich chci opravit co nejdve. Za kadou od-bornou, typografickou nebo historickou chybu proto s radost vyplatm 2,56 dolaru tomu, kdo ji nalezne jako prvn. Internetov strnka http://www-cs-faculty.stanford.edu/~knuth/taocp.html obsahuje informace o tto knize (vetn aktulnho seznamu vech dosud oznmench chyb) a o souvisejc lite-ratue. Stanford, Clifomia D. E. K. duben 1997

    Za posledn dv desetilet se vci zmnily. BILL GATES (1995)

  • 1. Zatek

    > r 2. Peti

    str. xv-xvii

    N f 3. N < - 1

    > r 4. Zani

    kapitolu N

    ^

    (5. Je zaj- \ mv? J

    ^ 9. 2 + 2 = 5?

    18. Voln zbava

    Ano Ne

    ^ 17. JV < 12? ^

    11. Pesko matematiku

    10. Zkontroluj vzorce

    12. Vypracuj cvien

    13. Porovnej odpovdi

    Vvojov diagram pro ten tto srie knih.

  • Procedura pro ten tto srie knih

    1. Zante st tuto proceduru, pokud jste ji jet nezaali st. Peliv pokra-ujte podle nsledujcch krok. (Obecn formt procedury a doprovodnho vvojovho diagramu budeme pouvat i na jinch mstech knky.)

    2. Pette si Poznmky ke cvienm na stranch xv-xvii. 3. Piate N rovno 1. 4. Zante st kapitolu N. Nette citty uveden na zatku kapitoly. 5. Je pro vs tma kapitoly zajmav? Pokud ano, pejdte na krok 7, pokud

    ne, pejdte na krok 6. 6. Je N < 2? Pokud ne, pejdte na krok 16; pokud ano, projdte pesto text

    kapitoly. (Kapitoly 1 a 2 obsahuj dleit vodn materil a tak pehled zkladnch technik programovn. Pinejmenm proltnte st kapitoly o pouvanch notacch a o potai MIX.)

    7. Zante se tenm dal sti kapitoly; pokud jste u ale doli na konec kapitoly, pejdte na krok 16.

    8. Je slo sti kapitoly oznaeno znakem *"? Pokud ano, mete tuto st pi prvnm ten vynechat (vnuje se jistmu specilnmu tmatu, kter je zajmav, ale nen pln podstatn); vrate se na krok 7.

    9. Jste matematicky zdatn? Pokud je pro vs matematika panlsk vesnice", pejdte na krok 11; jinak pokraujte krokem 10.

    10. Zkontrolujte matematick odvozen v tto sti kapitoly (a ppadn chyby oznamte autorovi). Pejdte na krok 12.

    11. Pokud je tato st kapitoly pln matematickch vpot, radji popsan odvozovn vbec nette. Seznamte se ale s nejdleitjmi vsledky, kter jsou obvykle uvedeny na zatku, nebo ikmm psmem naopak na konci obtnj sti.

    12. Vypracujte doporuen cvien k tto sti kapitoly, a to v souladu s pokyny uvedenmi v Poznmkch ke cvien (ty jste si peetli v kroku 2).

    13. Jakmile vypracujete cvien ke sv spokojenosti, porovnejte svou odpov s odpovd uvedenou v pslunm oddle zadn sti knihy (je-li k danmu problmu njak odpov popsna). Pette si tak odpovdi ke cvienm,

  • XV PROCEDURA PRO TEN TTO SRIE KNIH

    na jejich vypracovn jste nemli as. Poznmka: Ve vtin ppad je nejrozumnj si nejprve pest odpov ke cvien n a teprve pot zat pracovat na cvien n +1, take kroky 12-13 se obvykle provdj soubn.

    14. Jste unaveni? Pokud ne, vrate se na krok 7. 15. Jdte spt. Pot vstate a vrate se na krok 7. 16. Zvyte slo N o jedniku. Pokud je N = 3, 5, 7, 9, 11 nebo 12, zante st

    dal svazek z cel srie. 17. Pokud je N men nebo rovno 12, vrate se na krok 4. 18. Blahopejeme. Nyn se pokuste pesvdit tak sv ptele, aby si koupili

    Svazek 1 a zaali jej st. Dle se vrate na krok 3.

    Bda tomu, kter te jen jednu knihu. GEORGE HERBERT, Jacula Prudentum, 1144 (1640)

    Le dfaut unique de tous les ouvrages c'est tre trop longs.

    (Spolenm nedostatkem vech dl je jejich plin dlka.)

    VAUVENARGUES, Rflexions, 628 (1746)

    Knihy jsou malichern. Jen ivot je ndhern. T H O M A S CARLYLE, Journal (1839)

  • POZNMKY KE CVIENM

    CVIEN V tto srii knih jsou vhodn jak k samostatnmu studiu, tak i pro vuku. Nauit se njak tma jen s tm, e si nco peteme, ale nepokusme se uplatnit poznatky na konkrtn problmy, je velmi obtn, ne-li nemon, protoe teprve pi cvien pln pochopme, co vechno jsme se nauili. Navc nejlpe se naume to, na co pijdeme sami. Proto tvo cvien velkou st tohoto dla; pokouel jsem se v nich ale zachovat co nejvce informativn hodnoty a souasn volit takov problmy, kter jsou zajmav a poun.

    V mnoha knihch jsou lehk cvien nahodile zamchna mezi ta nejobt-nj. To bv nkdy neastn, protoe teni rdi dopedu vd, kolik asu jim een problmu asi zabere - jinak mohou vechny problmy nakonec vynechat. Klasickm pkladem tto situace je kniha Dynamic Programming, kterou napsal Richard Bellman; je to dleit, prkopnick dlo, v nm jsou ovem problmy na konci nkterch kapitol sepsny pod jednotn nadpis "Exercises and Research Problems", tedy Cvien a vzkumn problmy"; zde jsou a krajn triviln otzky zaazeny pmo doprosted sloitch a dosud nevyeench problm. k se, e se pr jednou nkdo Dr. Bellmana zeptal, jak pozn bn cvien od vzkumnho problmu; on tehdy odpovdl: Pokud dokete otzku vyeit, znamen to, e je to cvien; jinak je to vzkumn problm."

    Dvat do knihy podobnho druhu jak vzkumn problmy, tak i velmi snadn cvien, je ovem z ady dvod rozumn; abych teni uetil nep-jemn dilema, kter otzky jsou kter, oznail jsem je selnm hodnocenm, je definuje rove obtnosti. seln stupn maj nsledujc obecn vznam: Hodnocen Vznam

    00 Velice snadn cvien, na kter me ten, jen dobe porozuml pro-bran ltce, odpovdt okamit; takovto cvien sta prakticky vdy udlat jen z hlavy".

    10 Jednoduch problm, u nho se muste zamyslet nad petenou ltkou, ale kter jet zdaleka nen obtn. Takovto otzky byste mli zvldnout zhruba do jedn minuty a pi een vm me pomoci tuka a papr.

    20 Prmrn sloit problm, na kterm si vyzkoute zkladn porozumn probran ltce; k pln odpovdi mete ale potebovat patnct a dvacet minut.

    30 Stedn obtn a/nebo sloit problm; k pln uspokojiv odpovdi se dopracujete i vce ne po dvou hodinch, ppadn po del dob, pokud u toho mte zapnutou televizi.

  • POZNMKY KE CVIENM

    40 Dosti obtn nebo rozshl problm, kter me bt ve vuce vhod-nm nmtem pro semestrln projekt. Student by ml bt schopen problm vyeit v rozumnm ase, ale een nen triviln.

    50 Vzkumn problm, kter dosud nebyl uspokojiv vyeen (pokud bylo autorovi znmo v dob vzniku textu), i kdy se o jeho een mnoz pokoueli. Pokud se vm poda najt odpov k takovmuto typu problmu, rozhodn ji publikujte; tak autora tchto strnek velice pot, jestlie mu o een dte co nejdve vdt (za podmnky, e je een sprvn).

    Interpolac tto logaritmick" stupnice meme snadno vysvtlit i jin -seln hodnocen. Vraz 17 bude napklad oznaovat cvien, kter je o nco vce ne prmrn jednoduch. Problmy s hodnocenm 50, kter pozdji njak ten vye, mohou bt v dalch vydnch knihy i v erratech na Internetu (viz strana iv) oznaeny slem J^ 5.

    Zbytek po dlen selnho hodnocen pti vyjaduje objem potebn rutinn prce. Vyeit cvien oznaen slem 24 me tedy trvat dle ne cvien s hodnocenm 25, ale ke cvien s slem 25 je poteba vce tvoivosti.

    Autor se pokusil piadit seln hodnocen jednotlivch cvien co nej-pesnji, ale pro lovka, kter njak problm vymysl, je samozejm obtn odhadnout, jak tk bude hledat een pro nkoho jinho; kad m navc pirozen vlohy pro urit typy problm a u ne pro jin. Doufm, e je toto hodnocen dobrm odhadem obtnosti; sla berte ale jen jako rmcov vodtko, nikoli jako njak absolutn indiktor.

    Knihu jsem psal pro tene s rznm stupnm matematickho vzdln a nadn; nkter ze cvien jsou proto urena jen pro matematicky zdatn studenty. Cvien, k jeho een je poteba vce matematickho mylen i mo-tivace, ne kolik je bn u lid, kte se zajmaj jen o programovn samotnch algoritm, m k hodnocen pipojeno psmeno M. Pokud jsou ke cvien nezbytn znalosti diferencilnho potu nebo jin vy matematiky, kter nen v tto knize odvozena, je oznaeno psmeny VM". Samotn oznaen VM" ovem neznamen, e by cvien nutn muselo bt obtn.

    Ped nktermi cvienmi je uvedena ipka, "; ta uvd problmy, kter jsou obzvlt nzorn a jejich een je mon teni doporuit. Neoekvm samozejm, e kad ten i student vypracuje pln vechna cvien, a proto jsem takto oznail ta nejcennj. (Tm vs ale nechci odradit od tch ostatnch!) Kad ten by se ovem ml pinejmenm pokusit o vyeen vech problm s hodnocenm 10 a menm; podle ipek se me rozhodnout, kterm ze cvien o vym hodnocen d pednost.

    een vtiny cvien je uvedeno v sekci odpovd. Ty prosm pouvejte s ro-zumem a na odpov se nedvejte, pokud se nepokuste problm poctiv vyeit sami nebo pokud na vyeen tohoto konkrtnho problmu skuten nemte as. A pot, co pijdete na svoje vlastn een, nebo se o to alespo pokuste, me pro vs bt vzorov odpov pouenm a nvodem. een uveden v knize jsou asto velmi strun a detailn postupy jsou postaveny na pedpokladu, e jste

  • POZNMKY KE CVIENM xvii

    se nejprve poctiv pokusili problm vyeit vlastnmi silami. Nkdy se z een dozvte mn informac, ne kolik bylo v otzce poadovno, jindy naopak vce. Je tak docela mon, e se vm poda najt lep odpov, ne jak je v knize uvedena; v tomto ppad bude autor poten, pokud se s nm o een podlte. V dalch vydnch knihy se pak podle monost objev zdokonalen een spolu se jmnem eitele.

    Pi prci na cviench mete obvykle vyuvat odpovdi na pedchoz cvi-en, pokud to nen vslovn zakzno. Tak seln hodnocen jsou definovna s ohledem na toto pravidlo; je proto mon, e cvien n -1-1 bude mt ni hodnocen ne cvien n, i kdy ve svm specilnm ppad vyuv vsledk cvien n.

    Shrnut kd: 00 Okamit odpovd 10 Jednoduch (do jedn minuty) 20 Prmrn (tvrt hodiny)

    Doporuen 30 Stedn obtn M Matematicky orientovan 40 Semestrln projekt VM Vyaduje vy matematiku" 50 Vzkumn problm

    CVIEN 1. [00] Co znamen hodnocen M20"?

    2. [10] Jakou hodnotu mohou mt cvien v uebnici pro jejho tene? 3. [14] Dokate, e 133 = 2197. Svoji odpov zobecnte. [To je pklad hrozivho

    typu problm, kterm se autor pokou vyhbat.] 4. [ VM45] Dokate, e pro dn cel slo n, kde n > 2, nem rovnice xn +yn = zn

    dn een v mnoin kladnch celch sel x, y, z.

    Meme naemu problmu elit. Meme takovto skutenosti zadit

    s nleitm dem a postupem. HERCULE P O I R O T , v Vrada v Orient Expressu (1934)

  • OBSAH

    Kapitola 1 - Zkladn principy 1

    1.1. Algoritmy 1 1.2. Matematick zklady 10

    1.2.1. Matematick indukce 11 1.2.2. sla, mocniny a logaritmy 21 1.2.3. Souty a souiny 27 1.2.4. Celoseln funkce a teorie sel 39 1.2.5. Permutace a faktorily 45 1.2.6. Binomick koeficienty 52 1.2.7. Harmonick sla 75 1.2.8. Fibonacciho sla 79 1.2.9. Generujc funkce 87 1.2.10. Analza algoritm 96

    * 1.2.11. Asymptotick reprezentace 107 1.2.11.1. O-notace 107 * 1.2.11.2. Eulerv suman vzorec 111 *1.2.11.3. Nkter asymptotick vpoty 116

    1.3. Pota MIX 124 1.3.1. Popis potae MIX 124 1.3.2. Assembler pro MIX 144 1.3.3. Aplikace pi vpotu permutac 164

    1.4. Nkter zkladn techniky programovn 186 1.4.1. Podprogramy 186 1.4.2. Koprogramy 193 1.4.3. Interpretan programy 200

    1.4.3.1. Simultor potae MIX 202 * 1.4.3.2. Trasovac podprogramy 212

    1.4.4. Vstup a vstup 215 1.4.5. Historie a literatura 229

    Kapitola 2-Informan struktury 232 2.1. vod 232 2.2. Linern seznamy 238

    2.2.1. Zsobnky, fronty a oboustrann fronty 238 2.2.2. Sekvenn alokace 244 2.2.3. Spojov alokace 254

  • OBSAH xix

    2.2.4. Kruhov seznamy 273 2.2.5. Obousmrn propojen seznamy 280 2.2.6. Pole a ortogonln seznamy 298

    2.3. Stromy 308 2.3.1. Prchod binrnm stromem 318 2.3.2. Reprezentace stromu binrnm stromem 334 2.3.3. Jin reprezentace stromu 348 2.3.4. Zkladn matematick vlastnosti strom 362

    2.3.4.1. Voln stromy 363 2.3.4.2. Orientovan stromy 372

    *2.3.4.3. Knigovo nekonen lemma" 382 *2.3.4.4. Vet strom 386

    2.3.4.5. Dlka cesty 399 *2.3.4.6. Historie a literatura 406

    2.3.5. Seznamy a uvolovn pamti 408 2.4. Vcensobn propojen struktury 424 2.5. Dynamick alokace pamti 435 2.6. Historie a literatura 457

    Odpovdi na cvien 466

    Ploha A-Tabulky selnch veliin 619

    1. Zkladn konstanty (destkov) 619 2. Zkladn konstanty (osmikov) 620 3. Harmonick sla, Bernoulliho sla, Fibonacciho sla 621

    Ploha B-Rejstk notac 623

    Rejstk a slovnek pojm 6 2 8

  • KAPITOLA PRVN

    ZKLADN PRINCIPY

    Mnoz lid, kte nejsou zbhl v matematickch disciplnch, se domnvaj, e pokud je jeho kolem [Babbageova Analytickho Potae]

    dvat vsledky v seln notaci, mus mt i jeho procesy aritmetickou a selnou povahu, nikoli algebraickou a analytickou. To je ovem chyba.

    Stroj doke uspodat a zkombinovat svoje seln veliiny pesn stejn, jako by to byla psmena nebo jin obecn symboly;

    a ve skutenosti me po pijet odpovdajcch opaten podvat vsledky i v algebraick notaci.

    AUGUSTA ADA, hrabnka z Lovelace (1844)

    Zskej cvik, probh, v malch vcech; potom pokrauj v tch velkch. EPIKTTOS (Epikttovy rozpravy IV.i)

    1.1. ALGORITMY SLOVO algoritmus je pi programovn pota natolik zkladnm pojmem, e musme zat jeho pelivm rozborem.

    U samotn slovo algoritmus" je docela zajmav: na prvn pohled to vy-pad, jako by nkdo chtl napsat logaritmus", ale prvn tyi psmena trochu zpehzel. V anglickm slovnku Webstes New World Dictionary se toto slovo objevilo a v roce 1957; do t doby jsme zde nalezli jen jeho star podobu algorism" s jet starm vznamem, kterm bylo provdn aritmetickch v-pot s arabskmi slicemi. Za stedovku toti abakist potali na abaku a algorist pomoc algorism. V obdob renesance byl ale pvod tohoto slova ne-jasn a prvn lingvist se pokoueli vysvtlit je rznmi kombinacemi, napklad algiros [bolestn]+ arithmos [slo]; jin tvrdili, e slovo pochz od kastilskho krle Algora. Nakonec ale historikov matematiky nalezli skuten pvod slova algorism: pochz ze jmna slavnho perskho matematika a autora uebnic, kter se jmenoval Abu 'Abd Allh Muhammad ibn Musa al-Chwarizml (c. 825), doslova otec Abdullha, Mohammeda, syn Mojv, narozen v Chorezmu". Aralskmu moi ve Stedn Asii se toti kdysi kalo jezero Chorezm (Chvrizm, v anglick transkripci Khwrizm) a oblast Chorezm se nachz v povod eky Amu-Darji jin od tohoto moe. Al-Chwarizml napsal slavn arabsk text Kitb al-jabr wa'1-muqbala (Pravidla pro odvozovn a srovnvn"); ze samotnho nzvu knihy, kter se systematicky vnovala een linernch a kvadratickch rovnic, pak pochz dal dleit slovo, algebra". [Bli pojednn o ivot a dle al-Chwarizmlho najdete v lnku H. Zemanek, Lecture Notes in Computer Science 122 (1981), 1-81.]

  • 2 ZKLADN PRINCIPY 1.2.1

    Tvar i vznam pvodnho slova algorism se ale postupn posunul a - jak vysvtluje slovnk Oxford English Dictionary - slovo prolo mnostvm pseudo-etymologickch zkomolen, mimo jin nedvnm slovem algoritmus, kter se vdecky zamuje" s eckm pvodem slova aritmetika. Jestlie si uvdomme, e lid dvno zapomnli originln pvod slova, nen tk tento posun od slova algorism" k algoritmus" pochopit. Jeden z prvnch nmeckch matematickch slovnk, Vollstndiges mathematisches Lexicon (Leipzig: 1747), definuje slovo Algoritmus nsledovn: Pod tmto pojmem vyskytuj se vznamy ty typ arit-metickch vpot, jmenovit stn, odtn, nsoben a dlen." Latinskm vrazem dlgorithmus infinitesimalis se v t dob oznaovaly zpsoby vpot s nekonen malmi veliinami, kter vynalezl Leibniz".

    Do roku 1950 bylo slovo algoritmus spojovno nejastji s Euklidovm algo-ritmem, kter slou ke zjitn nejvtho spolenho dlitele dvou sel a kter je uveden v Euklidov dle Zklady (Kniha 7, vta 1 a 2). Nen od vci si nyn Euklidv algoritmus uvst: Algoritmus E {Euklidv algoritmus). Jsou-li dna dv kladn cel sla m a n, najdte jejich nejvtho spolenho dlitele, tedy nejvt kladn cel slo, kterm jsou beze zbytku dliteln sla m i n. El. [Nalezen zbytku.] Vydlte m slem n a nech r je zbytek. (Znamen to, e

    0

  • 1.1 ALGORITMY 3

    Za tmto strunm shrnutm nsleduje popis, kter pomoc slov a symbol vyjaduje provdnou akci i operaci nebo njak rozhodovn. Mohou zde bt uvedeny tak komente v zvorkch, jako je v kroku El druh vta. Ty obsahuj rzn vysvtlujc informace a asto popisuj jist invarianty neboli nemnn vlastnosti promnnch, ppadn cle, kter je teba v tomto kroku splnit. Ne-popisuj tak akce vlastnho algoritmu, ale co nejvce pomhaj teni pi jeho pochopen.

    ipka

  • 4 ZKLADN PRINCIPY 1.2.1

    zpis a[i,j] nahrazuje nkdy notaci s dvojitm indexem, a^ . Promnn bvaj tak oznaovny identifiktorem z nkolika psmen, napklad TEMP me bt nzev promnn pro doasn uloen vypoten hodnoty, PRIME [K] me bt K-t prvoslo apod.

    Tolik tedy k form algoritm a nyn zkusme jeden provst. Na tomto mst je ale teba tene upozornit, e se algoritmy nedaj st jako texty v krsn literatue; pi takovto lehk etb bychom tko pochopili, o co v nm jde. Algoritmu musme vit a nejlpe jeho vznam pochopme tak, e si jej vyzkoume. ten by si ml ke kadmu algoritmu vzt tuku a papr a zkusit si jej ihned projt. Obvykle bude nartnut hotov funkn pklad, jindy si jej ten snadno sestav sm. Je to jednoduch a bezbolestn zpsob, jak dan algoritmus pochopit; jakkoli jin postup bv obvykle nespn.

    Projdme si tedy nyn pklad Algoritmu E. Nech je dno m = 119 a n = = 544; meme tedy zat krokem 1. (ten me laskav sledovat innost algoritmu, podle znmho kola hrou".) Dlen m slem n je v tomto p-pad jednoduch, snad a pli jednoduch, protoe nepln podl je roven nule a zbytek je 119. Mme tedy r n.] Pokud je m < n, vymte m n. Pro samotn algoritmus by to neznamenalo dnou podstatnou zmnu, jen bychom ho tm mrn prodlouili a zhruba v polovin ppad bychom zrove zkrtili dobu jeho provdn.

    Vrtme-li se zpt do kroku El, zjistme, e 544/119 = 4-1- 68/119, take r 68. Podmnka v E2 tak opt neplat a v kroku E3 piadme ra 119, n

  • 1.1 ALGORITMY 5

    (Proceduru, kter vykazuje vechny charakteristick vlastnosti algoritmu, ale kter nemus splovat podmnku konenosti, meme nazvat vpoetn me-foda.Euklides pvodn vytvoil nejen algoritmus vpotu nejvtho spolenho dlitele dvou sel, ale tak velmi podobn geometrick postup pro konstrukci nejvt spolen mry" dlek dvou seek; pokud jsou ale dlky obou zada-nch seek nesoumiteln, tato vpoetn metoda neskon. Jinm pkladem neukonen vpoetn metody je reaktivn proces, kter nepetrit reaguje na podnty ze svho prosted.) 2) Uritost Kad krok algoritmu mus bt pesn definovn a pro kad

    ppad v nm mus bt s uritost a jednoznanost popsny provdn operace. Algoritmy v tto knce budou (doufejme) tuto podmnku splovat, jsou ale napsny v pirozenm jazyce, take se me stt, e ten neporozum pesn zmrm autora. Pro pekonn tchto obt s jednoznanou interpretac se algo-ritmy zapisuj ve formln definovanch programovacch jazycch neboli pota-ovch jazycch, kde m kad pkaz pesn uren vznam. Cel ada algoritm bude v tto knize popsna jak v bnm, tak i v potaovm jazyce. Vyjden jist vpoetn metody v potaovm jazyce je oznaovno jako program.

    Kritrium uritosti u kroku El v algoritmu E vyjaduje, e ten pesn rozum, co znamen vydlit slo m slem n a stanovit zbytek. Pokud ale m a n nejsou kladn cel sla, nen pesn vklad tto operace jednotn: jak je zbytek po dlen 8 dleno 7r? A jak je zbytek 59/13 dleno nulou? Kritrium uritosti zde tedy mimo jin znamen, e musme ped provedenm kroku El zkontrolovat, zda jsou hodnoty m a n vdy kladn cel sla. Na zatku je tato podmnka splnna dky pedpokladu; po proveden kroku El je ji r urit nezporn cel slo, a pokud se dostaneme na krok E3, mus bt zrove nenulov. Take sla m a n jsou skuten pi dlen vdy kladn a cel, jak potebujeme. 3) Vstup. Kad algoritmus m nula nebo vce vstup: to jsou veliiny, kter

    do algoritmu zadme ped jeho zahjenm nebo kter nateme dynamicky za bhu. Tyto vstupy se pebraj z uren mnoiny objekt. V algoritmu E mme napklad dva vstupy, jmenovit m a n, a volme je z mnoiny kladnch celch sel. 4) Vstup. Algoritmus m tak jeden nebo vce vstup: to jsou veliiny, kter

    maj zadan vztah ke vstupm. Algoritmus E m jeden vstup, a to promnnou n definovanou v kroku E2, kter nabude hodnoty nejvtho spolenho dlitele obou vstupnch veliin.

    (2e je toto slo skuten nejvtm spolenm dlitelem, to meme snadno dokzat; podvejme se na dkaz. Po proveden kroku El dostvme

    m = qn + r, pro njak cel slo q. Pokud r = 0, je m nsobkem sla n a v takovm ppad je samozejm zrove nejvtm spolenm dlitelem sel man. Jestlie r ^ 0, pak jakkoli slo, kter je dlitelem man, mus beze zbytku dlit tak m qn = r a jakkoli slo, kter je dlitelem n a r, mus beze zbytku dlit qn + r = m; mnoina spolench dlitel sel {m, n} je tud stejn jako mnoina spolench

  • 6 ZKLADN PRINCIPY 1.2.1

    dlitel sel {n,r}. Zejmna pak nejvt spolen dlitel sel {ra, n) je stejn jako nejvt spolen dlitel sel {n, r}. Krok E3 proto nezmn odpov na n pvodn problm.) 5) Efektivita. Algoritmus by ml bt zrove efektivnm, co znamen, e vech-

    ny jeho operace mus bt v rozumn me jednoduch, take by je v principu ml bt schopen pesn a za konenou dobu provst kdokoli s tukou a paprem. Algoritmus E pouv jen operace dlen jednoho kladnho celho sla druhm, testovn rovnosti celho sla s nulou a piazen hodnoty jedn promnn do druh promnn. Tyto operace jsou efektivn, protoe cel sla se daj na pape vyjdit konenm zpsobem a protoe existuje nejmn jedna metoda (algo-ritmus dlen") pro dlen jednoho sla druhm. Stejn operace ale nebudou efektivn, pokud za ob hodnoty zvolme libovoln reln sla s nekonenm desetinnm rozvojem nebo pokud msto nich zadme dlku seky (kterou tak nelze pesn stanovit). Jinm pkladem neefektivnho kroku me bt: Pokud je 4 nejvt cel slo n, pro kter existuje een rovnice wn + xn + yn = = zn v kladnch celch slech w, x, y a z, pejdte na krok E4." Takovto vta neme bt efektivn operac, dokud nkdo spn nevytvo algoritmus, kterm by zjistil, jestli 4 je, nebo nen nejvtm slem s uvedenou vlastnost.

    Porovnejme nyn pojem algoritmu s receptem z kuchask knihy. Kad recept je s nejvy pravdpodobnost konen (i kdy se k, e hrnec, na kter se jen dvme, nezane vait), m njak vstupy (vejce, mouku atd.) a tak vstupy (veee podle televize apod.), zrove mu ale zoufale chyb uritost. V kuchaskch knihch najdeme a pli asto rzn neurit instrukce: Pi-dejte petku soli." Takov petka" je definovna jako mn ne kvov liky" a definice soli by mla bt jasn kadmu; ale kam mme sl pidat -nahoru? nebo na stranu? Podobn instrukce jako zlehka promchvejte, dokud nen sms hladk", nebo ohejte koak v mal pnvi" jsou dostatenm vysvt-lenm snad jen pro zkuenho fkuchae; algoritmus mus bt ale specifikovn do takovho stupn pesnosti, e podle nj me pracovat i pota. I potaov programtor se nicmn me studiem kuchaky hodn nauit. (Autor jen tko odolval pokuen nazvat tento svazek Kuchakou programtora"; mon se jednoho dne pokus napsat knihu s nzvem Algoritmy do kuchyn".)

    Nutno poznamenat, e samotn podmnka konenosti nen pro praktick pouit dostaten siln. Aby byl algoritmus uiten, mus skonit nejen po konenm, ale po velmi konenm, tedy rozumnm potu krok. Existuje na-pklad algoritmus, kter zjist, jestli bl me achovou partii vdy vyhrt, pokud neudl chybu (viz cvien 2.2.3-28). Tento algoritmus doke tedy vyeit problm, o kter se iv zajmaj tisce lid na celm svt, ale pesto se meme v klidu vsadit, e za svho ivota odpov nepoznme; proveden algoritmu toti trv pmo neskuten mnostv asu, i kdy je sm konen. Vklad na tma tak velkch sel, kter jsou ji za hranicemi normlnho chpn, najdete v kapitole 8.

    V praxi ovem poadujeme nejen njak algoritmy, ale takov algoritmy, kter jsou v jakmsi voln definovanm estetickm smyslu dobr. Jednm z kri-

  • 1.1 ALGORITMY 7

    tri dobrho algoritmu je doba nezbytn k jeho proveden; meme ji vyjdit tak potem opakovn kadho kroku. Dalm kritriem me bt adaptabilita algoritmu pro rzn typy pota, jeho jednoduchost a elegance atd.

    asto je eenm jednoho stejnho problmu hned nkolik algoritm, z nich musme vybrat ten nejlep. Tm se dostvme k jedn velice zajmav a souasn dleit oblasti analzy algoritm: je-li dn njak algoritmus, stanovte jeho vkonovou charakteristiku.

    Uvaujme napklad znovu Euklidv algoritmus a pedpokldejme tuto otz-ku: Pokud je hodnota sla n pevn dan, ale m me nabvat libovolnho klad-nho celho sla, jakm prmrnm potem opakovn Tn projde v algoritmu E krok El?" Nejprve se musme pesvdit, jestli m tato otzka vbec smysluplnou odpov, protoe se pokoume stanovit prmr z nekonen mnoha hodnot m. Je ale zejm, e ji po prvnm proveden kroku El je podstatn pouze zbytek po dlen m slem n. Pro zjitn sla Tn nm tedy sta vyzkouet algoritmus pro ra = l,ra = 2, . . . ,m = n, spotat celkov poet proveden kroku El a vsledek podlit slem n.

    Nyn pichz dleit otzka stanoven povahy sla Tn; bude piblin rovno nebo teba y/? Stanovit odpovdna takovouto otzku je neobyejn obtn

    a fascinujc matematick problm, kter dosud nen pln vyeen; podrobnji se mu vnujeme v sti 4.5.3. Pro velk hodnoty sla n je mon dokzat, e je Tn piblin rovno (l2(ln2)/7r2) ln n, tedy e je pmo mrn pirozenmu logaritmu sla n, piem nsobc konstantu by sotva kdo dokzal pmo od-hadnout! Podrobnj informace k Euklidov algoritmu a k dalm zpsobm vpotu nejvtho spolenho dlitele najdete v sti 4.5.2.

    Vrazem analza algoritm popisuje autor rzn eten podobnho charak-teru. Zkladn mylenkou je vzt urit algoritmus a stanovit jeho kvantitativn chovn; pleitostn tak zkoumme, jestli dan algoritmus je nebo nen v jistm slova smyslu optimln. Teorie algoritm je zcela jin tma, kter se zabv pedevm existenc nebo neexistenc efektivnho algoritmu pro vpoet uritch veliin.

    Zatm byl n vklad algoritm pomrn mlo pesn a matematicky orien-tovan ten se me po prvu domnvat, e pedchzejc text je jen velmi chatrnm zkladem pro vstavbu jakkoli teorie algoritm. Tuto st textu uzaveme proto strunm popisem jist metody, pomoc n meme pojem algoritmu pevn zakotvit do sfry matematick teorie sel. Definujeme proto formln vpoetn metodu jako tveici (Q, / , , / ) , kde Q je mnoina obsahujc podmnoiny z I a l, a / je zobrazen z mnoiny Q do sebe sama. Navc / mus bt na podmnoin identick, tedy f(q) mus bt rovno q pro vechna q z fi. Uveden tyi veliiny Q, /, , / po ad reprezentuj stavy vpotu, vstupy, vstupy a vpoetn pravidla. Kad vstup x v mnoin I definuje nsledujcm zpsobem vpoetn posloupnost #o,

    x0 = x a Xk+\ = f(xk) pro k > 0. i1) kme, e vpoetn posloupnost kon v k krocch, pokud je k nejmen cel slo, pro kter Xk nle do ; zrove kme, e z x je odvozen vstup Xk>

  • 8 ZKLADN PRINCIPY 1.2.1

    (Poznamenejme, e pokud Xk nle do , nle sem i x^+i, protoe v takovm ppad je x^+i = Nkter vpoetn posloupnost nemus nikdy skonit; algoritmus je pak takov vpoetn posloupnost, kter pro vechna x z I skon v konen mnoha krocch.

    Algoritmus E meme napklad formalizovat nsledujcm zpsobem: nech Q je mnoina vech jednoprvkovch mnoin (ra), vech uspodanch dvojic (m,n) a vech uspodanch tveic (ra,ra, r, 1), (ra,ra, r, 2) a (ra,ra,p, 3), kde m ,nap jsou kladn cel sla a r je nezporn cel slo. Nech I je podmnoina vech dvojic (m,n) a nech je podmnoina vech jednoprvkovch mnoin (n). Dle nech funkce / je definovna nsledovn:

    f((m, ra)) = (ra, ra, 0,1); f((n)) = (ra); /((ra, n, r, 1)) = (ra, ra, zbytek z ra dleno ra, 2);

    / \ (2) /((ra, ra, r, 2)) = (ra) pokud r = 0, (ra, ra, r, 3) jinak; /((ra, ra,p, 3)) = (ra,p,p,l).

    Vzjemn korespondence mezi touto notac a algoritmem E je evidentn. Soust takto formulovanho algoritmu jet ale nen ve uveden pod-

    mnka efektivity. Z mnoiny Q mohou napklad vyplvat nekonen posloup-nosti, kter se nedaj za pomoci tuky a papru spotat, nebo soust funkce / mohou bt operace, kter normln smrtelnk nezvldne. Pokud bychom chtli omezit pojem algoritmu jen na elementrn operace, mohli bychom pro Q, /, a / vyslovit napklad nsledujc omezujc podmnky: Nech A je konen mnoina psmen a A* je mnoina vech etzc sloench z prvk mnoiny A (tedy mnoina vech uspodanch posloupnost xix2.. .xn , kde ra > 0 a xj nle do A pro kad 1 < j < ra). Mylenkou je zakdovat stavy vpotu do reprezentac pomoc etzc z A*. Nyn uvaujme, e N je nezporn cel slo a e Q je mnoina vech (o, j) , kde o nle do A* a j je cel slo, 0 < j < AT; nech / je podmnoina mnoiny Q pro j = 0 a je jej podmnoina pro j = N. Pokud 9 a o jsou etzce z A*, kme, e se 0 vyskytuje v cr, m-li a formu aOu pro njak etzce a a o;. Pro dokonen na definice potebujeme jet funkci / , kter bude nsledujcho typu, piem ji budou definovat etzce 0j,

  • 1.1 ALGORITMY 9

    N. M. Nagornyj (Moskva: Nauka, 1984; anglick vydn, Dordrecht: Kluwer, 1988).

    CVIEN 1. [10] V textu jsme si ukzali, jak pomoc notace s nahrazovnm vymnit hodnoty

    promnnch man, a, sice v operacch t TO, m

  • 10 ZKLADN PRINCIPY 1.2.1

    1.2. MATEMATICK ZKLADY

    V TTO STI TEXTU se budeme zabvat rznmi matematickmi notacemi, kter pouvme v cel knize Umn programovn, a odvodme si nkolik z-kladnch vzorc, je budeme opakovan pouvat. I ten, kter se o sloit matematick odvozen hloubji nezajm, by se ml pinejmenm seznmit s v-znamem rznch vzorc, aby tak mohl vyuvat vsledky odvozen.

    Matematick notace se v tto knize pouv ke dvma hlavnm elm: jednak pro popis st algoritmu, jednak pro analzu vkonovch charakteristik algoritmu. Notace pro popis algoritm je pomrn jednoduch a vysvtlili jsme si ji ji v pedchzejc sti textu. Pi analze vkonnosti algoritm budeme potebovat dal speciln notace.

    Vtina zde rozebranch algoritm je doplnna o rzn matematick vpo-ty, kter peduruj oekvanou rychlost jejich zpracovn. Tyto vpoty erpaj snad ze vech monch odvtv matematiky a pro odvozen vech matematickch pojm, kter na rznch mstech vkladu pouvme, bychom museli napsat samostatnou knku. Drtivou vtinu vpot je ale mon provst se znalostmi bn vysokokolsk algebry a ten se zkladnmi znalostmi diferencilnho a integrlnho potu by ml porozumt prakticky veker matematick teorii. Nkdy budeme potebovat hlub vsledky teorie komplexn promnn, teorie grup, teorie sel, teorie pravdpodobnosti atd.; v takovm ppad bude pslun tma vysvtleno pokud mono jednoduchm zpsobem nebo budou uvedeny odkazy na jin zdroje informac.

    Matematick techniky, kter jsou soust analzy algoritm, jsou obvykle ponkud zvltn. asto budeme napklad pracovat s konenmi souty racio-nlnch sel nebo s eenm rekurentnch relac. Takovto tmata dostvaj v ma-tematickch kurzech zpravidla jen mlo prostoru, a proto je smyslem nsledu-jcch st textu nejen dkladn dril pouvn definovanch notac, ale tak podrobn ilustrace rznch typ vpot a technik, kter vyuijeme nejastji. Dleit poznmka: I kdy nsledujc sti textu podvaj pomrn rozshl vklad v matematickch dovednostech, kter jsou pro studium potaovch algoritm nezbytn, vtina ten na prvn pohled nepochop, jak siln jsou vazby mezi touto ltkou a programovnm pota (s vjimkou sti 1.2.1). ten me nsledujc text prost skuten peliv a dvovat tak autorovi, e je probran ltka skuten velmi dleit, z motivanho hlediska je ale vhodnj tuto st nejprve jen zbn proltnout a a pozdji (a uvidte, kolik aplikac popisovanch technik se skrv v dalch kapitolch) se k n vrtit a prostudovat ji dkladnji. Pokud nkdo do tohoto materilu zabedne pli hned napoprv, nemus se k tmatm z programovn pota u vbec dostat! ten by nicmn ml bt pinejmenm obeznmen s celkovm obsahem tchto st vkladu a ml by i pi prvnm ten zkusit vypracovat nkter ze cvien. Zvltn pozornost si zasluhuje st 1.2.10, ze kter vychz vtina pozdji od-vozenho teoretickho materilu. st 1.3, kter nsleduje po sti 1.2, ji rychle opout krlovstv ist matematiky" a vstupuje do e istho programovn pota".

  • 1.2.1 MATEMATICK INDUKCE 11

    Rozen, volnj vklad velk sti tto ltky najdete ve druhm vydn knihy Concrete Mathematics, kterou napsali Graham, Knuth, a Patashnik, druh vydn (Reading, Mass.: Addison-Wesley, 1994). Tuto knihu budeme v nsled-nch odkazech oznaovat jednodue jako CMath.

    1.2.1. Matematick indukce Nech P(ra) je njak tvrzen o celm sle ra; vrok P(ra) me bt napklad ra krt (ra + 3) je sud slo" nebo jestlie ra > 10, pak 2n > ra3". Dejme tomu, e nyn chceme dokzat pravdivost tvrzen pro vechna kladn cel sla ra. To meme udlat pomoc jednoho velmi dleitho postupu: a) Dokate, e tvrzen P(l ) je pravdiv. b) Dokate, e je pravdiv tak tvrzen jsou-li pravdiv vechna tvrzen P( 1),

    P(2) , . . . , P(ra), pak je pravdiv i tvrzen P(n + 1)", piem dkaz bude platn pro libovoln kladn cel slo ra. Jako pklad uvaujme nsledujc srii rovnost, na kterou od dvnch dob

    pila nezvisle na sob spousta lid:

    Nazvme tento vztah tvrzenm P(ra); chceme dokzat, e je P(ra) pravdiv pro vechna kladn cel ra. Podle ve uvedenho postupu dokeme: a) P(l) je pravdiv, protoe 1 = l2." b) Jsou-li pravdiv vechna tvrzen P ( l ) , . . . , P(n), pak je pravdiv zejmna

    i P(ra), take plat vztah (2); jestlie k obma stranm piteme 2ra + 1, dostaneme

    1 + 3 + + (2ra - 1) + (2ra + 1) = ra2 + 2ra + 1 = (ra + l)2, m jsme dokzali, e je pravdiv i tvrzen P(ra +1)."

    Tuto metodu meme povaovat za algoritmickou proceduru dkazu. Po-moc nsledujcho algoritmu meme skuten vytvoit dkaz tvrzen P(n) pro libovoln kladn cel slo ra, pokud jsme ovem ji vypracovali kroky (a) a (b):

    Algoritmus I (Konstrukce dkazu). Pro dan kladn cel slo ra vytvo tento algoritmus dkaz, e je tvrzen P(ra) pravdiv. 11. [Dokzat P(l).] Piate k

  • 12 ZKLADN PRINCIPY 1.2.1

    13. [Dokzat P(k + 1).] V souladu s bodem (b) vypite dkaz tvrzen: Jsou-li pravdiv vechna tvrzen P( 1), . . . , P(k), pak je pravdiv i tvrzen P(k +1)." Dle vypite vtu: Dokzali jsme ji P( l ) , . . . , P(fc); tud i P(k + 1) je pravdiv."

    14. [Zvit k.] Zvtete k o 1 a vrate se na krok 12. |

    Obr. 2. Algoritmus I: Matematick indukce

    Protoe tento algoritmus jasn pedkld dkaz tvrzen P(n) pro libovoln dan n, je i technika dkazu sloen z krok (a) a (b) logicky platn. Nazvme ji dkaz metodou matematick indukce.

    Princip matematick indukce je ale teba odliit od obecn indukce jako metody vdeckho zkoumn. Vdec vychz z jistch pozorovn a pomoc in-dukce" vytvo obecnou teorii neboli hypotzu, kter je vyjdenm tchto fakt; meme napklad pozorovat pt relac ve vztahu (i) a na jejich zklad zformu-lovat hypotzu (2). V tomto slova smyslu nen indukce nim jinm ne jakmsi zdravm sudkem z dan situace; matematik by ji ale oznail za empirick vsledek nebo dohady.

    Vechno si ozejmme na dalm pkladu. Nech p(n) oznauje poet roz-klad sla ra, tedy poet rznch zpsob, jakmi je mon zapsat n ve form soutu kladnch celch sel, nezvisle na jejich poad. Protoe slo 5 je mon takto rozloit prv sedmi zpsoby, a sice

    1 + 1 + 1 + 1 + 1 = 2 + 1 + 1 + 1 = 2 + 2 + 1 = 3 + 1 + 1 = 3 + 2 = 4 + 1 = 5, dostvme p(5) = 7. Nkolik prvnch hodnot nahldneme velice snadno:

    p(l) = l, p( 2) = 2, p(3) = 3, p( 4) = 5, p( 5) = 7. Na tomto mst bychom mohli podlehnout pokuen zformulovat na zklad indukce hypotzu, e posloupnost p(2), p(3),... generuje pvosla. Pro jej oven vypoteme p(6), a ejhle, p(6) = 11, nae domnnka se potvrzuje!

    [Dal slo p(7) je ale bohuel rovno 15, take cel hypotza se nm hrout a musme zat znovu. O slech p(n) je znmo, e jsou dosti komplikovan, i kdy S. Ramanujanovi se podailo o nich odhadnout a dokzat celou adu pozoruhodnch tvrzen. Dal informace najdete v knize G. H. Hardy, Ramanujan (London: Cambridge University Press, 1940), kapitoly 6 a 8. Viz t st 7.2.1.4.]

    Matematick indukce se od ve uveden obecn indukce podstatn li. Nepracuje s dnmi dohady, ale s pesvdivm dkazem tvrzen; skuten po-moc n dokeme hned nekonen mnoho tvrzen, pro kad n jedno. Indukc" je nazvna jen proto, e se nejprve musme njak rozhodnout, co budeme

  • 1.2.1 MATEMATICK INDUKCE 13

    dokazovat, a teprve pot ji meme aplikovat. V tto knize budeme dkazy matematickou indukc oznaovat prv pomoc samotnho slova indukce.

    Vztah (2) meme dokzat tak geometricky. Na obrzku 3 vidme pro n = 6 celkem n2 bu-nk, rozdlench do skupin po 1 + 3 H b (2n 1) bukch. V zvren analze meme ale tento obrzek pokldat za dkaz" jen tehdy, pokud ukeme, e je mon tuto konstrukci provst pro vechna n, a tento postup je v podstat stejn jako dkaz indukc.

    Pi naem dkazu vztahu (2) jsme pouili jen speciln ppad (b); ukzali jsme pouze, e z prav-divosti tvrzen P(n) vyplv i pravdivost P(n + + 1). To je dleit jednoduch ppad, se kterm se budeme setkvat asto, ale hned v dalm pkladu si ukeme slu cel metody jet lpe. Nadefinujeme si Fibonacciho posloupnost Fo, F2, ... podle pravidla, e Fo = 0, Fi = 1 a kad dal slo je soutem dvou pedchzejcch. Cel posloupnost zan tud sly 0, 1, 1, 2, 3, 5, 8, 13, . . . ; podrobnji ji budeme vyetovat v sti 1.2.8. Nyn dokeme, e pokud je 0 rovno plat

    Fn < (3) pro kad kladn cel slo n. Tento vztah ozname P(n).

    Jestlie n = 1, pak F\ = 1 = (jp = take krok (a) je splnn. V kroku (b) si nejprve uvdomme, e plat tak P(2), protoe F2 = 1 < 1.6 < (j)1 = 2_1. Nyn, pokud jsou pravdiv vechna tvrzen P(l), P(2), . . . , P(n) a pokud je n > 1, vme zejmna, e je pravdiv P(n 1) a P(n), take Fn - i < n~2 a F n < Tyto dv nerovnosti dle seteme a dostaneme:

    Fn+1 = Fn_i + F n < n~2 + 4T-1 = n~2(l + ) (4) slo (j) m jednu dleitou vlastnost, pro kterou jsme si je ostatn v tomto pkladu vybrali:

    1 + 0 = (5) Dosadme-li nyn (5) do (4), dostvme Fn+i < co je tvrzen P(n +1). Krok (b) jsme tedy zvldli a pomoc matematick indukce jsme dokzali i poadovan tvrzen (3). Vimnte si, e krok (b) jsme zde provdli dvma rznmi zpsoby: pro n = 1 jsme platnost tvrzen P(n + 1) dokzali pmo, zatmco pro n > 1 jsme ji vyuili induktivn metodu. Tento postup byl nutn proto, e pi n = 1 bychom se odvolvali na tvrzen P(n 1) = P(0), kter nen definovno.

    Pomoc matematick indukce meme tak dokazovat rzn vlastnosti algo-ritm. Uvaujme nsledujc zobecnn Euklidova algoritmu: Algoritmus E (Rozen Euklidv algoritmus). Jsou-li dna dv kladn cel sla man, vypoteme jejich nejvtho spolenho dlitele a souasn dv cel, nikoli vak nutn kladn sla a a 6, pro kter plat am -\-bn = d. El. [Inicializace.] Piate o! b 1, a bf 0, c ra, d n.

    11

    9

    7

    5

    3

    1

    Obr. 3. Souet lichch -sel je vdy tvercem

  • 14 ZKLADN PRINCIPY 1.2.1

    E2. [Dlen.] Nech q a, r budou nepln podl a zbytek (v tomto poad) pi dlen c slem d. (To znamen, ec = gd + r a O < r < d . )

    E3. [Je zbytek nulov?] Pokud v 0, algoritmus kon; v tomto ppad je am -f-+ bn = d, jak jsme potebovali.

    E4. [Nov cyklus.] Piate c d, d r, t a', a' a, a t - qa, t i/, b' b, b t - qb a jdte zpt na krok E2. | Jestlie z tohoto algoritmu vypustme promnn a, 6, a'a 6' a jestlie namsto

    pomocnch promnnch c a d pouijeme m a n , dostvme n star znm algoritmus 1.1E. Nov verze um ovem o nco vce, protoe stanovuje koeficienty a a 6. Dejme tomu, e m = 1769 a n = 551; z algoritmu postupn dostvme (vdy po kroku E2):

    a' a b' b c d Q r 1 0 0 1 1769 551 3 116 0 1 1 - 3 551 116 4 87 1 - 4 - 3 13 116 87 1 29

    - 4 5 13 -16 87 29 3 0

    Odpov je sprvn: 5 x 1769 - 16 x 551 = 8845 - 8816 = 29, co je nejvt spolen dlitel sel 1769 a 551.

    Problm je ovem dokzat, e tento algoritmus funguje sprvn pro vechna sla man. Mohli bychom se pokusit o uplatnn metody matematick indukce, piem za P(n) bychom povaovali vrok: Algoritmus E funguje sprvn pro vechna n a pro vechna cel m." Tento postup ale nen pln jednoduch a musme pi nm dokzat jet nkolik tvrzen navc. Po chvilce zkoumn pijdeme na to, e musme dokzat jist tvrzen o promnnch a, 6, a'a 6', a sice e po proveden kroku E2 vdy plat rovnosti:

    a'm + b'n c, am + bn = d. (6)

    Platnost tchto vztah meme dokzat tak, e si ovme jejich platnost pi prvnm zahjen kroku E2, a pot prokeme, e se v kroku E4 jejich platnost nezmn. (Dkaz viz cvien 6.)

    Nyn ji meme indukc nad promnnou n dokzat platnost algoritmu E: Pokud je m nsobkem n, funguje algoritmus zejm sprvn, protoe skonme hned po prvnm prchodu kroku E3. Tento ppad nastv tak pi n = 1. Jedin zbvajc ppad je, kdy n > 1 a m nen nsobkem n. V takovm ppad algoritmus pokrauje a po prvnm prchodu piad c n, d r; protoe r < n, meme podle indukce pedpokldat, e konen hodnota d je nejvtm spolenm dlitelem sel n ar. Podle zdvodnn v sti 1.1 maj dvojice {m, n} a {n, r} stejn spolen dlitele, a zejmna pak nejvtho spolenho dlitele. Tud d je nejvtm spolenm dlitelem m a n, a am + bn = d podle (6).

    Ve ve uvedenm dkazu jsme kurzvou zvraznili jednu frzi, kter uka-zuje, pro se v dkazech indukc tak asto pouv pirozen jazyk. Pi induknm kroku (b) nekme toti: Nyn budeme pedpokldat P( 1), P(2),..., P(n) a na

  • 1.2.1 MATEMATICK INDUKCE 15

    Obr. 4. Vvojov diagram Algoritmu E doplnn o tvrzen, kter dokazuj jeho sprv-nost

    zklad tchto pedpoklad dokeme P(n +1)", ale asto jen jednodue: Nyn dokeme P(n); podle indukce meme pedpokldat, e plat P(k) pro kad 1 < k < n".

    Jestlie se na tento postup podvme z trochu jinho pohledu, meme vytvoit obecnou metodu, pomoc n dokeme platnost jakhokoli algoritmu. Mylenka spov v tom, e vezmeme vvojov diagram uritho algoritmu a kadou ze ipek ozname jistm tvrzenm o aktulnm stavu, kter plat pi prchodu vpotu po ipce. Na obrzku 4 byla tato tvrzen oznaena jako AI, A2, . . . , A6. (Vechna tato tvrzen vychzej krom toho tak z pedpokladu, e promnn maj celoseln hodnoty; ten jsme pro sporu msta vynechali.) Tvrzen Al definuje prvotn pedpoklady pi vstupu do algoritmu, zatmco A4 popisuje tvrzen, kter chceme dokzat o vstupnch hodnotch a, b a d.

    Obecn metoda znamen dokzat pro kad rmeek ve vvojovm dia-gramu, e:

    pokud je tvrzen u ipky, kter vede do rmeku, platn ped provedenm operace v rmeku, pak jsou po proveden operace ^ platn tak vechna tvrzen na odpovdajcch ipkch vedoucch ven z rmeku.

    To znamen, e musme napklad dokzat, e pokud ped provedenm E2 plat A2 nebo A6, pak po E2 plat A3. (V tomto ppad je A2 dokonce silnj tvrzen ne A6, ili z A2 pmo vyplv A6. Sta nm tedy dokzat, e pokud plat A6 ped E2, vyplv z toho AS po E2. Vimnte si pitom, e podmnka

  • 16 ZKLADN PRINCIPY 1.2.1

    d > O je v tvrzen A6 nutn jen proto, aby operace E2 mla smysl.) Dle musme ukzat, e z AS a r = 0 vyplv A4, e z AS a r ^ O vyplv A5 atd. Vechny tyto potebn dkazy jsou velice jednoduch.

    Jakmile dokeme vrok (7) pro kad rmeek, znamen to, e jsou vechna uveden tvrzen platn pi kadm prchodu algoritmem. Nyn meme provst indukci podle potu krok vpotu, tedy podle potu ipek prochzench ve vvojovm diagramu. Pi prchodu prvn ipky, kter vede z bodu Start", je tvr-zen AI pravdiv, protoe pedpokldme, e vstupn hodnoty vdy odpovdaj specifikacm; je tedy i tvrzen u prvn prochzen ipky sprvn. Je-li pravdiv tvrzen u n-t ipky, pak podle (7) je pravdiv i tvrzen uveden u (n + l)-n ipky.

    Vyjdeme-li z tohoto obecnho postupu, je zejm, e problm dkazu sprv-nosti uritho algoritmu se v podstat redukuje na nalezen vhodnch tvrzen, ktermi ozname ipky ve vvojovm diagramu. Po proveden tohoto vodnho kroku ji nen nijak tk dokzat, e z kadho tvrzen u ipky vedouc do rmeku logicky vyplv tak platnost tvrzen u ipky vedouc z rmeku ven. Ve skutenosti je i vytvoen tchto tvrzen pomrn snadnm, rutinnm kolem, musme pouze zvldnout nkolik obtnjch; jestlie tak v naem pkladu mme dna tvrzen Al, A4 a A6, je ji jednoduch napsat i A2, AS a A5. Nejvce prce nm d vytvoit tvrzen A6\ zbytek ji meme doplnit mechanicky. O podrobn formln dkazy algoritm, tedy o dkazy s takovou mrou podrobnosti jako na obrzku 4, se proto ve zbytku knky nesname. Sta vdy vyslovit jen klov vodn tvrzen, kter uvdme buto ve vkladu za algoritmem, nebo v zvorkch jako poznmky v textu samotnho algoritmu.

    Tento postup dkazu sprvnosti algoritm m ale jet jednu dleitj strnku: zrcadl se v nm zpsob, jakm cel algoritmus chpeme. Vzpomete si, e u v sti 1.1 jsme tene upozornili, aby algoritmus neetli jako texty z krsn literatury; doporuujeme jednou nebo dvakrt prost vhodn algo-ritmus s vzorkem dat. Pi takovm prchodu algoritmem ji lovk me lpe zformulovat potebn tvrzen. Zmrem autora je ukzat, e sprvnosti algoritmu porozumme a v okamiku, kdy si v hlav dme dohromady vechna tvrzen, stejn jako na obrzku 4. Tento hel pohledu m vznamn psychologick d-sledky pro sprvn sdlen algoritmu od jedn osoby ke druh: vyplv odtud, e klov tvrzen, kter nelze snadno odvodit dnm automatem, musme pi vy-svtlovn algoritmu druhmu lovku vdy jasn, explicitn vyslovit. Vrtme-li se nyn k Algoritmu E, je teba pipomenout tak tvrzen A6.

    Vnmav ten si ale jist viml jedn trhliny v naem poslednm dkazu algoritmu E. Neukzali jsme toti, e algoritmus skon; pouze jsme dokzali, e pokud opravdu skon, d sprvn vsledek!

    (Poznamenejme napklad, e Algoritmus E m smysl i v ppad, e v nm budou promnn m, n, c, d a r moci nabvat hodnot ve form u + v \/2, kde u a v jsou cel sla. Promnn q, a, 6, a', b' nabvaj i nadle celoselnch hodnot. Pokud metodu zahjme teba s hodnotami m = 1 2 - 6 > / 2 a n = 20 10 y/2, vypoteme pomoc n nejvtho spolenho dlitele" d = 4 2 \/2, kde a = + +2, b = 1. Dkazy tvrzen Al a A6 zstvaj platn i pi takto rozench

  • 1.2.1 MATEMATICK INDUKCE 17

    pedpokladech; pravdiv jsou tedy i vechna tvrzen pi jakmkoli provdn procedury. Jestlie ale zaneme s hodnotami m = 1 a n = \f2, vpoet nikdy neskon (viz cvien 12). Z dkazu tvrzen Al a A 6 tud logicky nevyplv, e by byl algoritmus konen.)

    Dkaz ukonen algoritmu se obvykle provd samostatn. Ve cvien 13 si ale ukeme, e ve uvedenou metodu meme v ad dleitch ppad rozit takovm zpsobem, e dkaz konenosti dostaneme jako jej vedlej produkt.

    Nyn jsme tedy dvakrt dokzali platnost Algoritmu E. Z psn logickho pohledu bychom se mli pokusit tak dokzat platnost prvnho algoritmu tto sti textu, tedy Algoritmu I; pomoc Algoritmu I jsme ve skutenosti ukzali sprvnost jakhokoli dkazu indukc. Pokusme-li se ale dokzat, e Algoritmus I pracuje sprvn, dostvme se k rozporu - to meme dokzat opt jedin indukc! Ocitme se tak v kruhu.

    V posledn analze vidme, e kadou vlastnost celch sel musme dokzat indukc, protoe samotn cel sla jsou v podstat definovna indukc. Vtu, e libovoln kladn cel slo n se buto rovn 1, nebo se k nmu dostaneme od 1 opakovanm pitnm 1, meme tud povaovat za axiom; to u sta k dokzn sprvnosti Algoritmu I. [Podrobn vklad zkladnch princip celch sel najdete v lnku "On Mathematical Induction", kter napsal Leon Henkin, AMM 67 (1960), 323-338.]

    Mylenka matematick indukce je tud zce spjata s pojmem samotnho sla. V Evrop aplikoval metodu matematick indukce na pesn dkazy italsk vdec Francesco Maurolico, a to v roce 1575. S dalmi zdokonalenmi piel zatkem 17. stolet Pierre de Fermat, kter ji nazval metodou nekonenho poklesu". Pojem tak ve svch pozdjch pracch zeteln pouv Blaise Pascal (1653). Samotn vraz matematick indukce" vytvoil zejm A. De Morgan zatkem 19. stolet. [Viz The Penny Cyclopaedia 11 (1838), 465-466; AMM 24 (1917), 199-207; 25 (1918), 197-201; Arch. Hist. Exact ScL 9 (1972), 1-21.] Dal vklad matematick indukce najdete v knize G. Plya: Induction and Analogy in Mathematics (Princeton, N.J.: Princeton University Press, 1954), kapitola 7.

    Ve popsan formulace dkazu algoritm pomoc tvrzen a indukce je v podstat dlem R. W. Floyda. Ten poukzal, e smantickou definici kad operace v programovacm jazyku je mon formulovat jako logick pravidlo, kter pesn stanovuje, z jakch tvrzen platnch ped jeho provedenm dokeme jak tvrzen po jeho dokonen [viz "Assigning Meanings to Programs", Proc. Symp. Appl. Math., Amer. Math. Soc., 19 (1967), 19-32]. Podobn mylenky vyslovil nezvisle Peter Naur, BIT 6 (1966), 310-316, kter tato tvrzen nazval "gen-erl snapshots", obecn snmky". Dleitm zpesnnm je pojem invariant", kter zavedl C. A. R. Hoare; viz napklad CACM 14 (1971), 39-45. Pozdj autoi se rozhodli Floydv smr mylenek obrtit a navrhli vychzet z tvrzen, kter mus platit po dokonen operace, a odvodit z nj nejslab podmnku", kter mus platit naopak ped operac. Dky tomuto postupu je mon objevit i nov algoritmy, kter jsou zaruen sprvn; sta vyjt ze specifikac poa-dovanch vsledk a postupovat zpt. [Viz E. W. Dijkstra, CACM 18 (1975), 453-457; A Disciplin of Programming (Prentice-Hall, 1976).]

  • 18 ZKLADN PRINCIPY 1.2.1

    Princip vodnch tvrzen se v jist zroden podob objevil ji roku 1946, kdy souasn H. H. Goldstine a J. von Neumann pedstavili vvojov diagramy. Ty ve sv pvodn form obsahovaly rmeky tvrzen", "assertion boxes", kter velmi pipomnaj tvrzen na obrzku 4. [Viz John von Neumann, Collected Works 5 (New York: Macmillan, 1963), 91-99. Viz t prvn poznmky A. M. Turinga k verifikaci, uveden v lnku Report of a Conference on High Speed Automatic Calculating Machines (Cambridge Univ., 1949), 67-68 a obrzky; petitno s komentem od F. L. Morrise a C. B. Jonese v Annals of the History ofComputing 6 (1984), 139-143.]

    Pi vysvtlen teorie program vrazn pome, pokud bhem konstrukce vyslovme jedno nebo dv tvrzen

    o stavu stroje ve vhodn vybranch mstech. ... V extrmn podob teoretick metody

    jsou tvrzen podloen pesnm matematickm dkazem. V extrmn podob experimentln metody

    je program sputn na stroji s rznmi potenmi podmnkami a je prohlen za sprvn pokud tvrzen plat v kadm z ppad.

    Ob metody maj sv slab strnky. A. M. TURING, Ferranti Mark I Programming Manual (1950)

    CVIEN 1. [05] Vysvtlete, jak upravit postup dkazu matematickou indukc v ppad, e

    budeme chtt dokzat njak tvrzen P(n) pro vechna nezporn cel sla - tedy nikoli pro n = 1, 2, 3, . . . , nbr pro n = 0, 1, 2, . . .

    2. [15] V nsledujcm dkazu mus bt chyba. Najdete ji? Vta. Nech a je libo-voln kladn slo. Pro vechna kladn sla n je a n _ 1 = 1. Dkaz. Je-li n = 1, pak an~l = a 1 _ 1 = a = 1. Pokud dle podle indukce pedpokldme, e vta plat pro 1, 2, . . . , n, dostvme

    (n+i)i n an~l X a71"1 1 X 1 av = a = : 7T: = - = 1 a(n-1)-1 l ' take vta plat i pro n + 1."

    3. [18] Nsledujc dkaz indukc je zdnliv sprvn, ale pro n = 6 dv z njakho dvodu na lev stran | + | + ^ + ^ + ^ = prav stran | = |. Najdete, kde je v nm chyba? Vta.

    + + l = 3 _ 1 1 x 2 2 x 3 ( n - l ) x n 2 n

    Dkaz. Provedeme indukc podle n. Pro n = 1 je zejm 3/2 - 1/n = 1/(1 x 2); a za pedpokladu, e pro n vta plat, je

    1 . 1 1 1x2 ( n - l ) x n n x ( n + l)

    = - + f i ^ = - 2 n \n n + 1 / 2

    = 1 3 1 / 1 1 \ 3 1 2 n n(n +1) 2 n \n n + 1/ 2 n + 1'

    4. [20] Dokate, e Fibonacciho sla spluj krom vztahu (3) tak podmnku Fn >

  • 1.2.1 MATEMATICK INDUKCE 19

    5. [21] Prvoslo je cel slo > 1, kter je beze zbytku dliteln jen jednikou a sebou samm. Na zklad tto definice a metody matematick indukce dokate, e kad cel slo > 1 je mon zapsat jako souin jednoho nebo vce prvosel. (Prvoslo povaujeme za souin" jedinho prvosla, a sice sebe samho.)

    6. [20] Dokate, e pokud plat vztah (6) bezprostedn ped krokem E4, plat tak po jeho proveden.

    7. [23] Zformulujte a indukc dokate pravidlo pro souty l2, 22 - l2, 32 - 22 + l2, 42 _ 32 + 2 2 _ J2 5 2 _ 42 + 32 _ 2 2 + X2 a t d

    8. [25] (a) Indukc dokate nsledujc vtu, kterou okolo roku 100 vyslovil Nico-machus: l 3 = 1, 23 = 3 + 5, 33 = 7 + 9 + 11, 43 = 13 + 15 + 17 + 19 atd. (b) Pomoc tohoto vsledku dokate pozoruhodn vztah l 3 + 23 H I- n3 = (1 + 2 H [- n)2.

    [Poznmka: Zajmavou geometrickou interpretaci tohoto vzorce pinesl Warren Lush-baugh; je znzornna na obrzku 5 a byla zveejnna v Math. Gazette 49 (1965), 200. Mylenka souvis s Nicomachovou vtou a obrzkem 3. Dal dkazy na prvn pohled" najdeme v literatue: Martin Gardner, Knotted Doughnuts (New York: Freeman, 1986), kapitola 16; J. H. Conway a R. K. Guy, The Book of Numbers (New York: Copernicus, 1996), kapitola 2.]

    Strana = 5 + 5 + 5 + 5 + 5 + 5 = 5 - ( 5 + l )

    Strana = 5 + 4 + 3 + 2 + 1 + 1 + 2 + 3 + 4 + 5 = = 2.(1 + 2 + - - - + 5 )

    Plocha = 4. l 2 + 4.2-22 + 4.3-32 + 4 .4 .4 2 + + 4 5 52 =

    = 4 - (l3 + 2 3 + +5 3 )

    Obr. 5. Geometrick verze cvien 8(b)

    9. [20] Dokate indukc, e pokud je 0 < a < 1, pak (1 a)n > 1 na. 10. [M22] Dokate indukc, e pokud je n > 10, pak 2n > n3. 11. [M30] Naleznte a dokate jednoduch vzorec pro souet

    l 3 33 53 (~l)n(2n + l)3 l4 + 4 34 + 4 + 54 + 4 (2n + l)4 + 4

    12. [M25] Ukate, jak je mon zobecnit Algoritmus E podle popisu v textu tak, e do nj budou vstupovat hodnoty tvaru u + vy/2, kde u a v jsou cel sla, piem vpoty bude mon opt provdt elementrnm zpsobem (tedy bez nekonenho desetinnho rozvoje y/2). Dokate ale, e pro m = l a n = \p vpoet neskon.

    13. [M23] Rozite Algoritmus E: pidejte do nj novou promnnou T a na zatek kadho kroku doplte operaci T T + l " . (Promnn T tvo tud nco jako hodiny a pot poet provedench krok.) Na zatku pedpokldejte, e je T rovno nule, take tvrzen Al na obrzku 4 se zmn na ra > 0, n > 0, T = 0". Podobn k tvrzen A2 pidme podmnku T = 1 " . Ukate, jak do jednotlivch tvrzen doplnit dal pod-mnky, aby z libovolnho tvrzen Al, A2, A6 vyplvalo T < 3n a aby nadle bylo mon provst dkaz indukc. (Jinmi slovy: vpoet mus skonit za nejve 3n krok.)

    H b -

  • 20 ZKLADN PRINCIPY 1.2.1

    14. [50] (R. W. Floyd.) Vytvote potaov program, kter na vstupu pevezme pro-gram v njakm programovacm jazyce a nepovinn tak jist tvrzen, a dle se pokus doplnit zbvajc tvrzen potebn k dkazu sprvnosti programu. (Tento program by se napklad ml pokusit dokzat platnost Algoritmu E, piem vyjde jen z tvrzen Al, A4, a A6. Dal vklad viz pspvky R. W. Floyd a J. C. King, IFIP Congress proceedings, 1971.)

    15. [VM28] (Zobecnn indukce.) V textu jsme si ukzali, jak dokzat vrok P(n) zvisl na jedinm celm sle n, ale neukzali jsme si, jak dokzat vrok P(m, n) zvisl na dvou celoselnch promnnch. Tyto dkazy se asto provdj njakou formou dvojit indukce", kter bv na pohled dosti nesrozumiteln. Ve skutenosti existuje ale jeden dleit princip, kter je obecnj ne jednoduch indukce a kter je mon pout nejen na tuto situaci, ale i na dkaz vrok nad nespoetnmi mnoinami, napklad dokzat P(x) pro vechna reln x. Tomuto obecnmu principu se k dobr uspodn.

    Nech -

  • 1.2.2 SLA, MOCNINY A LOGARITMY 21

    st (f) m u potaovch algoritm dal uplatnn: Poda-li se nm zobrazit kad stav vpotu x do prvku f(x) z jist dobe uspodan mnoiny S takovm zpsobem, e pi kadm kroku vpotu se stav x zmn do stavu y s tm, e f(y) -< < f ( x ) i Pak algoritmus mus skonit. Tento princip je zobecnnm tvrzen o klesajc posloupnosti hodnot n, pomoc nho jsme dokzali konenost Algoritmu 1.1E.]

    1.2.2. sla, mocniny a logaritmy Zanme nyn vklad numerick matematiky podrobnm pohledem na sla, s nimi pracujeme. Cel sla jsou vechna cel sla

    . . . , - 3 , - 2 , - 1 , 0 , 1 ,2 ,3 , . . . (zporn, nula a kladn). Racionln slo je podlem dvou celch sel p/q, kde q je kladn. Reln slo je pak veliina x s desetinnm rozvojem

    x = n + 0.d\d2ds ..., (i)

    kde n je cel slo, kad z di je slice od 0 do 9 a posloupnost slic nekon nekonen mnoha devtkami. Vyjden (i) znamen, e

    di d2 dk di d2 dk 1 n + 0 + 1 0 0 + ' + 1 0 ^ ^ X < n + 1 0 + 1 0 0 + - + F + 10^' ( 2 )

    pro vechna kladn cel sla h. Pklady relnch sel, kter nejsou racionln, jsou

    7r = 3,14159265358979..., podl obvodu kruhu a jeho prmru; 0 = 1,61803398874989..., takzvan zlat ez (1 + y/E)/2 (viz st 1.2.8).

    V ploze A je uvedena tabulka dleitch konstant s pesnost tyiceti dese-tinnch mst. O obecn znmch vlastnostech stn, odtn, nsoben, dlen a porovnvn relnch sel nemusme podrobnji hovoit.

    Obtn problmy z celch sel se asto daj vyeit pechodem do mnoiny relnch sel a obtn problmy z relnch sel se asto daj vyeit v jet obecnj td, kter se k komplexn sla. Komplexn slo je veliina 2 ve tvaru 2 = x -i- iy, kde x a y jsou reln sla a i je speciln jednotka, kter spluje rovnost i2 = 1. sla x a, y oznaujeme za relnou st a imaginrn st sla z; jeho absolutn hodnotu definujeme jako

    |*| = \J x2 + y2. (3) slo komplexn sdruen k z ]ez = x iy, piem zz x2 + y2 = \z\2. Teorie komplexnch sel je v ad ohled jednodu a krsnj ne teorie relnch sel, ale obvykle je povaovna za ltku pro pokroil. V tto knize se proto soustedme na reln sla a vjimkou budou jen situace, kdy by reln sla byla zbyten komplikovan.

    Jsou-li u a v reln sla, piem u < v, pak je uzaven interval [u.. v] mnoina takovch relnch sel x, pro n u < x < v. Oteven interval (u..v) je podobn mnoina relnch sel x, pro n u < x < v. Analogicky meme definovat i polooteven intervaly [u.. v) a (u.. v]. Na oteven stran intervalu

  • 22 ZKLADN PRINCIPY 1.2.1

    me bt tak u rovno oo nebo v rovno oo, take interval nem doln, resp. horn hranici; zpis (00.. 00) vyjaduje tud mnoinu vech relnch sel a interval [0.. 00) pedstavuje vechna nezporn reln sla.

    V tto sti textu budeme psmenem b oznaovat kladn reln slo. Pokud je n cel slo, definujeme mocninu bn podle znmch pravidel:

    6 = 1, bn = bn~lb pokud n > 0 , bn = bn+l/b pokud n< 0. (4)

    Indukc snadno dokeme platnost pravidel umocovn:

    bx+y = bxby^ (bx)y = bxy, (5)

    pro kad cel sla x a y. Pokud je u kladn reln slo a m je kladn cel slo, pak vdy existuje

    prv jedno kladn reln slo v takov, e vm = u; nazvme je m-t odmocnina sla u a oznaujeme v = y/u.

    Nyn nsledujcm zpsobem definujeme vraz br pro racionln slo r = = p/q:

    = V i . (6)

    Tato definice, kterou vyslovil Mikul z Oresme (okolo 1360), je sprvn, pro-toe baptaq = bpIq a protoe pravidla umocovn plat i pro libovoln zvolen racionln sla x a y (viz cvien 9).

    Nakonec definujeme bx pro vechna reln sla x. Nejprve uvaujme, e b > 1; pokud je x dno vztahem (1), chceme, aby platilo

    bn+d\/ 10H hdfc/ 10fc < fc* < bn+d1/lO+'+dk/\Qk+\/lQk ^

    Tm jednoznan definujeme bx jako kladn reln slo, protoe rozdl mezi pravou a levou stranou nerovnosti ve vztahu (7) je +

  • 1.2.2 SLA, MOCNINY A LOGARITMY 23

    Jako pklad meme z rovnic (8) odvodit, e log10 2 = 0,30102999... (io)

    Z pravidel umocovn vyplv, e logb(xy) = logb x + log6 y, pokud x > 0, y > 0 (n)

    a dle logb(cV) = V log6 c> pokud c > 0. (i2)

    Vztah (10) ilustruje takzvan dekadick logaritmy, kter dostvme pi z-kladu rovnm 10. Mon si eknete, e v potach budou uiten spe dvojkov logaritmy (o zkladu 2), protoe vtina pota pracuje s dvojkovou neboli binrn aritmetikou. Dvojkov logaritmy jsou skuten velmi uiten, ale pe-devm z jinho dvodu: potaov algoritmy provdj asto rozhodovn mezi dvma vtvemi vpotu. S dvojkovmi logaritmy se setkvme tak asto, e pro n zavedeme zkrcenou notaci a budeme pst

    lgx = log2x, (13) ve tvaru, kter zavedl Edward M. Reingold.

    Pichz tedy otzka, jestli je njak vztah tak mezi Igx a log10; natst takov vztah existuje,

    logio x ~ logio(2,gx) = (lg*)(log102), podle (9) a (12). Je tedy \gx = log10x/log102, a obecn plat

    1 l ogf>X ( \ logc x ~ - (*4) logfeC Vztahy (11), (12) a (14) tvo zkladn pravidla pro manipulaci s logaritmy.

    Ukazuje se ovem, e se ve vtin ppad nepot nejlpe ani se zkla-dem 10, ani se zkladem 2. Jednodu vlastnosti maj logaritmy pi zkladu jistho relnho sla oznaovanho jako e = 2,718281828459045... Logaritmy pi zkladu e se nazvaj pirozen logaritmy a zapisujeme je jako

    lnx = logex. (15) Tato dosti zvltn definice (fakticky jsme ani nedefinovali e) nebude zejm teni pipadat jako pli pirozen" logaritmus; pesto je ale funkce lna: skuten mnohem pirozenj, a budeme s n proto pracovat. Pirozen logaritmy (s mrnmi pravami a bez spojen s mocninami) objevil John Napier ped rokem 1590, dvno ped objevenm jinch druh logaritm. Nsledujc dva pklady, kter ten najde v kad uebnici dife-rencilnho potu, nm ponkud osvtl, pro si (x, l/x) Napierovy logaritmy skuten zasluhuj oznaen pirozen": (a) Na obrzku 6 tvo stnovan plo- (i"o) cha ln x. (b) Jestlie banka vyplc z vkladu sloen Q b r # pirozen logaritmus roky s mrou r, piem je pipisuje pololetn, je

  • 24 ZKLADN PRINCIPY 1.2.1

    ron vnosnost kadho dolaru vkladu rovna (l+r/2)2 dolarm; pi tvrtletnm pipisovn dostvme (1 + r/4)4 dolar a pi dennm pipisovn (1 + r/365)365 dolar. Pokud by bylo mon pipisovat roky spojit, dostali bychom za kad dolar vkladu pesn er (pomineme-li zaokrouhlovac chyby). Dnes, ve vku po-ta, ji mnoz banki skuten doshli omezujc hranice.

    Zajmavou historii princip logaritm a umocovn napsal v srii lnk F. Cajori, AMM 20 (1913), 5-14, 35-47, 75-84, 107-117, 148-151, 173-182, 205-210.

    Na zvr tto sti textu si ukeme, jak logaritmy potat. Jedna metoda pmo vyplv ze vztahu (7): Vyjdeme-li z rovnosti bx = y a umocnme ob jej strany na 10fc, zjistme, e je

    bm < ylk < 6m + 1, (16)

    pro njak cel slo m. Pro zjitn logaritmu y nm nyn sta umocnit y na toto velk slo a zjistit, mezi ktermi mocninami (m, m+1) sla b le vsledek; vraz m/lOk pak tvo odpov s pesnost na k desetinnch mst.

    Mrnmi pravami tto zjevn nepraktick metody dostaneme jednodu a rozumnj postup. Ukeme si, jak vypotat log10 x a jak odpov vyjdit ve dvojkov soustav, tedy

    log10 x = n + 6i/2 + 62/4 + 63/8 + - (17) Nejprve posuneme desetinnou rku v sle x doleva nebo doprava tak, abychom mli 1 < x/10n < 10; tm zjistme celou st vsledku, n. Pro zjitn 61, 62, polome nyn XQ = #/10n a pro k > 1,

    bk = 0, xk = if x\_! < 10; bk = 1, xk = xj^/ lO, if x\_x > 10.

    Sprvnost tto procedury vyplv ze vztahu

    L < X K = X2K/10^(N+^+.-.+W^) < W ( I G )

    kter plat pro k = 0,1,2,..., jak snadno dokeme indukc. V praxi se ovem musme spokojit jen s konenou pesnost, a nememe

    tedy stanovit pesn xk= x\_x. Namsto toho polome xk = x\_x zaokrouhlen nebo oznut na jist poet desetinnch mst. Takto napklad vypoteme log10 2 na tyi vznamn slice:

    x0 = 2,000; X l = 4,000, 61 = 0 ; = 1,845, b6 = 1

    = 1,600, 62 = 1; x7 = 3,404, b7 = 0 = 2,560, 63 = 0; = 1,159, b8 = 1

    X4 = 6,554, 64 = 0; x9 = 1,343, b9 = 0 x5 = 4,295, 65 = 1; x10 = 1,804, 610 = 0 atd.

    Dky vpoetnm chybm se ve vpotu kumuluje odchylka; skuten zaokrouh-len hodnota xi0 je 1,798. Tak nakonec vypoteme 619 nesprvn a msto sprvn

  • 1.2.2 SLA, MOCNINY A LOGARITMY 25

    hodnoty z (10) dostaneme dvojkov slo (0,0100110100010000011...)2, kter odpovd destkovmu vyjden 0,301031...

    U jakkoli potebn metody je nutn zjistit, k jak velk vpoetn chyb vedou dan omezen. Ve cvien 27 zjistme horn hranici chyby; pi vpotu na tyi platn slice je tak chyba v hodnot logaritmu zaruen men ne 0,00044. My jsme ovem zskali pesnj odpov, a to zejmna proto, e sla x0, x\, x2 a xs byla stanovena pesn.

    Tato metoda je jednoduch a docela zajmav, nepedstavuje ale nejlep zpsob vpotu logaritm na potai. Jinou metodu si ukeme ve cvien 25.

    CVIEN 1. [00] Jak je nejmen kladn racionln slo? 2. [00] Je 1 -}- 0,239999999... platn desetinn rozvoj? 3. [02] Kolik je ( - 3 ) " 3 ?

    4. [05] Kolik je (0,125)"2 /3? 5. [05] Definovali jsme reln sla pomoc desetinnho rozvoje. Uvete, jak by bylo

    mon je definovat pomoc dvojkovho rozvoje, a napite definici, kterou byste nahradili vztah (2).

    6. [10] Nech x = m 4- 0,did2 a j / = n 4- 0,eie2... jsou reln sla. Uvete pravidlo, podle nho z desetinnho rozvoje zjistte, jestli je x = y, x < y nebo x > y.

    7. [M23] Jsou-li dna dv cel sla x a y, dokate pravidla umocovn; vyjdte z definice ve vztahu (4).

    8. [25] Nech ra je kladn cel slo. Dokate, e kad kladn reln slo u m prv jednu ra-tou odmocninu, a uvete metodu pro postupn vpoet hodnot n, d\, d,2, v destkovm rozvoji odmocniny.

    9. [M23] Jsou-li dna dv racionln sla xat/, dokate pravidla umocovn z ped-pokladu, e tato pravidla plat pro cel sla x a y.

    ((if/qju/vyv = (((fip/qju/vyy _ = ((&p/qyy- = ypu a tedy (5P/9)/v = _ ypu/qv j g m e dokzali druh pravidlo. Nyn dokeme prvn pravidlo z druhho: yp/q^u/v _ ^l/qv^pv^pl/qv^qu _ /qvyv+qu _ tf>/q+u/v

    10. [18] Dokate, e log10 2 nen racionln slo. 11. [10] Pokud je b = 10 a x log102, na kolik desetinnch mst pesnosti musme

    znt hodnotu x, abychom mohli urit prvn ti desetinn msta destkovho rozvoje bx? [Poznmka: Mete vyut vsledk cvien 10.] 12. [02] Vysvtlete, pro vztah (10) vyplv ze vztahu (8).

    13. [M23] (a) Je-li dno kladn reln slo x a kladn cel slo n, dokate nerovnost y/1 + x 1 0.

    16. [00] Jak meme vyjdit log10 x s vyuitm ln x a ln 10? 17. [05] Kolik je lg32? log,, tt? lne? logb 1? logb(-l)?

  • 26 ZKLADN PRINCIPY 1.2.1

    18. [10] Dokate, nebo vyvrate: log8x = \ lgx. 19. [20] Pokud je n cel slo s destkovou reprezentac o 14 slicch, vejde se jeho hodnota do potaovho slova s kapacitou 47 bit a jednm bitem znamnka? 20. [10] Je njak jednoduch vztah mezi sly log10 2 a log2 10? 21. [15] (Logaritmy logaritm.) Vyjdete logb logb x pomoc ln ln x, ln ln 6 a ln b.

    22. [20] (R. W. Hamming.) Dokate, e

    lgx lnx + log10x,

    s men chybou ne 1 %! (Pomoc tabulky pirozench logaritm a dekadickch loga-ritm meme tud zjistit i piblin hodnoty dvojkovch logaritm.) 23. [M25] Uvete geometrick dkaz rovnosti ln xy ln x 4- ln y; vyjdte z obrzku 6. 24. [15] Vysvtlete, jak metodu vpotu logaritm pi zkladu 10 na konci tto sti textu upravte, aby vypotala logaritmus o zkladu 2. 25. [22] Uvaujme binrn (dvojkov) pota a slo x, kde 1 < x < 2. Ukate, e pomoc nsledujcho algoritmu, kter pracuje jen s operacemi posuvu, stn a od-tn, mrn potu mst poadovan pesnosti, meme vypotat piblinou hodnotu y = logb x:

    LI. [Inicializace.] Piate y

  • 1.2.3 SOUTY A SOUINY 27

    29. [VM20] Nech x je reln slo vt ne 1. (a) Pro jak reln slo b > 1 je 61ogbx minimln? (b) Pro jak cel slo b > 1 je minimln? (c) Pro jak cel b > 1 je (6 -I- 1) log6 x minimln?

    30. [12] Zjednodute vraz (lnri) lnn/ lnlnn za pedpokladu e n > 1.

    1.2.3. Souty a souiny Nech ai ,a2 , . . . je libovoln posloupnost sel. asto ns budou zajmat rzn souty neboli sumy, napklad a\ + a2 H han; tento vraz zapeme spornji pomoc nsledujcch dvou ekvivalentnch notac:

    n nebo a v C1)

    j=1 1

  • 28 ZKLADN PR INCIPY 1.2.1

    s nekonen mnoha nenulovmi leny, musme ji pout techniky diferencilnho potu; pesn vznam vztahu (2) je pak

    E a i = u E fliV i t E R(j) V RU) 7 V RU) '

    0

  • 1.2.3 SOUTY A SOUINY 29

    Nhradu j za p(j) nememe ale provst pro vechny nekonen sumy. Plat-li p(j) = cj jako ve, je tato operace vdy platn, ale v jinch ppa-dech musme postupovat opatrn. [Viz napklad T. M. Apotol, Mathematical Analysis (Reading, Mass.: Addison-Wesley, 1957), kapitola 12. Postaujc pod-mnkou obecn platnosti vztahu (5) pro libovolnou permutaci celch sel p(j) je, e existuje suma

    c) Zmna poad sumace:

    X ) H a i 3 = (7) m SU) S(j) R(i)

    Uvaujme nyn velmi jednoduch speciln ppad tto rovnosti: 2

    aii = H + ai R(i) j=1 R(i)

    2 H aio= H a a + ai2'

    j=1 i?(i)

    Podle (7) jsou tyto dv sumy rovn; nekme tm nic jinho, ne

    + a) = hi + (8) R{i) R(i) R(i)

    kde polome bi = au a Ci a^-Operace zmny poad sumace je velice uiten, protoe asto dokeme

    najt jednoduch vyjden sumy au- Pad sumace potebujeme asto zamnit tak v jin obecnj situaci, kdy relace S(j) zvis na i i na j. V takovm ppad meme relaci zapsat jako 5(i, j)u. Zmnu sumac meme vdy provst, pinejmenm teoreticky, nsledujcm zpsobem:

    E = E Y 1 a i ( 9 ) R(i) S(iJ) S'U)

    kde S'(j) je relace existuje cel slo i takov, e plat R(i) a zrove S(i,j)"; dle R'{i,j) je relace plat R(i) a zrove S(i,j)". Mme-li napklad sumu Y17=\ aiji Pak S'U) Je relace existuje cel slo i takov, e plat 1 < i < < n a 1 < j < ", tedy 1 < j < n, a R'{i,j) je relace 1 < i < n a 1 < j < i", ili j < i

  • 30 ZKLADN PRINCIPY 1.2.1

    konenou sumu a pokud je kad nekonen suma konvergentn, zmna poad opt plat. Pro konvergentn nekonen sumy plat vdy zejmna (8).]

    d) pravy defininho oboru. Jsou-li R(j) a S(j) dv libovoln relace, mme

    R(j) St) R(j) nebo S(j) R(j)*S(j) Napklad

    E E aJ=( E ( 1 2 ) 1< j

  • 1.2.3 SOUTY A SOUINY 31

    podle pravidla (d) [viz (12)],

    n ti ti = E E a i (Li + E aiCLi podle (8),

    i=0 j=0 i=0

    = ( E a i ) ( E a A + ( E a i ) p o d l e p r a v i d i a ( a ) V i=o / V j=o / V z=o /

    = ( E a * ) + ( E a * ) podle pravidla (b). \i=o / Vi=o /

    Odvodili jsme tud dleitou identitu

    E > a i = 5 > ) + ?)) (l3) i=0 j=0 \M=0 / M=0 / / Pklad 3 (Souet geometrick posloupnosti). Pedpokldejme, e x 1, n > 0. Potom je

    a + ax H b axn = E ax? podle definice (2), 0

  • 32 ZKLADN PRINCIPY 1.2.1

    = ^ (a + bj) podle definice (2), 0

  • 1.2.3 SOUTY A SOUINY 33

    j i

    = ^ a i [ R ( i ) ] J 2 [ i = P t i ) ] - (18) i 3

    Zbvajc suma podle j je rovna 1, pokud je R(i) pravdiv a pokud pedpokl-dme, e p je permutace pslunch hodnot, jak poaduje vztah (5); zstv nm tud J^i c o Je Tm jsme dokzali (5). Pokud p nen takovouto permutac, zjistme z (18) skutenou hodnotu X^R(p(j)) ap(j)-

    Nejznmjm specilnm ppadem zvorkov notace je takzvan Kronecke-rovo delta

    kj N j i = | o ' V

  • 34 ZKLADN PRINCIPY 1.2.3

    Dal pklad, na nm vidme uitenost sumace s nkolika indexy, je

    y i a3\-in' ljl -Jnl (22)

    J l > >Jn>0 V

    kde a je promnn s n-rozmrnm vektorem index; je-li napklad n = 5, vyjaduje tato notace souet

    AILLLL + 021110 + 022100 -I- 031100 -I- ^32000 + 041000 + 050000-

    (Viz poznmky k rozkladm sel v sti 1.2.1.)

    CVIEN-Prvn skupina 1. [01] Co znamen zpis ]C1 < J < n j ^ w = 3,14? 2. [10] Bez suman notace napite ekvivalent vrazu

    3. [13] Vysvtlete, pro jsou vsledky obou st pedchozho cvien navzdory pra-vidlu (b) rzn.

    4. [10] Bez suman notace napite ekvivalent obou stran rovnosti (10), a to jako sumu sum pro n = 3.

    5. [VM20] Dokate, e pravidlo (a) plat pro libovolnou nekonenou adu, pokud tato ada konverguje.

    6. [VM20] Dokate, e pravidlo (d) plat pro libovolnou nekonenou adu, pokud existuj libovoln ti ze ty sum.

    7. [VM23] Je-li dno cel slo c, dokate, e Ylmj) ai = ac-j, i kdy jsou ob ady nekonen.

    8. [VM25] Najdte pklad nekonen ady, v n neplat rovnost (7). 9. [05] Plat odvozen vztahu (14) i pro n = 1?

    10. [05] Plat odvozen vztahu (14) i pro n = 2? 11. [03] Co bude na prav stran vztahu (14), je-li x = 1?

    13. [10] Na zklad rovnosti (15) a za pedpokladu m

  • 1.2.3 SOUTY A SOUINY 35

    17. [M00] Nech S je mnoina celch sel. Co znamen 1? 18. [M20] Ukate, jak zamnit poad sumace jako ve vztahu (g), je-li R(i) relace n je nsobkem z" a S(i>j) je relace 1 < j < i". 19. [20] emu je rovno Y%=m(aJ ~ a3~0?

    20. [25] Dr. I. J. Matrix pozoroval zajmavou adu rovnost:

    9 x 1 + 2 = 11, 9 x 1 2 + 3 = 111, 9 x 123 + 4 = 1111, 9 x 1234 + 5 = 11111.

    a) Napite tento vynikajc objev pomoc suman notace E -b) V odpovdi na st (a) nepochybn pouvte slo 10 jako zklad destkov sou-

    stavy; vzorec zobecnte tak, aby platil pro soustavu o libovolnm zkladu 6. c) Dokate vzorec odvozen v (b) pomoc vzorc odvozench v textu nebo ve cvien

    16.

    21. [M25] Odvote pravidlo (d) ze vztah (8) a (17). 22 . [20] Uvete pslun analogie k sumanm vztahm (5), (7), (8) a (11), kter

    plat pro souiny. 23. [10] Vysvtlete, pro je v ppad, kdy podmnku R(j) nespluje dn cel slo, vhodn definovat a3 n ulu a ai jako jedniku. 24. [20] Pedpokldejme, e R(j) plat jen pro konen mnoho j. Dokate indukc podle potu celch sel, kter spluj R(j), e logbURij) aj pokud jsou vechna aj > 0 .

    25. [15] Uvaujte nsledujc odvozen; nen v nm njak chyba?

    ( > ) ( ) - E E 2 - t ' - -\ i = 1 / \j=1 J /

  • 36 ZKLADN PRINCIPY 1.2.1

    leny \wjZk Wkj\2 jsou nezporn, a proto slavn Cauchy-Schwarzova nerovnost / n \ / n \ i n 2

    ( E m M ( W M > 5 > \j=i / \j=i / lj=i

    je dsledkem Binetova vzorce.] 31. [M20] Pomoc Binetova vzorce vyjdete sumu J ^ k j < k < n ( u J ~~ uk){vj Vk) po-moc U3V31 u3 a V3' 32. [M20] Dokate, e

    n m n = E aix \... ainn-j=1 i = l l

  • 1.2.3 SOUTY A SOUINY 37

    CVIEN-Druh skupina Determinanty a matice. Nsledujc zajmav problmy jsou ureny pro tene, kter m za sebou alespo vod do determinant a do zklad teorie matic. Determinant je mon vypotat pomoc dvtipn kombinace nsledujcch operac: (a) vytknutm hodnoty z dku nebo sloupce, (b) pitenm nsob