From: Martin Mares Date: Mon, 23 May 2011 12:19:19 +0000 (+0200) Subject: RAM: TeXove korektury X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=07c972dffd67c49a6e41db054ac561892260a64f;p=ads1.git RAM: TeXove korektury --- diff --git a/2-ram/2-ram.tex b/2-ram/2-ram.tex index f9a8f9f..ce0d834 100644 --- a/2-ram/2-ram.tex +++ b/2-ram/2-ram.tex @@ -3,15 +3,15 @@ \prednaska{2}{Slo¾itost, grafové algoritmy} {(zapsal Martin Koutecký)} -\h{Model {\sc Ram}} +\h{Model {\csc Ram}} Pøi analýze algoritmu bychom chtìli nìjak popsat jeho slo¾itost. Abychom mohli udìlat toto, potøebujeme nejprve definovat výpoèetní model. Výpoèetních modelù je více, my vybereme jeden pomìrnì blízký skuteèným poèítaèùm: -\s{Definice:} Random Access Machine ({\sc Ram}) +\s{Definice:} Random Access Machine ({\csc Ram}) -{\sc Ram} poèítá jen s celými èísly -- znaky, stringy a podobnì reprezentujeme +{\csc Ram} poèítá jen s celými èísly -- znaky, stringy a podobnì reprezentujeme èísly, jejich posloupnostmi atd. Pamì» je tvoøena buòkami, které obsahují èísla. Pamì»ové buòky jsou adresované takté¾ èísly. A program samotný je koneèná posloupnost instrukcí následujících druhù: @@ -50,18 +50,18 @@ v \h{Slo¾itost} \> Jak dobøe popsat slo¾itost? \numlist\ndotted -\:{\I {\sc Ram} s jednotkovou cenou}: èas $\approx$ \#instrukcí, prostor +\:{\I {\csc Ram} s jednotkovou cenou}: èas $\approx$ \#instrukcí, prostor $\approx$ maximální èíslo buòky minus minimální èíslo buòky pou¾ité pøi výpoètu. Toto není moc dobrý nápad, proto¾e není nijak penalizována napøíklad práce s velmi dlouhými èísly -- poøád je to jedna instrukce, tak¾e cena je stejná, ale poèítaèe se tak pøece nechovají. Velikost èísel ale omezit nesmíme, proto¾e bychom omezili pamì» (èísly ji adresujeme). -\:{\I{\sc Ram} s logaritmickou cenou}: cena instrukce $\approx$ \#bitù +\:{\I{\csc Ram} s logaritmickou cenou}: cena instrukce $\approx$ \#bitù zpracovávaných èísel, prostor $\approx$ \# bitù v¹ech pou¾itých bunìk. To je teoreticky pøesné, ale dost nepraktické (ve v¹ech slo¾itostech by byly logaritmy). -\:{\I{\sc Ram} s omezenými èísly}: jednotková cena instrukcí, ale èísla omezíme +\:{\I{\csc Ram} s omezenými èísly}: jednotková cena instrukcí, ale èísla omezíme nìjakým polynomem $P(n)$. Tím zmizí paradoxy prvního modelu, ale mù¾eme adresovat jen polynomiální prostor (to nám ov¹em obvykle nevadí). \endlist @@ -95,7 +95,7 @@ t \::$[i]$ prohodíme s $[j]$. \endalgo -Jak by takový algoritmus vypadal zapsaný v instrukcích {\sc Ram}? Budeme muset +Jak by takový algoritmus vypadal zapsaný v instrukcích {\csc Ram}? Budeme muset pou¾ít návì¹tí a goto místo cyklù, jména registrù místo promìnných a tøeba prohození musíme provést pøes tøetí promìnnou. Nìjak takto: @@ -248,7 +248,7 @@ to sta \:Jaké je nejkrat¹í (kladné, celé) èíslo v desítkové soustavì zapsané jen èíslicemi 1, 0, které je dìlitelné tøinácti? Nakreslíme orientovaný graf s vrcholy 0 a¾ 12 -a hranami $(x,y),$ $y=10\cdot x \mod 13$ a $y=(10\cdot x + 1) \mod 13$ +a hranami $(x,y),$ $y=10\cdot x \bmod 13$ a $y=(10\cdot x + 1) \bmod 13$ (z~ka¾dého vrcholu vychází jedna hrana za pøidání èíslice 1 a dal¹í za èíslici 0). Hledané èíslo existuje právì tehdy, kdy¾ graf obsahuje orientovaný sled z~1~do~0. Jakým algoritmem takový sled najdeme?