112

Donald E. Knuth Umeni Programovani

Embed Size (px)

DESCRIPTION

Donald E. Knuth Umeni Programovani

Citation preview

  • Recenze:

    esk teka eReading.cz je vlastn tablet s elektronickm paprem. Netradin funkce doplnila monost pjovat

    si e-knihy (ZDARMA) z knihoven. Vkonem i funkcemi pat eReading.cz 4 ke pice ...

  • Donald E. Knuth

    Umn programovn1. dl, Zkladn algoritmy

    Computer Press, a.s.Brno2008

    tiraz.indd 1tiraz.indd 1 27.8.2008 9:58:0727.8.2008 9:58:07

  • Umn programovn1. dl, Zkladn algoritmyDonald E. Knuth

    Computer Press, a.s., 2008. Vydn prvn.

    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, Inc, publishing as AddisonWesley Professional, Copyright 1997 AddisonWesley.

    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 system, 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: AddisonWesley, 1997.Peklad: Computer Press, a.s., 2008.

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

    Objednvky knih:http://[email protected].: 800 555 513

    ISBN 978-80-251-2025-5Prodejn kd: K1463Vydalo 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.

    Peklad: David KrsenskOdborn korektura: Pavel Tpfer, Jan KueraJazykov korektura: Alena LnkovVnitn prava: Petr SojkaSazba: Petr SojkaRejstk: David Krsensk, Petr SojkaOblka: Ivana Mitkov

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

    David Krsensk, Ji Rybika, Petr KlmaOdpovdn redaktor: Radek HylmarTechnick redaktor: Ji MatouekProdukce: Daniela Neasov

    tiraz.indd 2tiraz.indd 2 27.8.2008 9:58:3727.8.2008 9:58:37

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

    na Case Institute of Technologya 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 tynejdokonalej. 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 nejenpro sv ekonomick a vdeck pnosy, ale tak pro sv estetick strnky, dkynim se podob skldn ver nebo hudby. Tato kniha je prvnm z nkolikasvazk, 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 musvnovat jistou prci a as zkladnmu seznmen s slicovm potaem. tentto 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 ukldajdo pamti potae a nsledn vykonvaj.

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

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

    d) Znt alespo trochu potaovou hantrku vdt, co je pam, regis-try, bity, pohybliv dov rka, peteen, software. K vtinvraz, kter nejsou denovny pmo v textu, je uvedena strun denicev 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 pronejmn jeden pota.

  • vi PEDMLUVA

    Celou tuto srii knih se snam pst tak, aby slouila nkolika elm. Knihyjsou pedevm referennmi publikacemi, kter shrnuj poznatky z nkolika dle-itch oblast. Knihy je tak mon vyut jako uebnice k samostatnmu studiunebo pro vysokokolsk kursy pota a informatiky. Pro splnn obou tchtocl jsem do textu zalenil velk mnostv cvien a vtinu z nich jsem doplnili 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 byloskuten zpstupnit tyto techniky programovn i lidem, kte pracuj v jinchoblastech a mohou potae vhodn vyut, ale kte na druh stran nemaj ashledat 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, jakoje vpoet koen rovnice, numerick interpolace a integrace atd., ale podobnmtmatm se zde nijak do hloubky nevnujeme. Numerick programovn potaje velice zajmavou a rychle se rozvjejc oblast poznn a je mu vnovna celada knih. Od zatku 60. let 20. stolet se ale potae stle astji pouvaji pi een problm, v nich se s sly pracuje tm jen nhodou; zde jinevyuvme schopnosti pota provdt aritmetick vpoty, ale schopnostijejich rozhodovn. Stn a odtn i v tchto nenumerickch oblastech pecejen vyuijeme, nsoben a dlen ji mn. Samozejm e i lovk, kter se zajmpedevm o numerick programovn pota, vyuije znalost nenumerickchtechnik, 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 tynejzkladnj techniky, kter se pi programovn daj uplatnit v mnoha rznchsituacch. Pokusil jsem se tyto mylenky sjednotit do jaksi teorie, ale zrovejsem 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 publikacipli irok a techniky programovn jsou jako pojem naopak pli zk. Rdbych proto navrhl, aby se tmata probran v tchto knihch oznaovala jakoanalza algoritm. Tento nzev by ml mt vznam: teorie vlastnost uritchpotaovch algoritm.

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

    Svazek 1. Zkladn algoritmy

    Kapitola 1. Zkladn principyKapitola 2. Informan struktury

    Svazek 2. Seminumerick algoritmy

    Kapitola 3. Nhodn sla

  • PEDMLUVA vii

    Kapitola 4. Aritmetika

    Svazek 3. azen a vyhledvn

    Kapitola 5. azenKapitola 6. Vyhledvn

    Svazek 4. Kombinatorick algoritmy

    Kapitola 7. Kombinatorick vyhledvnKapitola 8. Rekurze

    Svazek 5. Syntaktick algoritmy

    Kapitola 9. Lexikln prohledvnKapitola 10. Lexikln analza

    Svazek 4 hovo o tak rozshlm tmatu, e jej ve skutenosti tvo ti samostatnknihy (svazky 4A, AB a 4C). Pipravuji tak dva dal svazky na specilntmata: 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 jedinmsvazku, ale brzy jsem zjistil, e bude lpe se vnovat jednotlivm tmatm dohloubky, ne je jen peltnout po povrchu. Vsledn rozsah textu znamen,e jedna kad z kapitol obsahuje vc ne dost materilu pro cel semestrlnkurs 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 prozachovn pvodnho slovn kapitol, a tm pdem pro snaz kov odkazy.Plnuji tak zkrcenou verzi svazk 1 a 5, kter by mla slouit jako obecnjreference a/nebo jako studijn materil pro potaov kursy dnho studia;jejm obsahem bude podmnoina materil z cel srie a speciln informacebudou vynechny. I ve zkrcen verzi bude zachovno stejn slovn kapitoljako v kompletnm dle.

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

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

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

  • viii PEDMLUVA

    kamnk pisply svmi drobnmi vsledky desetitisce lid po celm svt. Vzaljsem si proto nov cl: soustedit se na klasick techniky, kter budou dleiti za nkolik destek let, a popsat je tak, jak nejlpe umm. Zejmna jsem sepokusil sledovat historii kadho z tmat a tm vytvoit pevn zklady probudouc pokrok. Pokusil jsem se volit takovou terminologii, kter je strun a jev souladu se souasnm stavem. A pokusil jsem se do textu zahrnout vechnyznm mylenky o programovn sekvennch pota, kter jsou krsn a dajse 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 seznalostmi stedokolsk algebry (snad jen pesko nkter nronj sti);matematicky zdatn ten se zde dozv spoustu zajmavch matematickchpostup souvisejcch s diskrtn matematikou. Tto dvoj rovn vkladu jsemdoshl jednak ohodnocenm kadho ze cvien, mezi nimi jsou zvl vyznaenacvien matematickho charakteru, a tak dky uspodn vtiny st, kdy jsounejdleitj matematick vsledky uvedeny ped pslunm dkazem. Vlastndkazy jsou buto ponechny jako cvien (odpovdi jsou shrnuty do samostatnsti 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 zajmavhomaterilu. Vznamn st publikovanch matematickch teori k programovnpota byla pitom chybn, a proto je jednm z kol tto knky nasmrovattene matematicky sprvnm smrem. A protoe se sm povauji za matema-tika, je moj povinnost udrovat v co nejvt mon me tak matematickousprvnost textu.

    Pro vtinu matematickho vkladu v tchto svazcch sta zkladn znalostidiferencilnho a integrlnho potu, protoe vtina ostatnch potebnch teorije odvozena pmo v textu. Ve vkladu ale obas pouvm sloitj konstrukceteorie 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, setkalo zpsobu vkladu rznch postup. Vhody vvojovch diagram a ne-formlnho popisu algoritm krok za krokem jsou dostaten znm; podrobnjrozbor je uveden napklad v lnku Computer-Drawn Flowcharts z asopisuACM Communications, ronk 6 (z 1963), strnky 555563. 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, algebraickjazyk jako ALGOL nebo FORTRAN, nebo strojov orientovan jazyk. Mnozz dnench potaovch expert nebudou zejm s tmto nzorem souhlasit, alez nsledujcch dvod jsem nakonec dospl k denitivnmu pesvden, e jetoto rozhodnut sprvn:

    a) Kad programtor je siln ovlivnn jazykem, ve kterm pe programy; lidmaj obrovskou tendenci preferovat takov konstrukce, kter jsou v danm

  • PEDMLUVA ix

    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 vjimekkrtk, take by je ml bt schopen zpracovat prakticky jakkoli vhodnpota.

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

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

    e) Vstupem mnoha softwarovch program, popsanch v ad pklad, budetak 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 1970pu sv vlastn programy ve strojovch jazycch nzk rovn jen vjimen,protoe dnen potae jsou dostaten velk a rychl. My se ale v tto kncezamujeme na celou adu problm, u kterch m vznam programovn jakoumn. Nkter kombinatorick vpoty se napklad mus opakovat bilinkrta kad mikrosekunda, o kterou zkrtme vnitn smyku cyklu, znamen sporuzhruba 11,6 dne vpoetnho asu. Podobn m smysl vnovat vt sil i pipsan jakhokoli softwaru, kter se bude pouvat mnohokrt denn v instalacchna mnoha potach, protoe napsat jej musme vdy pouze jednou.

    Mme-li tedy za sebou rozhodnut pro strojov orientovan jazyk, kterz 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 tatokniha jen pro majitele systmu X. Navc pota X bude mt nejspe spousturznch zvltnost, kter jsou vzhledem k ltce uvdn v tto knize naprostoirelevantn a kter bychom si takto navc museli vysvtlit; a nakonec vrobcepotae X pijde za dva roky s potaem X + 1 nebo dokonce 10X a potaX ji nebude nikoho zajmat.

    Tomuto dilematu jsem se vyhnul tm, e jsem se pokusil vytvoit idelnpota, kter pracuje podle velmi jednoduchch pravidel (ta se mete nauitdejme tomu za pouhou hodinu), ale kter zrove velice pipomn skutenpotae. Nen dvod, pro by se studenti mli bt uit se vlastnosti vce nejednoho potae; jakmile zvldnou jeden strojov jazyk, pizpsob se ostatnmji snadno. Tak profesionln programtor se ve sv karie setkv s adourznch strojovch jazyk. Jedinou zbvajc nevhodou tohoto mytickhopotae tedy je, e programy pro nj napsan si jen velmi tko vyzkoume.

  • x 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 dokumentya vybral jsem tak nkter novj prce. V odkazech na literaturu pouvmstandardn 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

    STOC = ACM Symposium on Theory of Computing

    Crelle = Journal fur die reine und angewandte Mathematik

    Citaci uvedenou o dv strnky zpt zkrtm tak napklad na zpis CACM 6(1963), 555563. 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. Pokudjsou za njakm netrivilnm cvienm skryt ciz mylenky, snam se uvst jejichautora. Pslun odkazy na literaturu jsou obvykle uvedeny v doprovodnmtextu dan sti knihy nebo v odpovdi na cvien, ale v ad ppad jsou cvienzaloena na rznm nepublikovanm materilu, ke ktermu ani nelze uvst dalodkazy.

    Pi pprav tchto knih mi samozejm po celou tu dobu pomhala spoustajinch lid, kterm jsem nesmrn zavzn. Dkuji pedevm sv en Jill zajej nekonenou trplivost, za ppravu nkolika ilustrac a za nevslovnou dalpomoc. Dkuji tak Robertu W. Floydovi, kter v edestch letech vraznpomohl zlepit tento materil. Svoj pomoc pisply i tisce jinch sepsat jenjejich jmna by zabralo celou dal knku! Mnoz z nich laskav svolili k vyuitjejich dosud nepublikovan prce. Moje vzkumn prce na Caltech a Stanfordupodporovala po dlouh lta nadace National Science Foundation a Oce ofNaval Research. Vynikajc pomoc a spoluprci mi poskytuje tak vydavatelstvAddison-Wesley, a to hned od zahjen projektu v roce 1962. Nejlpe ale vempodkuji, kdy jim dnes mohu ukzat, e jsem s jejich podklady mohl napsatprv takovou knihu, jakou ode mne oekvali.

    Pedmluva ke tetmu vydn

    Po deseti rocch vvoje systm potaov sazby TEX a METAFONT si dnesmohu splnit sen, se kterm jsem tyto prce zanal: mohu tyto systmy aplikovat

  • PEDMLUVA xi

    na cel dlo Umn programovn. Pinejmenm cel text tto knihy se nachzuvnit mho osobnho potae v takov elektronick podob, kterou bude monsnadno pizpsobit i budoucm zmnm v technologich zobrazovn a tisku. Dkynovmu uspodn jsem do textu mohl zalenit doslova tisce zlepen, na kterjsem u dlouho ekal.

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

    Kniha Umn programovn je vak stle ve vvoji. U nkterch st uvidteproto symbol ve vstavb, kterm se omlouvm, e dan materil nen

    zcela aktuln. uplky mm pln dleitho materilu, kter chci zalenit doposlednho, nejslavnjho, tvrtho vydn Svazku 1, ale nejprve musm dokonitsvazky 4 a 5 a jejich vydn nechci odkldat vce, ne kolik je absolutn nezbytn.

    Vtinu nronch prac na pprav novho vydn zajistili Phyllis Winklera Silvio Levy, kte zodpovdn pepsali a upravili text druhho vydn, a dleJerey Oldham, jen pevedl tm vechny pvodn ilustrace do formtu META-POST. Opravil jsem veker chyby, na kter mne teni druhho vydn upo-zornili (a tak nkolik chyb, kterch si nikdo neviml), a pokouel jsem senezanst 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, typograckou nebo historickou chybu proto s radost vyplatm 2,56dolaru 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, California D. E. K.duben 1997

    Za posledn dv desetilet se vci zmnily.

    BILL GATES (1995)

  • 1. Zatek

    2. Petistr. xvxvii

    3. N 1

    4. Zanikapitolu N

    5. Je zaj-mav? 6. N 2?

    7. Zanidal st

    8. ?

    9. 2 + 2=5?

    10. Zkontrolujvzorce

    11. Peskomatematiku

    12. Vypracujcvien

    13. Porovnejodpovdi

    14. Jsi unaven?

    15. Jdi spt

    16. Zvit N

    17. N 12?

    18. Voln zbava

    Ano

    Ne

    Ano

    Ne

    Konec kapitoly

    Ne

    Ne

    Ano

    Poprv

    Ano

    Ne

    Ano

    AnoNe

    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 doprovodnhovvojovho diagramu budeme pouvat i na jinch mstech knky.)

    2. Pette si Poznmky ke cvienm na stranch xvxvii.

    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, pokudne, pejdte na krok 6.

    6. Je N 2? Pokud ne, pejdte na krok 16; pokud ano, projdte pesto textkapitoly. (Kapitoly 1 a 2 obsahuj dleit vodn materil a tak pehledzkladnch technik programovn. Pinejmenm proltnte st kapitolyo pouvanch notacch a o potai MIX.)

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

    8. Je slo sti kapitoly oznaeno znakem ? Pokud ano, mete tuto stpi prvnm ten vynechat (vnuje se jistmu specilnmu tmatu, kter jezajmav, 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 chybyoznamte autorovi). Pejdte na krok 12.

    11. Pokud je tato st kapitoly pln matematickch vpot, radji popsanodvozovn vbec nette. Seznamte se ale s nejdleitjmi vsledky, kterjsou obvykle uvedeny na zatku, nebo ikmm psmem naopak na konciobtnj sti.

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

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

  • xiv PROCEDURA PRO TEN TTO SRIE KNIH

    na jejich vypracovn jste nemli as. Poznmka: Ve vtin ppad jenejrozumnj si nejprve pest odpov ke cvien n a teprve pot zatpracovat na cvien n+1, take kroky 1213 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 stdal 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 koupiliSvazek 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 defaut unique de tous les ouvragescest detre trop longs.

    (Spolenm nedostatkem vech dlje jejich plin dlka.)

    VAUVENARGUES, Reexions, 628 (1746)

    Knihy jsou malichern. Jen ivot je ndhern.

    THOMAS CARLYLE, Journal (1839)

  • POZNMKY KE CVIENM

    Cvien v tto srii knih jsou vhodn jak k samostatnmu studiu, tak i provuku. Nauit se njak tma jen s tm, e si nco peteme, ale nepokusmese uplatnit poznatky na konkrtn problmy, je velmi obtn, ne-li nemon,protoe teprve pi cvien pln pochopme, co vechno jsme se nauili. Navcnejlpe se naume to, na co pijdeme sami. Proto tvo cvien velkou sttohoto dla; pokouel jsem se v nich ale zachovat co nejvce informativn hodnotya 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 jimeen problmu asi zabere jinak mohou vechny problmy nakonec vynechat.Klasickm pkladem tto situace je kniha Dynamic Programming , kterou napsalRichard Bellman; je to dleit, prkopnick dlo, v nm jsou ovem problmyna konci nkterch kapitol sepsny pod jednotn nadpis Exercises and ResearchProblems, tedy Cvien a vzkumn problmy; zde jsou a krajn trivilnotzky zaazeny pmo doprosted sloitch a dosud nevyeench problm.k se, e se pr jednou nkdo Dr. Bellmana zeptal, jak pozn bn cvienod 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 velmisnadn cvien, je ovem z ady dvod rozumn; abych teni uetil nep-jemn dilema, kter otzky jsou kter, oznail jsem je selnm hodnocenm, jedenuje 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 praktickyvdy udlat jen z hlavy.

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

    20 Prmrn sloit problm, na kterm si vyzkoute zkladn porozumnprobran ltce; k pln odpovdi mete ale potebovat patnct advacet minut.

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

  • xvi POZNMKY KE CVIENM

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

    50 Vzkumn problm, kter dosud nebyl uspokojiv vyeen (pokud byloautorovi znmo v dob vzniku textu), i kdy se o jeho een mnozpokoueli. Pokud se vm poda najt odpov k takovmuto typuproblmu, rozhodn ji publikujte; tak autora tchto strnek velicepot, jestlie mu o een dte co nejdve vdt (za podmnky, eje een sprvn).

    Interpolac tto logaritmick stupnice meme snadno vysvtlit i jin -seln hodnocen. Vraz 17 bude napklad oznaovat cvien, kter je o ncovce ne prmrn jednoduch. Problmy s hodnocenm 50 , kter pozdji njakten vye, mohou bt v dalch vydnch knihy i v erratech na Internetu (vizstrana iv) oznaeny slem 45 .

    Zbytek po dlen selnho hodnocen pti vyjaduje objem potebn rutinnprce. Vyeit cvien oznaen slem 24 me tedy trvat dle ne cviens 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 obtnodhadnout, jak tk bude hledat een pro nkoho jinho; kad m navcpirozen vlohy pro urit typy problm a u ne pro jin. Doufm, e je totohodnocen dobrm odhadem obtnosti; sla berte ale jen jako rmcov vodtko,nikoli jako njak absolutn indiktor.

    Knihu jsem psal pro tene s rznm stupnm matematickho vzdlna nadn; nkter ze cvien jsou proto urena jen pro matematicky zdatnstudenty. Cvien, k jeho een je poteba vce matematickho mylen i mo-tivace, ne kolik je bn u lid, kte se zajmaj jen o programovn samotnchalgoritm, m k hodnocen pipojeno psmenoM. Pokud jsou ke cvien nezbytnznalosti diferencilnho potu nebo jin vy matematiky, kter nen v ttoknize odvozena, je oznaeno psmeny VM . Samotn oznaen VM ovemneznamen, e by cvien nutn muselo bt obtn.

    Ped nktermi cvienmi je uvedena ipka, x; ta uvd problmy, kterjsou obzvlt nzorn a jejich een je mon teni doporuit. Neoekvmsamozejm, e kad ten i student vypracuje pln vechna cvien, a protojsem takto oznail ta nejcennj. (Tm vs ale nechci odradit od tch ostatnch!)Kad ten by se ovem ml pinejmenm pokusit o vyeen vech problms hodnocenm 10 a menm; podle ipek se me rozhodnout, kterm ze cvieno 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 vyeitsami nebo pokud na vyeen tohoto konkrtnho problmu skuten nemte as.A pot , co pijdete na svoje vlastn een, nebo se o to alespo pokuste, mepro vs bt vzorov odpov pouenm a nvodem. een uveden v knize jsouasto 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 eendozvte 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 knizeuvedena; v tomto ppad bude autor poten, pokud se s nm o een podlte.V dalch vydnch knihy se pak podle monost objev zdokonalen een spoluse jmnem eitele.

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

    Shrnut kd:

    x DoporuenM Matematicky orientovanVM Vyaduje vy matematiku

    00 Okamit odpov10 Jednoduch (do jedn minuty)20 Prmrn (tvrt hodiny)30 Stedn obtn40 Semestrln projekt50 Vzkumn problm

    CVIEN

    x 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 hrozivhotypu 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 POIROT, v Vrada v Orient Expressu (1934)

  • OBSAH

    Kapitola 1 Zkladn principy . . . . . . . . . . . . . . . . . . . . 1

    1.1. Algoritmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Matematick zklady . . . . . . . . . . . . . . . . . . . . . . . 10

    1.2.1. Matematick indukce . . . . . . . . . . . . . . . . . . . . 111.2.2. sla, mocniny a logaritmy . . . . . . . . . . . . . . . . . 211.2.3. Souty a souiny . . . . . . . . . . . . . . . . . . . . . . 271.2.4. Celoseln funkce a teorie sel . . . . . . . . . . . . . . . . 391.2.5. Permutace a faktorily . . . . . . . . . . . . . . . . . . . 451.2.6. Binomick koecienty . . . . . . . . . . . . . . . . . . . . 521.2.7. Harmonick sla . . . . . . . . . . . . . . . . . . . . . . 751.2.8. Fibonacciho sla . . . . . . . . . . . . . . . . . . . . . . 791.2.9. Generujc funkce . . . . . . . . . . . . . . . . . . . . . . 871.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 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1241.3.1. Popis potae MIX . . . . . . . . . . . . . . . . . . . . . 1241.3.2. Assembler pro MIX . . . . . . . . . . . . . . . . . . . . . 1441.3.3. Aplikace pi vpotu permutac . . . . . . . . . . . . . . . 164

    1.4. Nkter zkladn techniky programovn . . . . . . . . . . . . . . . 1861.4.1. Podprogramy . . . . . . . . . . . . . . . . . . . . . . . 1861.4.2. Koprogramy . . . . . . . . . . . . . . . . . . . . . . . . 1931.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 . . . . . . . . . . . . . . . . . . . . . . . 2151.4.5. Historie a literatura . . . . . . . . . . . . . . . . . . . . . 229

    Kapitola 2 Informan struktury . . . . . . . . . . . . . . . . . . 232

    2.1. vod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2322.2. Linern seznamy . . . . . . . . . . . . . . . . . . . . . . . . . 238

    2.2.1. Zsobnky, fronty a oboustrann fronty . . . . . . . . . . . . 2382.2.2. Sekvenn alokace . . . . . . . . . . . . . . . . . . . . . 2442.2.3. Spojov alokace . . . . . . . . . . . . . . . . . . . . . . 254

  • OBSAH xix

    2.2.4. Kruhov seznamy . . . . . . . . . . . . . . . . . . . . . . 2732.2.5. Obousmrn propojen seznamy . . . . . . . . . . . . . . . 2802.2.6. Pole a ortogonln seznamy . . . . . . . . . . . . . . . . . 298

    2.3. Stromy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3082.3.1. Prchod binrnm stromem . . . . . . . . . . . . . . . . . 3182.3.2. Reprezentace stromu binrnm stromem . . . . . . . . . . . . 3342.3.3. Jin reprezentace stromu . . . . . . . . . . . . . . . . . . 3482.3.4. Zkladn matematick vlastnosti strom . . . . . . . . . . . . 362

    2.3.4.1. Voln stromy . . . . . . . . . . . . . . . . . . . . 3632.3.4.2. Orientovan stromy . . . . . . . . . . . . . . . . . 372*2.3.4.3. Knigovo nekonen lemma . . . . . . . . . . . . 382*2.3.4.4. Vet strom . . . . . . . . . . . . . . . . . . . 3862.3.4.5. Dlka cesty . . . . . . . . . . . . . . . . . . . . 399*2.3.4.6. Historie a literatura . . . . . . . . . . . . . . . . . 406

    2.3.5. Seznamy a uvolovn pamti . . . . . . . . . . . . . . . . 4082.4. Vcensobn propojen struktury . . . . . . . . . . . . . . . . . . 4242.5. Dynamick alokace pamti . . . . . . . . . . . . . . . . . . . . 4352.6. Historie a literatura . . . . . . . . . . . . . . . . . . . . . . . . 457

    Odpovdi na cvien . . . . . . . . . . . . . . . . . . . . . . . . . 466

    Ploha A Tabulky selnch veliin . . . . . . . . . . . . . . . . . 619

    1. Zkladn konstanty (destkov) . . . . . . . . . . . . . . . . 6192. Zkladn konstanty (osmikov) . . . . . . . . . . . . . . . 6203. Harmonick sla, Bernoulliho sla, Fibonacciho sla . . . . . . 621

    Ploha B Rejstk notac . . . . . . . . . . . . . . . . . . . . . . 623

    Rejstk a slovnek pojm . . . . . . . . . . . . . . . . . . . . . 628

  • 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 aritmetickoua selnou povahu, nikoli algebraickou a analytickou. To je ovem chyba.

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

    a ve skutenosti me po pijet odpovdajcch opaten podvat vsledkyi 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, emusme 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 trochuzpehzel. V anglickm slovnku Websters New World Dictionary se toto slovoobjevilo a v roce 1957; do t doby jsme zde nalezli jen jeho star podobualgorism s jet starm vznamem, kterm bylo provdn aritmetickch v-pot s arabskmi slicemi. Za stedovku toti abakist potali na abakua algorist pomoc algorism. V obdob renesance byl ale pvod tohoto slova ne-jasn a prvn lingvist se pokoueli vysvtlit je rznmi kombinacemi, napkladalgiros [bolestn]+arithmos [slo]; jin tvrdili, e slovo pochz od kastilskhokrle Algora. Nakonec ale historikov matematiky nalezli skuten pvod slovaalgorism: pochz ze jmna slavnho perskho matematika a autora uebnic,kter se jmenoval Abu Abd Allah Muh. ammad ibn Musa al-Chwarizm (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 Khwarizm) a oblast Chorezm se nachz v povod ekyAmu-Darji jin od tohoto moe. Al-Chwarizm napsal slavn arabsk text Kitabal-jabr wal-muqabala (Pravidla pro odvozovn a srovnvn); ze samotnhonzvu knihy, kter se systematicky vnovala een linernch a kvadratickchrovnic, pak pochz dal dleit slovo, algebra. [Bli pojednn o ivota dle al-Chwarizmho najdete v lnku H. Zemanek, Lecture Notes in ComputerScience 122 (1981), 181.]

  • 2 ZKLADN PRINCIPY 1.1

    Tvar i vznam pvodnho slova algorism se ale postupn posunul a jakvysvtluje slovnk Oxford English Dictionary slovo prolo mnostvm pseudo-etymologickch zkomolen, mimo jin nedvnm slovem algoritmus, kter sevdecky zamuje s eckm pvodem slova aritmetika. Jestlie si uvdomme,e lid dvno zapomnli originln pvod slova, nen tk tento posun od slovaalgorism k algoritmus pochopit. Jeden z prvnch nmeckch matematickchslovnk, Vollstandiges mathematisches Lexicon (Leipzig: 1747), denuje slovoAlgoritmus nsledovn: Pod tmto pojmem vyskytuj se vznamy ty typ arit-metickch vpot, jmenovit stn, odtn, nsoben a dlen. Latinskmvrazem algorithmus innitesimalis se v t dob oznaovaly zpsoby vpots 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 kterje uveden v Euklidov dle Zklady (Kniha 7, vta 1 a 2). Nen od vci si nynEuklidv algoritmus uvst:

    Algoritmus E (Euklidv algoritmus). Jsou-li dna dv kladn cel sla ma n, najdte jejich nejvtho spolenho dlitele, tedy nejvt kladn cel slo,kterm jsou beze zbytku dliteln sla m i n.E1. [Nalezen zbytku.] Vydlte m slem n a nech r je zbytek. (Znamen to, e

    0 r < n.)E2. [Je zbytek roven nule?] Pokud r = 0, algoritmus kon a n je odpov.E3. [Redukce.] Piate m n, n r, a vrate se na krok E1.

    Euklides samozejm neuvdl svj algoritmus v pesn tomto znn. Natomto zpise si pouze ilustrujeme, jakm zpsobem budeme uvdt i ostatnalgoritmy v tto knize.

    Kad rozebran algoritmus zde dostane psmenn oznaen (v pedchzej-cm pkladu to bylo E) a jednotliv kroky maj oznaen stejnho psmene nsle-dovanho slic (E1, E2, E3). Kapitoly knihy jsou rozdleny do st a v kadsti sta k identikaci algoritmu jen jeho psmeno; pokud se ale odvolvme naalgoritmus z jin sti knihy, doplnme i slo sti. Nyn se napklad nachzmev sti 1.1, a proto ve stejn sti knihy budeme Euklidv algoritmus nazvatjen jako Algoritmus E, zatmco v dalch stech to bude Algoritmus 1.1E.

    Kad krok algoritmu, jako napklad krok E1, zan krtkou frz v hrana-tch zvorkch, kter co nejstrunji vystihuje podstatn vznam kroku. Stejnoufrzi najdeme obvykle tak v doprovodnm vvojovm diagramu, jeho pkladje na obrzku 1, take ten si innost algoritmu me lpe pedstavit.

    E1. Nalezen zbytku E2. Je zbytek roven nule? E3. RedukceNe

    Ano

    Obr. 1. Vvojov diagram Algoritmu E

  • 1.1 ALGORITMY 3

    Za tmto strunm shrnutm nsleduje popis, kter pomoc slov a symbolvyjaduje provdnou akci i operaci nebo njak rozhodovn. Mohou zde btuvedeny tak komente v zvorkch, jako je v kroku E1 druh vta. Ty obsahujrzn vysvtlujc informace a asto popisuj jist invarianty neboli nemnnvlastnosti promnnch, ppadn cle, kter je teba v tomto kroku splnit. Ne-popisuj tak akce vlastnho algoritmu, ale co nejvce pomhaj teni pi jehopochopen.

    ipka v kroku E3 je ze veho nejdleitj operace, a sice nahrazen,nkdy nazvan tak piazen nebo substituce: m n znamen, e hodnotupromnnm nahradme aktuln hodnotou promnn n. Pi zahjen algoritmu Eobsahuj hodnoty promnnch m a n pvodn zadan sla, ale pi jeho skonenji v nich budou obvykle jin hodnoty. ipka tak odliuje operaci nahrazen odrelace rovnosti: nekme Nech m = n, ale mohli bychom se zeptat, Je m == n? Znamnko = oznauje tedy podmnku, na kterou se meme ptt(testovat), zatmco vyjaduje akci (operaci), kterou je mon provst.Operaci zven n o jedniku zapeme tud vrazem n n + 1 (tete nbude nahrazeno za n + 1 nebo do n zapeme n + 1). Vraz promnn vzorec pak obvykle znamen, e vypoteme vzorec na zklad souasnchhodnot zapsanch v promnnch a pot vsledkem nahradme dosavadn hod-notu promnn uveden vlevo od ipky. Lid bez znalost prce s potaemmvaj sklony vyjadovat operaci zven n o jedniku vtou n bude rovno n++1 a zapisovat ji jako n n+1; tato symbolika vede ovem jen ke zmaten,protoe je v rozporu se standardnmi zvyklostmi, a proto ji nepouvejte.

    Vimnte si, e v kroku E3 je vznamn i poad jednotlivch akc: nechm n, n r m naprosto jin vznam ne nech n r, m n, protoeu druhho uvedenho zpisu se pedchoz hodnota n ztrat, a nememe ji tedyzapsat do m. Druh sekvence operac je tedy ekvivalentn zpisu nech n r,m r. Piazen stejn veliiny do nkolika promnnch meme vyjditnkolika ipkami po sob a napklad msto n r, m r zapsat n m r. Vmnu hodnot dvou promnnch meme strun zapsat Vymnitm n; stejou operaci meme denovat tak pomoc nov promnn t, se kterounapeme: Nech t m, m n, n t.

    Kad algoritmus zan krokem o nejnim sle, obvykle krokem 1, a dalkroky provd v bnm sekvennm poad, nen-li eeno jinak. V kroku E3je napklad uveden pkaz vrate se na krok E1, kter zejmm zpsobemdenuje poad krok ve vpotu. V kroku E2 je ped operac uvedena podmnkaPokud r = 0; je-li tedy r 6= 0, zbytek pkazu ji neplat a dn operace seneprovd. Mohli bychom doplnit dal vtu, kter je ji ale redundantn: Pokudr 6= 0, pejdte na krok E3.

    Siln vertikln ra na konci kroku E3 oznauje konec algoritmu, zakterm opt pokrauje bn text.

    Nyn jsme tedy rozebrali prakticky vechny konvence pouvan v tto knizepro zpis algoritm, jen s vjimkou notace indexovanch poloek, kter denujprvky uspodanho pole. Dejme tomu, e mme n veliin, v1, v2, . . . , vn; namstozpisu vj budeme asto j -t element oznaovat pomoc notace v[j]. Podobn

  • 4 ZKLADN PRINCIPY 1.1

    zpis a[i, j] nahrazuje nkdy notaci s dvojitm indexem, aij . Promnn bvajtak oznaovny identiktorem z nkolika psmen, napklad TEMP me btnzev promnn pro doasn uloen vypoten hodnoty, PRIME[K] me btK-t prvoslo apod.

    Tolik tedy k form algoritm a nyn zkusme jeden provst . Na tomtomst je ale teba tene upozornit, e se algoritmy nedaj st jako textyv krsn literatue; pi takovto lehk etb bychom tko pochopili, o co v nmjde. Algoritmu musme vit a nejlpe jeho vznam pochopme tak, e si jejvyzkoume. ten by si ml ke kadmu algoritmu vzt tuku a papr a zkusitsi jej ihned projt. Obvykle bude nartnut hotov funkn pklad, jindy si jejten snadno sestav sm. Je to jednoduch a bezbolestn zpsob, jak danalgoritmus 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 innostalgoritmu, podle znmho kola hrou.) Dlen m slem n je v tomto p-pad jednoduch, snad a pli jednoduch, protoe nepln podl je roven nulea zbytek je 119. Mme tedy r 119. Pokraujeme krokem E2, a protoe r 6=6= 0, neprovdme dnou operaci. V kroku E3 piadme m 544, n 119.Je zejm, e pokud bylo pvodn m < n, bude prvn podl v kroku E1 vdynula, a algoritmus tak v dalm kroku fakticky vymn promnn m a n, i kdyponkud tkopdnm zpsobem. Mohli bychom doplnit nov krok:

    E0. [Zajistit m n.] Pokud je m < n, vymte m n.Pro samotn algoritmus by to neznamenalo dnou podstatnou zmnu, jenbychom ho tm mrn prodlouili a zhruba v polovin ppad bychom zrovezkrtili dobu jeho provdn.

    Vrtme-li se zpt do kroku E1, zjistme, e 544/119 = 4 + 68/119, taker 68. Podmnka v E2 tak opt neplat a v kroku E3 piadme m 119,n 68. Pi dalm prchodu dostvme r 51 a nsledn m 68, n 51.Jet jeden prchod d vsledek r 17 a m 51, n 17. Nakonec dlme 51slem 17 a konen mme r 0, take algoritmus v kroku E2 skon. Nejvtspolen dlitel sel 119 a 544 je 17.

    To je tedy algoritmus. Modern vznam slova algoritmus je hodn podobnvrazm jako recept, proces, metoda, technika, procedura, postup, blboly, jenslovo algoritmus znamen pece jen troku nco jinho. Algoritmus je nejenkonenou mnoinou pravidel, kter popisuj posloupnost operac pro een jis-tho typu problm, ale zrove mus splovat pt dleitch vlastnost:

    1) Konenost. Algoritmus mus vdy po konenm potu krok skonit. Po-psan algoritmus E tuto podmnku spluje, protoe po proveden kroku E1 jehodnota promnn r men ne n; pokud tedy r 6= 0, hodnota promnn nse v ptm prchodu krokem E1 sn. Kad klesajc posloupnost kladnchcelch sel mus jednou skonit, a proto se i krok E1 pi kad dan hodnotn provd jen po konen poet opakovn. Poznamenejme ale, e poet krok(prchod) me bt libovoln velk; pi vhodn zvolench velkch hodnotchm a n se krok E1 me provst teba vce ne milionkrt.

  • 1.1 ALGORITMY 5

    (Proceduru, kter vykazuje vechny charakteristick vlastnosti algoritmu,ale kter nemus splovat podmnku konenosti, meme nazvat vpoetn me-toda.Euklides pvodn vytvoil nejen algoritmus vpotu nejvtho spolenhodlitele dvou sel, ale tak velmi podobn geometrick postup pro konstrukcinejvt spolen mry dlek dvou seek; pokud jsou ale dlky obou zada-nch seek nesoumiteln, tato vpoetn metoda neskon. Jinm pklademneukonen vpoetn metody je reaktivn proces, kter nepetrit reaguje napodnty ze svho prosted.)

    2) Uritost. Kad krok algoritmu mus bt pesn denovn a pro kadppad v nm mus bt s uritost a jednoznanost popsny provdn operace.Algoritmy v tto knce budou (doufejme) tuto podmnku splovat, jsou alenapsny v pirozenm jazyce, take se me stt, e ten neporozum pesnzmrm autora. Pro pekonn tchto obt s jednoznanou interpretac se algo-ritmy zapisuj ve formln denovanch programovacch jazycch neboli pota-ovch jazycch, kde m kad pkaz pesn uren vznam. Cel ada algoritmbude v tto knize popsna jak v bnm, tak i v potaovm jazyce. Vyjdenjist vpoetn metody v potaovm jazyce je oznaovno jako program.

    Kritrium uritosti u kroku E1 v algoritmu E vyjaduje, e ten pesnrozum, co znamen vydlit slo m slem n a stanovit zbytek. Pokud ale m a nnejsou kladn cel sla, nen pesn vklad tto operace jednotn: jak je zbytekpo dlen8 dleno? A jak je zbytek 59/13 dleno nulou? Kritrium uritostizde tedy mimo jin znamen, e musme ped provedenm kroku E1 zkontrolovat,zda jsou hodnoty m a n vdy kladn cel sla. Na zatku je tato podmnkasplnna dky pedpokladu; po proveden kroku E1 je ji r urit nezporn celslo, a pokud se dostaneme na krok E3, mus bt zrove nenulov. Take slam a n jsou skuten pi dlen vdy kladn a cel, jak potebujeme.

    3) Vstup. Kad algoritmus m nula nebo vce vstup: to jsou veliiny, kterdo algoritmu zadme ped jeho zahjenm nebo kter nateme dynamicky zabhu. Tyto vstupy se pebraj z uren mnoiny objekt. V algoritmu E mmenapklad dva vstupy, jmenovit m a n, a volme je z mnoiny kladnch celchsel.

    4) Vstup. Algoritmus m tak jeden nebo vce vstup: to jsou veliiny, ktermaj zadan vztah ke vstupm. Algoritmus E m jeden vstup, a to promnnoun denovanou v kroku E2, kter nabude hodnoty nejvtho spolenho dliteleobou vstupnch veliin.

    (e je toto slo skuten nejvtm spolenm dlitelem, to meme snadnodokzat ; podvejme se na dkaz. Po proveden kroku E1 dostvme

    m = qn+ r,

    pro njak cel slo q. Pokud r = 0, je m nsobkem sla n a v takovm ppadje samozejm zrove nejvtm spolenm dlitelem sel m a n. Jestlie r 6= 0,pak jakkoli slo, kter je dlitelem m a n, mus beze zbytku dlit tak mqn == 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.1

    dlitel sel {n, r}. Zejmna pak nejvt spolen dlitel sel {m,n} je stejnjako nejvt spolen dlitel sel {n, r}. Krok E3 proto nezmn odpov na npvodn 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 mlbt 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 dodruh promnn. Tyto operace jsou efektivn, protoe cel sla se daj na papevyjdit konenm zpsobem a protoe existuje nejmn jedna metoda (algo-ritmus dlen) pro dlen jednoho sla druhm. Stejn operace ale nebudouefektivn, pokud za ob hodnoty zvolme libovoln reln sla s nekonenmdesetinnm rozvojem nebo pokud msto nich zadme dlku seky (kterou taknelze pesn stanovit). Jinm pkladem neefektivnho kroku me bt: Pokudje 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. Takovtovta 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. Kadrecept je s nejvy pravdpodobnost konen (i kdy se k, e hrnec, na kterse jen dvme, nezane vait), m njak vstupy (vejce, mouku atd.) a takvstupy (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 denovna jako mn ne 1/8 kvovliky a denice soli by mla bt jasn kadmu; ale kam mme sl pidat nahoru? nebo na stranu? Podobn instrukce jako zlehka promchvejte, dokudnen sms hladk, nebo ohejte koak v mal pnvi jsou dostatenm vysvt-lenm snad jen pro zkuenho fkuchae; algoritmus mus bt ale specikovndo takovho stupn pesnosti, e podle nj me pracovat i pota. I potaovprogramtor se nicmn me studiem kuchaky hodn nauit. (Autor jen tkoodolval pokuen nazvat tento svazek Kuchakou programtora; mon sejednoho dne pokus napsat knihu s nzvem Algoritmy do kuchyn.)

    Nutno poznamenat, e samotn podmnka konenosti nen pro praktickpouit dostaten siln. Aby byl algoritmus uiten, mus skonit nejen pokonenm, 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.328). Tento algoritmus doke tedy vyeitproblm, o kter se iv zajmaj tisce lid na celm svt, ale pesto se memev klidu vsadit, e za svho ivota odpov nepoznme; proveden algoritmutoti trv pmo neskuten mnostv asu, i kdy je sm konen. Vklad natma tak velkch sel, kter jsou ji za hranicemi normlnho chpn, najdetev kapitole 8.

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

  • 1.1 ALGORITMY 7

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

    asto je eenm jednoho stejnho problmu hned nkolik algoritm, z nichmusme vybrat ten nejlep. Tm se dostvme k jedn velice zajmav a souasndleit oblasti analzy algoritm: je-li dn njak algoritmus, stanovte jehovkonovou charakteristiku.

    Uvaujme napklad znovu Euklidv algoritmus a pedpokldejme tuto otz-ku: Pokud je hodnota sla n pevn dan, alem me nabvat libovolnho klad-nho celho sla, jakm prmrnm potem opakovn Tn projde v algoritmu Ekrok E1? Nejprve se musme pesvdit, jestli m tato otzka vbec smysluplnouodpov, protoe se pokoume stanovit prmr z nekonen mnoha hodnot m.Je ale zejm, e ji po prvnm proveden kroku E1 je podstatn pouze zbytek podlen m slem n. Pro zjitn sla Tn nm tedy sta vyzkouet algoritmus prom = 1, m = 2, . . . , m = n, spotat celkov poet proveden kroku E1 a vsledekpodlit slem n.

    Nyn pichz dleit otzka stanoven povahy sla Tn; bude piblin rovno13n, nebo teba

    n? Stanovit odpov na takovouto otzku je neobyejn obtn

    a fascinujc matematick problm, kter dosud nen pln vyeen; podrobnjise mu vnujeme v sti 4.5.3. Pro velk hodnoty sla n je mon dokzat, eje Tn piblin rovno

    (12(ln 2)/2

    )lnn, 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 zpsobmvpotu 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 kvantitativnchovn; pleitostn tak zkoumme, jestli dan algoritmus je nebo nen v jistmslova smyslu optimln. Teorie algoritm je zcela jin tma, kter se zabvpedevm existenc nebo neexistenc efektivnho algoritmu pro vpoet uritchveliin.

    Zatm byl n vklad algoritm pomrn mlo pesn a matematicky orien-tovan ten se me po prvu domnvat, e pedchzejc text je jen velmichatrnm zkladem pro vstavbu jakkoli teorie algoritm. Tuto st textuuzaveme proto strunm popisem jist metody, pomoc n meme pojemalgoritmu pevn zakotvit do sfry matematick teorie sel. Denujeme protoformln vpoetn metodu jako tveici (Q, I,, f), kde Q je mnoina obsahujcpodmnoiny z I a , a f je zobrazen z mnoiny Q do sebe sama. Navc f musbt na podmnoin identick, tedy f(q) mus bt rovno q pro vechna q z .Uveden tyi veliiny Q, I, , f po ad reprezentuj stavy vpotu, vstupy,vstupy a vpoetn pravidla. Kad vstup x v mnoin I denuje nsledujcmzpsobem vpoetn posloupnost x0, x1, x2, . . . :

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

  • 8 ZKLADN PRINCIPY 1.1

    (Poznamenejme, e pokud xk nle do , nle sem i xk+1, protoe v takovmppad je xk+1 = xk.) Nkter vpoetn posloupnost nemus nikdy skonit;algoritmus je pak takov vpoetn posloupnost, kter pro vechna x z I skonv konen mnoha krocch.

    Algoritmus E meme napklad formalizovat nsledujcm zpsobem: nechQ je mnoina vech jednoprvkovch mnoin (n), vech uspodanch dvojic(m,n) a vech uspodanch tveic (m,n, r, 1), (m,n, r, 2) a (m,n, p, 3), kdem, n a p jsou kladn cel sla a r je nezporn cel slo. Nech I je podmnoinavech dvojic (m,n) a nech je podmnoina vech jednoprvkovch mnoin (n).Dle nech funkce f je denovna nsledovn:

    f((m,n)

    )= (m,n, 0, 1); f

    ((n))= (n);

    f((m,n, r, 1)

    )= (m, n, zbytek z m dleno n, 2);

    f((m,n, r, 2)

    )= (n) pokud r = 0, (m,n, r, 3) jinak;

    f((m,n, p, 3)

    )= (n, p, p, 1).

    ()

    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 fmohou bt operace, kter normln smrtelnk nezvldne. Pokud bychom chtliomezit pojem algoritmu jen na elementrn operace, mohli bychom pro Q, I, a f vyslovit napklad nsledujc omezujc podmnky: Nech A je konenmnoina psmen a A je mnoina vech etzc sloench z prvk mnoiny A(tedy mnoina vech uspodanch posloupnost x1x2 . . . xn, kde n 0 a xjnle do A pro kad 1 j n). Mylenkou je zakdovat stavy vpotu doreprezentac pomoc etzc z A. Nyn uvaujme, e N je nezporn cel sloa e Q je mnoina vech (, j), kde nle do A a j je cel slo, 0 j N;nech I je podmnoina mnoiny Q pro j = 0 a je jej podmnoina pro j = N.Pokud a jsou etzce z A, kme, e se vyskytuje v , m-li formu pro njak etzce a . Pro dokonen na denice potebujeme jet funkci f ,kter bude nsledujcho typu, piem ji budou denovat etzce j , j a celsla aj , bj pro jakkoli 0 j < N :f((, j)

    )=(, aj) pokud se j nevyskytuje v ;

    f((, j)

    )=(j, bj) pokud je nejkrat mon etzec, pro kter =j;

    f((,N)

    )=(,N). ()

    Takovto vpoetn metoda je ji zeteln efektivn a zkuenosti ukazuj, eje tak dostaten siln a um provst cokoli, co zvldneme run. Pojem efektivnvpoetn metody je mon formulovat mnoha v podstat ekvivalentnmi zp-soby (napklad pomoc Turingova stroje). Ve uveden formulace je praktickyshodn s denic, kterou popsal A. A. Markov ve sv knize Teorie algoritm[Trudy Mat. Inst. Akad. Nauk 42 (1954), 1376], kterou pozdji upravil a rozil

  • 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 hodnotypromnnchm a n, a sice v operacch t m,m n, n t. Ukate, jak v posloupnostioperac nahrazen vymnit hodnoty ty promnnch (a, b, c, d) na (b, c, d, a). Jinmislovy novou hodnotou promnn a bude pvodn hodnota b atd. Pokuste se pout conejmen poet nahrazen.

    2. [15] Dokate, e na zatku kroku E1 je m vdy vt ne n, s monou vjimkouprvnho proveden kroku.

    3. [20] Upravte Algoritmus E a pro zlepen jeho efektivity z nj odstrate vechnytriviln operace nahrazen jako m n. Tento nov algoritmus zapite v podobnmformtu jako Algoritmus E a nazvte jej Algoritmus F.

    4. [16] Jak je nejvt spolen dlitel sel 2166 a 6099?

    x 5. [12] Dokate, e Procedura pro ten tto srie knih, uveden v pedmluvtohoto svazku, nespluje cel ti z pti podmnek pro sprvn algoritmus! Uvete taknkter rozdly mezi jejm formtem a zpisem Algoritmu E.

    6. [20] emu se rovn T5, tedy prmrn poet proveden kroku E1, pi hodnotn = 5?

    x 7. [M21] Dejme tomu, em je dan a e n me nabvat libovolnho kladnho celhosla; nech dle Um je prmrn poet proveden kroku E1 v Algoritmu E. Dokate,e je veliina Um dobe denovna. M Um njak vztah k Tm?

    8. [M25] Popite efektivn formln algoritmus pro vpoet nejvtho spolenhodlitele dvou kladnch celch selm a n, ve kterm urte j , j , aj , bj jako ve vztazch(3). Nech je vstup vyjden etzcem ambn, tedy m psmen a a za nimi n psmen b.Pokuste se o co nejjednodu een. [Npovda: Vyjdte z Algoritmu E, ale namstodlen provete v kroku E1 piazen r |m n|, n min(m,n).]

    x 9. [M30] Uvaujte dv vpoetn metody C1 = (Q1, I1,1, f1), C2 = (Q2, I2,2, f2).Metoda C1 me napklad oznaovat Algoritmus E ze vztah (2), v nm je aleomezena velikost promnnch m a n, a metoda C2 tvo implementaci Algoritmu Ev potaovm programu. (To znamen, e Q2 me bt mnoina vech stav potae,tedy vech kongurac pamti a registr; f2 bude pak denice jednotlivch strojovchoperac a I2 bude poten stav potae, jeho soust je program pro stanovennejvtho spolenho dlitele i hodnoty m a n.)

    V jazyku teorie mnoin zformulujte denici tvrzen C2 je reprezentac C1 neboliC2 simuluje C1. Intuitivn meme tento vrok vysvtlit tak, e jakoukoli vpoetnposloupnost C1 je mon napodobit i v C2, pouze C2 me pi vpotu provst vtpoet krok a me si ve svch stavech zapamatovat vce informac. (Tak dostanemepsnou interpretaci tvrzen Program X je implementac Algoritmu Y.)

  • 10 ZKLADN PRINCIPY 1.2

    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 sloitmatematick 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 charakteristikalgoritmu. Notace pro popis algoritm je pomrn jednoduch a vysvtlili jsmesi ji ji v pedchzejc sti textu. Pi analze vkonnosti algoritm budemepotebovat dal speciln notace.

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

    Matematick techniky, kter jsou soust analzy algoritm, jsou obvykleponkud 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 denovanch notac, ale takpodrobn ilustrace rznch typ vpot a technik, kter vyuijeme nejastji.

    Dleit poznmka: I kdy nsledujc sti textu podvaj pomrn rozshlvklad v matematickch dovednostech, kter jsou pro studium potaovchalgoritm nezbytn, vtina ten na prvn pohled nepochop, jak siln jsouvazby 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 alevhodnj tuto st nejprve jen zbn proltnout a a pozdji (a uvidte, kolikaplikac popisovanch technik se skrv v dalch kapitolch) se k n vrtita prostudovat ji dkladnji. Pokud nkdo do tohoto materilu zabedne plihned napoprv, nemus se k tmatm z programovn pota u vbec dostat!ten by nicmn ml bt pinejmenm obeznmen s celkovm obsahem tchtost 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 rychleopout krlovstv ist matematiky a vstupuje do e istho programovnpota.

  • 1.2.1 MATEMATICK INDUKCE 11

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

    1.2.1. Matematick indukce

    Nech P (n) je njak tvrzen o celm sle n; vrok P (n) me bt napklad nkrt (n + 3) je sud slo nebo jestlie n 10, pak 2n > n3. Dejme tomu,e nyn chceme dokzat pravdivost tvrzen pro vechna kladn cel sla n. Tomeme udlat pomoc jednoho velmi dleitho postupu:

    a) Dokate, e tvrzen P (1) je pravdiv.

    b) Dokate, e je pravdiv tak tvrzen jsou-li pravdiv vechna tvrzen P (1),P (2), . . . , P (n), pak je pravdiv i tvrzen P (n + 1), piem dkaz budeplatn pro libovoln kladn cel slo n.

    Jako pklad uvaujme nsledujc srii rovnost, na kterou od dvnch dobpila nezvisle na sob spousta lid:

    1 = 12,

    1 + 3 = 22,

    1 + 3 + 5 = 32,

    1 + 3 + 5 + 7 = 42,

    1 + 3 + 5 + 7 + 9 = 52. ()

    Obecn vztah meme nyn formulovat takto:

    1 + 3 + + (2n 1) = n2. ()Nazvme tento vztah tvrzenm P (n); chceme dokzat, e je P (n) pravdiv provechna kladn cel n. Podle ve uvedenho postupu dokeme:

    a) P (1) je pravdiv, protoe 1 = 12.

    b) Jsou-li pravdiv vechna tvrzen P (1), . . . , P (n), pak je pravdiv zejmnai P (n), take plat vztah (); jestlie k obma stranm piteme 2n + 1,dostaneme

    1 + 3 + + (2n 1) + (2n+ 1) = n2 + 2n+ 1 = (n+ 1)2,m jsme dokzali, e je pravdiv i tvrzen P (n+ 1).

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

    Algoritmus I (Konstrukce dkazu). Pro dan kladn cel slo n vytvo tentoalgoritmus dkaz, e je tvrzen P (n) pravdiv.I1. [Dokzat P (1).] Piate k 1 a podle bodu (a) vypite dkaz tvrzen P (1).I2. [k = n?] Pokud k = n, algoritmus kon a vstupem je poadovan dkaz.

  • 12 ZKLADN PRINCIPY 1.2.1

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

    I4. [Zvit k.] Zvtete k o 1 a vrate se na krok I2.

    I1. Dokzat P (1) I2. k=n? I3. Dokzat P (k + 1) I4. Zvit k

    Ano

    Ne

    Obr. 2. Algoritmus I: Matematick indukce

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

    Princip matematick indukce je ale teba odliit od obecn indukce jakometody 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 () a na jejich zklad zformu-lovat hypotzu (). V tomto slova smyslu nen indukce nim jinm ne jakmsizdravm sudkem z dan situace; matematik by ji ale oznail za empirickvsledek nebo dohady.

    Vechno si ozejmme na dalm pkladu. Nech p(n) oznauje poet roz-klad sla n, tedy poet rznch zpsob, jakmi je mon zapsat n ve formsoutu kladnch celch sel, nezvisle na jejich poad. Protoe slo 5 je montakto 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(1) = 1, p(2) = 2, p(3) = 3, p(4) = 5, p(5) = 7.

    Na tomto mst bychom mohli podlehnout pokuen zformulovat na zklad in-dukce hypotzu, e posloupnost p(2), p(3), . . . generuje prvosla. Pro jej ovenvypoteme 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 hrouta 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 adupozoruhodnch 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. Indukcje 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 dkazymatematickou indukc oznaovat prv pomoc samotnho slova indukce.

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

    Pi naem dkazu vztahu () jsme pouili jenspeciln 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 sebudeme setkvat asto, ale hned v dalm pkladusi ukeme slu cel metody jet lpe. Nadenujeme si Fibonacciho posloupnost

    1

    3

    5

    7

    9

    11

    Obr. 3. Souet lichch -sel je vdy tvercem

    F0, F1, F2, . . . podle pravidla, e F0 = 0, F1 = 1 a kad dal slo je soutemdvou 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 rovno (1 +

    5 )/2, plat

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

    Jestlie n = 1, pak F1 = 1 = 0 = n1, take krok (a) je splnn. V kroku(b) si nejprve uvdomme, e plat tak P (2), protoe F2 = 1 < 1.6 < 1 = 21.Nyn, pokud jsou pravdiv vechna tvrzen P (1), P (2), . . . , P (n) a pokud jen > 1, vme zejmna, e je pravdiv P (n 1) a P (n), take Fn1 n2a Fn n1. Tyto dv nerovnosti dle seteme a dostaneme:

    Fn+1 = Fn1 + Fn n2 + n1 = n2(1 + ). ()slo m jednu dleitou vlastnost, pro kterou jsme si je ostatn v tomtopkladu vybrali:

    1 + = 2. ()

    Dosadme-li nyn () do (), dostvme Fn+1 n, co je tvrzen P (n+1). Krok(b) jsme tedy zvldli a pomoc matematick indukce jsme dokzali i poadovantvrzen (). 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 > 1jsme ji vyuili induktivn metodu. Tento postup byl nutn proto, e pi n = 1bychom se odvolvali na tvrzen P (n 1) = P (0), kter nen denovno.

    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 celsla m a n, vypoteme jejich nejvtho spolenho dlitele a souasn dv cel,nikoli vak nutn kladn sla a a b, pro kter plat am+ bn = d.E1. [Inicializace.] Piate a b 1, a b 0, c m, d n.

  • 14 ZKLADN PRINCIPY 1.2.1

    E2. [Dlen.] Nech q a r budou nepln podl a zbytek (v tomto poad) pidlen c slem d. (To znamen, e c = qd+ r a 0 r < d.)

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

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

    pomocnch promnnch c a d pouijeme m a n, dostvme n star znmalgoritmus 1.1E. Nov verze um ovem o nco vce, protoe stanovuje koecientya a b. 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 871 4 3 13 116 87 1 29

    4 5 13 16 87 29 3 0Odpov je sprvn: 5 1769 16 551 = 8845 8816 = 29, co je nejvtspolen dlitel sel 1769 a 551.

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

    am+ bn = c, am+ bn = d. ()

    Platnost tchto vztah meme dokzat tak, e si ovme jejich platnost piprvnm zahjen kroku E2, a pot prokeme, e se v kroku E4 jejich platnostnezmn. (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 skonmehned 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 ppadalgoritmus pokrauje a po prvnm prchodu piad c n, d r; protoer < n, meme podle indukce pedpokldat , e konen hodnota d je nejvtmspolenm dlitelem sel n a r. 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 ().

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

  • 1.2.1 MATEMATICK INDUKCE 15

    E1. a 0b 1

    a 1b 0

    cmdn

    E2. qpodl(c d)r zbytek(c d)

    E3. r=0?

    E4.c d, d r;t a, a a, a t qa;t b, b b, b t qb.

    A1: m> 0, n> 0.

    A2: c=m> 0, d=n> 0,a= b=0, a= b=1.

    A3: am+ bn= d, am+ bn= c= qd+ r,0 r

  • 16 ZKLADN PRINCIPY 1.2.1

    d > 0 je v tvrzen A6 nutn jen proto, aby operace E2 mla smysl.) Dle musmeukzat, e z A3 a r = 0 vyplv A4 , e z A3 a r 6= 0 vyplv A5 atd. Vechnytyto potebn dkazy jsou velice jednoduch.

    Jakmile dokeme vrok () pro kad rmeek, znamen to, e jsou vechnauveden tvrzen platn pi kadm prchodu algoritmem. Nyn meme provstindukci podle potu krok vpotu, tedy podle potu ipek prochzench vevvojovm diagramu. Pi prchodu prvn ipky, kter vede z bodu Start, je tvr-zen A1 pravdiv, protoe pedpokldme, e vstupn hodnoty vdy odpovdajspecikacm; je tedy i tvrzen u prvn prochzen ipky sprvn. Je-li pravdivtvrzen u n-t ipky, pak podle () je pravdiv i tvrzen uveden u (n + 1)-nipky.

    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 vodnhokroku ji nen nijak tk dokzat, e z kadho tvrzen u ipky vedouc dormeku 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 mmedna tvrzen A1, A4 a A6 , je ji jednoduch napsat i A2, A3 a A5 . Nejvce prcenm d vytvoit tvrzen A6 ; zbytek ji meme doplnit mechanicky. O podrobnformln dkazy algoritm, tedy o dkazy s takovou mrou podrobnosti jako naobrzku 4, se proto ve zbytku knky nesname. Sta vdy vyslovit jen klovvodn tvrzen, kter uvdme buto ve vkladu za algoritmem, nebo v zvorkchjako poznmky v textu samotnho algoritmu.

    Tento postup dkazu sprvnosti algoritm m ale jet jednu dleitjstrnku: zrcadl se v nm zpsob, jakm cel algoritmus chpeme. Vzpometesi, e u v sti 1.1 jsme tene upozornili, aby algoritmus neetli jako textyz krsn literatury; doporuujeme jednou nebo dvakrt prost vhodn algo-ritmus s vzorkem dat. Pi takovm prchodu algoritmem ji lovk me lpezformulovat potebn tvrzen. Zmrem autora je ukzat, e sprvnosti algoritmuporozumme 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, eklov tvrzen, kter nelze snadno odvodit dnm automatem, musme pi vy-svtlovn algoritmu druhmu lovku vdy jasn, explicitn vyslovit. Vrtme-lise nyn k Algoritmu E, je teba pipomenout tak tvrzen A6 .

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

    (Poznamenejme napklad, e Algoritmus E m smysl i v ppad, e v nmbudou 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, b, a, b nabvaj i nadle celoselnch hodnot.Pokud metodu zahjme teba s hodnotami m = 12 62 a n = 20 102,vypoteme pomoc n nejvtho spolenho dlitele d = 4 22, kde a = ++2, b = 1. Dkazy tvrzen A1 a A6 zstvaj platn i pi takto rozench

  • 1.2.1 MATEMATICK INDUKCE 17

    pedpokladech; pravdiv jsou tedy i vechna tvrzen pi jakmkoli provdnprocedury. Jestlie ale zaneme s hodnotami m = 1 a n =

    2, vpoet nikdy

    neskon (viz cvien 12). Z dkazu tvrzen A1 a A6 tud logicky nevyplv,e by byl algoritmus konen.)

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

    Nyn jsme tedy dvakrt dokzali platnost Algoritmu E. Z psn logickhopohledu bychom se mli pokusit tak dokzat platnost prvnho algoritmu ttosti textu, tedy Algoritmu I; pomoc Algoritmu I jsme ve skutenosti ukzalisprvnost jakhokoli dkazu indukc. Pokusme-li se ale dokzat , e Algoritmus Ipracuje sprvn, dostvme se k rozporu to meme dokzat opt jedinindukc! Ocitme se tak v kruhu.

    V posledn analze vidme, e kadou vlastnost celch sel musme dokzatindukc, protoe samotn cel sla jsou v podstat denovna indukc. Vtu,e libovoln kladn cel slo n se buto rovn 1, nebo se k nmu dostanemeod 1 opakovanm pitnm 1, meme tud povaovat za axiom; to u stak dokzn sprvnosti Algoritmu I.

    [Podrobn vklad zkladnch princip celch

    sel najdete v lnku On Mathematical Induction, kter napsal Leon Henkin,AMM 67 (1960), 323338.

    ]Mylenka matematick indukce je tud zce spjata s pojmem samotnho

    sla. V Evrop aplikoval metodu matematick indukce na pesn dkazy italskvdec Francesco Maurolico, a to v roce 1575. S dalmi zdokonalenmi pielzatkem 17. stolet Pierre de Fermat, kter ji nazval metodou nekonenhopoklesu. Pojem tak ve svch pozdjch pracch zeteln pouv Blaise Pascal(1653). Samotn vraz matematick indukce vytvoil zejm A. De Morganzatkem 19. stolet. [Viz The Penny Cyclopdia 11 (1838), 465466; AMM 24(1917), 199207; 25 (1918), 197201; Arch. Hist. Exact Sci. 9 (1972), 121.] Dalvklad matematick indukce najdete v knize G. Polya: Induction and Analogyin Mathematics (Princeton, N.J.: Princeton University Press, 1954), kapitola 7.

    Ve popsan formulace dkazu algoritm pomoc tvrzen a indukce jev podstat dlem R. W. Floyda. Ten poukzal, e smantickou denici kadoperace v programovacm jazyku je mon formulovat jako logick pravidlo, kterpesn stanovuje, z jakch tvrzen platnch ped jeho provedenm dokeme jaktvrzen po jeho dokonen [viz Assigning Meanings to Programs, Proc. Symp.Appl. Math., Amer. Math. Soc., 19 (1967), 1932]. Podobn mylenky vyslovilnezvisle Peter Naur, BIT 6 (1966), 310316, kter tato tvrzen nazval gen-eral snapshots, obecn snmky. Dleitm zpesnnm je pojem invariant,kter zavedl C. A. R. Hoare; viz napklad CACM 14 (1971), 3945. Pozdjautoi 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 objeviti nov algoritmy, kter jsou zaruen sprvn; sta vyjt ze specikac poa-dovanch vsledk a postupovat zpt. [Viz E. W. Dijkstra, CACM 18 (1975),453457; A Discipline 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, ktervelmi pipomnaj tvrzen na obrzku 4. [Viz John von Neumann, CollectedWorks 5 (New York: Macmillan, 1963), 9199. Viz t prvn poznmky A. M.Turinga k verikaci, uveden v lnku Report of a Conference on High SpeedAutomatic Calculating Machines (Cambridge Univ., 1949), 6768 a obrzky;petitno s komentem od F. L. Morrise a C. B. Jonese v Annals of the Historyof Computing 6 (1984), 139143.]

    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 podmnkamia 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, ebudeme chtt dokzat njak tvrzen P (n) pro vechna nezporn cel sla tedynikoli pro n = 1, 2, 3, . . . , nbr pro n = 0, 1, 2, . . .

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

    a(n+1)1 = an =an1 an1a(n1)1

    =1 11

    = 1;

    take vta plat i pro n+ 1.

    3. [18] Nsledujc dkaz indukc je zdnliv sprvn, ale pro n = 6 dv z njakhodvodu na lev stran 12 +

    16 +

    112 +

    120 +

    130 =

    56 a na prav stran

    32 16 = 43 . Najdete,

    kde je v nm chyba? Vta.

    11 2 +

    12 3 + +

    1(n 1) n =

    32 1n.

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

    11 2 + +

    1(n 1) n +

    1n (n+ 1)

    =32 1n+

    1n(n+ 1)

    =32 1n+( 1n 1n+ 1

    )=

    32 1n+ 1

    .

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

  • 1.2.1 MATEMATICK INDUKCE 19

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

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

    7. [23] Zformulujte a indukc dokate pravidlo pro souty 12, 22 12, 32 22 + 12,42 32 + 22 12, 52 42 + 32 22 + 12 atd.

    x 8. [25] (a) Indukc dokate nsledujc vtu, kterou okolo roku 100 vyslovil Nico-machus: 13 = 1, 23 = 3 + 5, 33 = 7 + 9 + 11, 43 = 13 + 15 + 17 + 19 atd. (b) Pomoctohoto vsledku dokate pozoruhodn vztah 13 + 23 + + n3 = (1 + 2 + + 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 pohlednajdeme 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+1)Strana = 5+4+3+2+1+1+2+3+4+5 =

    = 2 (1+2+ +5)Plocha = 4 12+4 2 22+4 3 32+4 4 42+

    +4 5 52 == 4 (13+23+ +53)

    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

    13

    14 + 4 3

    3

    34 + 4+

    53

    54 + 4 + (1)

    n(2n+ 1)3

    (2n+ 1)4 + 4.

    12. [M25] Ukate, jak je mon zobecnit Algoritmus E podle popisu v textu tak, edo nj budou vstupovat hodnoty tvaru u + v

    2, kde u a v jsou cel sla, piem

    vpoty bude mon opt provdt elementrnm zpsobem (tedy bez nekonenhodesetinnho rozvoje

    2). Dokate ale, e pro m = 1 a n =

    2 vpoet neskon.

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

  • 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 pokusdoplnit zbvajc tvrzen potebn k dkazu sprvnosti programu. (Tento program byse napklad ml pokusit dokzat platnost Algoritmu E, piem vyjde jen z tvrzenA1, A4, a A6. Dal vklad viz pspvky R. W. Floyd a J. C. King, IFIP Congressproceedings, 1971.)

    x 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 njakouformou dvojit indukce, kter bv na pohled dosti nesrozumiteln. Ve skutenostiexistuje ale jeden dleit princip, kter je obecnj ne jednoduch indukce a kter jemon 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 dobruspodn.

    Nech je relace v mnoin S, kter spluje nsledujc vlastnosti:i) Pokud x, y a z nle do S a pokud x y a y z, pak i x z.ii) Pokud x a y nle do S, plat prv jedno z nsledujcch t tvrzen: x y, x = y

    nebo y x.iii) Je-li A libovoln neprzdn podmnoina S, existuje prvek x z A takov, e x y

    (tedy x y nebo x = y) pro vechna y z A.Tuto relaci nazvme dobrm uspodnm mnoiny S. Je napklad zejm, e mnoinakladnch celch sel je dobe uspodan v obyejn relaci men ne,

  • 1.2.2 SLA, MOCNINY A LOGARITMY 21

    st (f) m u potaovch algoritm dal uplatnn: Poda-li se nm zobrazitkad stav vpotu x do prvku f(x) z jist dobe uspodan mnoiny S takovmzpsobem, e pi kadm kroku vpotu se stav x zmn do stavu y s tm, e f(y) f(x), pak algoritmus mus skonit. Tento princip je zobecnnm tvrzen o klesajcposloupnosti 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, kdeq je kladn. Reln slo je pak veliina x s desetinnm rozvojem

    x = n+ 0.d1d2d3 . . . , ()

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

    n+d110

    +d2100

    + + dk10k

    x < n+ d110

    +d2100

    + + dk10k

    +110k

    , ()

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

    = 3, 14159265358979 . . . , podl obvodu kruhu a jeho prmru;

    = 1, 61803398874989 . . . , takzvan zlat ez (1 +5 )/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, dlena porovnvn relnch sel nemusme podrobnji hovoit.

    Obtn problmy z celch sel se asto daj vyeit pechodem do mnoinyrelnch sel a obtn problmy z relnch sel se asto daj vyeit v jetobecnj td, kter se k komplexn sla. Komplexn slo je veliina z vetvaru z = x + iy, kde x a y jsou reln sla a i je speciln jednotka, kterspluje rovnost i2 = 1. sla x a y oznaujeme za relnou st a imaginrnst sla z; jeho absolutn hodnotu denujeme jako

    |z| =x2 + y2. ()

    slo komplexn sdruen k z je z = x iy, piem zz = x2 + y2 = |z|2. Teoriekomplexnch sel je v ad ohled jednodu a krsnj ne teorie relnchsel, ale obvykle je povaovna za ltku pro pokroil. V tto knize se protosoustedme na reln sla a vjimkou budou jen situace, kdy by reln slabyla 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 memedenovat i polooteven intervaly [u . . v) a (u . . v]. Na oteven stran intervalu

  • 22 ZKLADN PRINCIPY 1.2.2

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

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

    b0 = 1, bn = bn1b pokud n > 0, bn = bn+1/b pokud n < 0. ()

    Indukc snadno dokeme platnost pravidel umocovn:

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

    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 jem-t odmocninasla u a oznaujeme v = m

    u.

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

    bp/q =qbp. ()

    Tato denice, kterou vyslovil Mikul z Oresme (okolo 1360), je sprvn, pro-toe bap/aq = bp/q a protoe pravidla umocovn plat i pro libovoln zvolenracionln sla x a y (viz cvien 9).

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

    bn+d1/10++dk/10k bx < bn+d1/10++dk/10k+1/10k . ()

    Tm jednoznan denujeme bx jako kladn reln slo, protoe rozdl mezipravou a levou stranou nerovnosti ve vztahu () je bn+d1/10++dk/10

    k

    (b1/10k1)

    a podle ne uvedenho cvien 13 je tento rozdl men ne bn+1(b1)/10k, a pidostaten velkm k vypoteme bx s libovolnou poadovanou pesnost.

    Takto meme napklad zjistit, e

    100,30102999 = 1, 9999999739 . . . , 100,30103000 = 2, 0000000199 . . . ; ()

    a tud pokud je b = 10 a x = 0, 30102999 . . . , znme hodnotu sla 10x s leppesnost ne jedna ku 10 milinm (i kdy zatm nevme, jestli je desetinnrozvoj sla 10x roven 1, 999 . . . nebo 2, 000 . . . ).

    Je-li b < 1, denujeme bx = (1/b)x; pro b = 1 je bx = 1. Na zklad tchtodenic ji meme dokzat, e pravidla umocovn () plat i pro libovolnreln sla x a y. Tyto principy denovn bx formuloval poprv John Wallis(1655) a Isaac Newton (1669).

    Nyn pejdeme k jedn dleit otzce. Pedpokldejme, e je dno kladnreln slo y; umme nalzt takov reln x, pro n je y = bx? Odpov znano (za pedpokladu e b 6= 1); je-li dno bx = y, sta pout vztah ()obrcen a ji zjistme n a d1, d2, . . . Vsledn slo x se nazv logaritmus slay pi zkladu b, piem zapisujeme x = logb y. Podle tto denice mme

    x = blogb x = logb(bx). ()

  • 1.2.2 SLA, MOCNINY A LOGARITMY 23

    Jako pklad meme z rovnic () odvodit, e

    log10 2 = 0, 30102999 . . . ()

    Z pravidel umocovn vyplv, e

    logb(xy) = logb x+ logb y, pokud x > 0, y > 0 ()

    a dlelogb(c

    y) = y logb c, pokud c > 0. ()Vztah () ilustruje takzvan dekadick logaritmy, kter dostvme pi z-

    kladu rovnm 10. Mon si eknete, e v potach budou uiten spe dvojkovlogaritmy (o zkladu 2), protoe vtina pota pracuje s dvojkovou nebolibinrn aritmetikou. Dvojkov logaritmy jsou skuten velmi uiten, ale pe-devm z jinho dvodu: potaov algoritmy provdj asto rozhodovn mezidvma vtvemi vpotu. S dvojkovmi logaritmy se setkvme tak asto, e pron zavedeme zkrcenou notaci a budeme pst

    lg x = log2 x, ()

    ve tvaru, kter zavedl Edward M. Reingold.Pichz tedy otzka, jestli je njak vztah tak mezi lg x a log10 x; natst

    takov vztah existuje,

    log10 x = log10(2lg x) = (lg x)(log10 2),

    podle () a (). Je tedy lg x = log10 x/log10 2, a obecn plat

    logc x =logb xlogb c

    . ()

    Vztahy (), () a () 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 zkladujistho relnho sla oznaovanho jako e = 2, 718281828459045 . . . Logaritmypi zkladu e se nazvaj pirozen logaritmy a zapisujeme je jako

    lnx = loge x. ()

    Tato dosti zvltn denice (fakticky jsme ani nedenovali e) nebude zejmteni pipadat jako pli pirozen logaritmus; pesto je ale funkce lnxskuten 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 pedobjevenm jinch druh logaritm. Nsledujc dvapklady, kter ten najde v kad uebnici dife-rencilnho potu, nm ponkud osvtl, pro siNapierovy logaritmy skuten zasluhuj oznaenpirozen: (a) Na obrzku 6 tvo stnovan plo-cha lnx. (b) Jestlie banka vyplc z vkladu sloenroky s mrou r, piem je pipisuje pololetn, je

    (1, 0)

    (1, 1)

    (x, 1/x)

    (x, 0)

    Obr. 6. Pirozen logaritmus

  • 24 ZKLADN PRINCIPY 1.2.2

    ron vnosnost kadho dolaru vkladu rovna (1+r/2)2 dolarm; pi tvrtletnmpipisovn 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 kaddolar 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 lnkF. Cajori, AMM 20 (1913), 514, 3547, 7584, 107117, 148151, 173182,205210.

    Na zvr tto sti textu si ukeme, jak logaritmy potat . Jedna metodapmo vyplv ze vztahu (): Vyjdeme-li z rovnosti bx = y a umocnme ob jejstrany na 10k, zjistme, e je

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

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

    log10 x = n+ b1/2 + b2/4 + b3/8 + ()Nejprve posuneme desetinnou rku v sle x doleva nebo doprava tak, abychommli 1 x/10n < 10; tm zjistme celou st vsledku, n. Pro zjitn b1,b2, . . .polome nyn x0 = x/10n a pro k 1,

    bk = 0, xk = x2k1, pokud x2k1 < 10;

    bk = 1, xk = x2k1/10, pokud x2k1 10.

    ()

    Sprvnost tto procedury vyplv ze vztahu

    1 xk = x2k/102

    k(n+b1/2++bk/2k) < 10, ()

    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 = x2k1. Namsto toho polome xk = x2k1 zaokrouhlen

    nebo oznut na jist poet desetinnch mst. Takto napklad vypoteme log10 2na tyi vznamn slice:

    x0 = 2, 000;x1 = 4, 000, b1 = 0; x6 = 1, 845, b6 = 1;x2 = 1, 600, b2 = 1; x7 = 3, 404, b7 = 0;x3 = 2, 560, b3 = 0; x8 = 1, 159, b8 = 1;x4 = 6, 554, b4 = 0; x9 = 1, 343, b9 = 0;x5 = 4, 295, b5 = 1; x10 = 1, 804, b10 = 0; atd.

    Dky