Nakladatelství Computer
Press
se pustilo do historického počinu, když se
rozhodlo vydat překlad kultovní série knih Donalda
Knutha The Art of Computer Programming.
První díl označený podtitulem Základní
algoritmy
je pouze začátkem dlouhé série, která
ani v angličtině ještě nevyšla celá, a to přestože na
ní její autor začal pracovat již v roce 1962.


Původně zamýšlel napsat jednosvazkovou knihu o dvanácti
kapitolách, ale nějak se rozepsal (to bych od někud
znal), takže do prvního, více než 600stránkového dílu
se mu vešly jen dvě kapitoly. Rozhodl se proto vydat
knihu ve více dílech, přičemž každý díl měl obsahovat
dvě kapitoly. Bohužel, ani toto předsevzetí nedodržel,
takže 4. díl nakonec rozdělil do pěti svazků, i když
výrazně tenčích.


Ing. Virius, který píše paralelní recenzi, vás v ní
jistě seznámí s duchem knihy a stylem výkladu. Já proto
nyní klasický formát recenze na chvíli opustím a povím
vám něco o zákulisí přípravy této podivuhodné série.
Chtěl bych, abyste z tohoto výkladu pochopili, že
Donald Knuth připravuje všechny texty opravdu nesmírně
pečlivě a snaží se v nich postihnout vše, co je o
probírané problematice známo. I to je jeden z důvodů,
proč známý časopis American Scientist zařadil tuto
sérii knih mezi tucet nejlepších vědeckých monografií
minulého století.


Jak jsem byl řekl, Knuth začal psát v roce 1962, avšak
vycházet začaly jeho knihy až v roce 1968. Do roku 1973
vydal první tři díly. Mezitím ale věda pokročila, tak
se s nakladatelem dohodli, že před vyjitím dalších dílů
vyjde druhé vydání prvních tří.


Při přípravě druhého vydání se ale Knuthovi se ale
nelíbil způsob sazby, tak se rozhodl, že vydání druhého
dílu o pár měsíců práce odloží a během té doby vytvoří
sázecí program, který mu umožní sázet podle jeho
představ. Těch pár měsícpů se nakonec protáhlo na osm
let. Po nich přišel s programem TeX, v němž je nyní
celá kniha sázena a který se stal záhy nejpopulárnějším
autorským i sázecím programem na univerzitách.


Jak zajisté odhadnete, vývoj se nezastavil, a tak bylo
nutno před vyjitím dalších dílů nejprve aktualizovat ty
již dříve vyšedší. V roce 1997 tedy začalo vycházet
třetí vydání prvních dvou dílů, na něž navázalo druhé
vydání třetího dílu a které nyní pokračuje postupným
vydáváním prvního vydání jednotlivých svazků dílu
čtvrtého.


Vzhledem k tomu, že mezi tím uplynulo 11 let, jistě
odhadnete, že se opět mnohé změnilo. Proto ani
plánovaný obsah kapitol, který autor předestře v
předmluvě k prvnímu dílu, nevydržel a za tu dobu se
trochu změnil (tedy přesněji změnil se obsah čtvrtého
dílu). Současný stav je tedy následující:

  • Díl 1: Základní algoritmy
    (vyšel v červnu 1997)


    Zde se v první kapitole probírá nejprve povšechná
    teorie, pak autor vyloží architekturu svého
    hypotetického počítače, pro nějž všechny programy
    vytváří. Druhá kapitola nás pak seznámí se
    základními datovými strukturami: seznamy a
    stromy.




  • Díl 2: Seminumetrické algoritmy (vyšel v listopadu 1997)


    Kniha obsahuje třetí a čtvrtou kapitolu (kapitoly
    jsou číslovány plynule skrz jednotlivé díly). Třetí
    pojednává pseudonáhodných číslech a jejich
    generaci, čtvrtá pak probírá práci s čísly v
    plovoucí čárce a optimalizaci numerických algoritmů
    včetně faktorizace prvočísel používané v
    kryptografii.




  • Díl 3: Vyhledávání a třídění
    (někdo dá přednost termínu řazení – díl vyšel v
    květnu 1998)


    Jak jistě sami odhadnete, díl obsahuje pátou a
    šestou kapitolu. Pátá pojednává o třídění (řazení),
    které rozděluje na externí a interní (každému je
    věnována vlastní podkapitole). Šestá se pak zabvývá
    vyhledáváním v tabulkách i souborech přičemž je
    opět rozdělena na výklad metod pro sekvenční
    vyhledávání a metod pro vyhledávání pomocí
    klíčů.




  • Díl 4: Kombinatorické algoritmy (postupně vychází)


    Jak jsem již řekl, tento díl se oproti původním
    předpokladům poněkud rozrostl, takže nakonec
    vychází v několika svazcích. Jejich příprava ale
    autorovi zabrala poměrně dost času, takže jsme si
    na vyjití dalších svazků museli počkat a navíc
    jednotlivé svazky vycházely na přeskáčku (a zatím
    ještě všechny nevyšly). Rozdělení do více svazků
    bylo mimo jiné učiněno i pod tlakem čtenářů, kteří
    nechtěli čekat na vydání další tlusté knihy a
    přiměli autora, aby rozdělil text do útlejších
    brožurek s tloušťkou do 200 stran. Čtvrtý díl je
    (nebo přesněji bude) tvořen následujícími svazky:
  • Svazek 0: Úvod do kombinatorických
    algoritmů a booleovských funkcí
    (vyšel
    v dubnu 2008)
  • Svazek 1: Bitové triky a techniky;
    diagramy binárního rozhodování
    (vyjde v
    březnu 2009)
  • Svazek 2: Generace všech n-tic a
    permutací
    (vyšel v únoru 2005)
  • Svazek 3: Generování všech kombinací
    a částí
    (vyšla v srpnu 2005)
  • Svazek 4: Generování všech stromů,
    historie kombinatorických generací

    (vyšel v únoru 2006)
  • Díl 5: Syntaktické algoritmy
    (teprve se píše)


    Tento díl je prozatím pouze v plánech má opět
    obsahovat dvě kapitoly. Devátá se má zabývat
    lexikálním prohledáváním (scanning), kam autor
    zařazuje i vyhledávání textových řetězců a
    komprimaci, desátá pak bude probírat lexikální
    analýzu (parsing).

Jak si jistě domyslíte, tato série, která vám postupně
vysvětlí, rozebere a exaktně dokáže téměř vše, co v
současné době víme o algoritmizaci, nemá v odborné
literatuře obdobu. Řekl bych, že každý, kdo to myslí s
programováním vážně a chce je poznat doopravdy do
hloubky, by měl vážně uvažovat o zařazení této
všeobjímající série do své knihovny.