]> mj.ucw.cz Git - ads1.git/commitdiff
Revize.
authorMartin Mares <mj@ucw.cz>
Sun, 24 May 2009 13:44:57 +0000 (15:44 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 24 May 2009 13:44:57 +0000 (15:44 +0200)
2-ram/2-ram.tex

index ae78ad8c14fcbb5f37b02753cea8152a68189244..31e5c738d10bca4da540a4a9cb8397dc5f477a5e 100644 (file)
@@ -17,21 +17,22 @@ je v
 koneèná posloupnost instrukcí následujících druhù:
 \itemize\ibull
 \:Aritmetické a logické:
-$X \leftarrow Y \oplus Z, \oplus\in\{+, -, \times, \div,\mod, \&\&, \|, <<,
->>\}$
-\:Skoky: goto LABEL
+$X$ |<-| $Y \oplus Z, \oplus\in\{|+|, |-|, |*|, |div|, |mod|, \&,
+{\tt\char124} |<<|, |>>|\}$
+\:Øídící: |goto| \<label>, |halt|
 \:Podmínky: pro libovolnou nepodmínìnou instrukci mù¾u pou¾ít
-if~$X~<~Y~\Rightarrow$~instrukce
-\:Øídící: goto, halt.
+if~$X$~|<|~$Y$~|==>|~instrukce % Tady to prosím je¹tì zkontroluj. Myslím, ¾e
+% zápis je správný, ale sází se to divnì a vidím èerný obdélníèek na konci
+% øádku. Díky.
 \endlist
 
 \s{Poznámka} (operandy):
 \itemize\ibull
-\:Konstanty (1,2,\dots)
-\:Adresované pøímo - M[konst.] -- budeme pou¾ívat písmena A-Z jako aliasy pro
-registry -1 a¾ -26
+\:Konstanty (1, 2, \dots)
+\:Adresované pøímo -- M[konst.] -- budeme pou¾ívat písmena A-Z jako aliasy pro
+buòky pamìti $-1$ a¾ $-26$, které nazýváme registry.
 (tedy A=M[-1])
-\:Adresované nepøímo -- M[M[konst.]] - budeme pou¾ívat zkratku [[konst.]]
+\:Adresované nepøímo -- M[M[konst.]] -- budeme pou¾ívat zkratku [[konst.]]
 \endlist
 
 Samotný výpoèet probíhá takto:
@@ -57,9 +58,9 @@ bychom omezili pam
 \:{\sc Ram} s logaritmickou cenou: èas $\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).
-\:{\sc Ram} s omezenými èísly: jednotková cena instrukcí, ale èísla omezíme na
-$\leq P(n)$, $P(n)$ je polynom. Tím zmizí paradoxy prvního modelu, ale mù¾eme
-adresovat jen polynomiální prostor (to nám obvykle nevadí).
+\:{\sc 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 obvykle nevadí).
 \endlist
 
 % Z minulých zápiskù.
@@ -77,23 +78,21 @@ $$S(n) := \max \{s(x) ; \hbox{$x$ je vstup d
 \endlist
 
 Nyní zkusíme zanalyzovat nìjaký konkrétní algoritmus. Vezmìme napøíklad øazení
-pomocí pøímeho výbìru (selection sort). Na vstupu dostaneme v registru N poèet
-èísel, v buòkách 1\dots n je nesetøídìná posloupnost èísel. Ty pak tøídíme
-následujícím algoritmem zapsaném v pseudokódu:
+pomocí pøímeho výbìru (selection sort). Na vstupu dostaneme poèet èísel $n$ (v
+registru N), v buòkách $1,\dots, n$ je nesetøídìná posloupnost èísel. Ta pak
+tøídíme následujícím algoritmem zapsaným v pseudokódu:
 \algo
 \:Pro $i=1$ do $n$:
 \::$j\leftarrow i$
 \::Pro $k=i$ do $n$:
 \:::Je-li $[k]<[j]\Rightarrow j\leftarrow k$
-\::$[i]\leftrightarrow[j]$
+\::$[i]$ prohodíme s $[j]$.
 \endalgo
 
 Jak by takový algoritmus vypadal zapsaný v instrukcích {\sc 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:
+tøeba prohození musíme provést pøes tøetí promìnnou. Nìjak takto:
 
-%Tady vá¾nì nevím jak formátovat, aby to bylo hezké. Nejvíce by se mi líbil
-% verbatim, ale jak v nìm udìlat rozumnì ¹ipeèky? Tøeba => a <- ?
 \verbatim{
        I <- 1
 LOOP:  J <- I
@@ -108,27 +107,24 @@ MIN:      IF [J]<[M] ==> M <- J
        IF I<=N ==> GOTO LOOP
 }
 
-
 Pojïme se podívat, jaká je èasová slo¾itost jednotlivých èástí algoritmu.
-Cyklus MIN provede $3\cdot (N-I+1)$ instrukcí. Mimo cyklu MIN je v LOOP je¹tì 7
-instrukcí, tedy celý LOOP provede $3\cdot (N-I+1)+7$ instrukcí. Celkovì se
-dostáváme k souètu
+Cyklus |MIN| provede $3\cdot (N-I+1)$ instrukcí. Mimo cyklu |MIN| je v |LOOP|
+je¹tì 7 instrukcí, tedy celý |LOOP| provede $3\cdot (N-I+1)+7$ instrukcí.
+Celkovì se dostáváme k souètu
 $$1+3\cdot N+7+3\cdot (N-1)+7+3\cdot (N-2)+7+3\cdot (N-3)+\dots +3\cdot 1+7 =$$
-$$1+7\dots N+3\dots {{N(N+1)}\over{2}} = {{3}\over{2}}N^2 + 8,5N + 1$$
+$$1+7\cdot N+3\cdot {{N(N+1)}\over{2}} = {{3}\over{2}}N^2 + 8,5N + 1$$
 
 Na multiplikativních konstantách ale nezále¾í -- zaprvé se na reálných strojích
 ceny jednotlivých (pro nás jednotkových) instrukcí stejnì li¹í, zadruhé
-asymptoticky pomalej¹í funkce stejnì pro velké N v¾dy prohraje, tak¾e nemá cenu
+asymptoticky pomalej¹í funkce nakonec pro velké N v¾dy prohraje, tak¾e nemá cenu
 (alespoò pøi prvním pøiblí¾ení k problému) multiplikativními konstantami se
 zabývat. Tím pádem nezále¾í ani na èlenech ni¾¹í øádù:
-$$1,5N^2 + 8,5N + 1 \leq 1,5N^2 + 8,5N^2 + N^2 = 11N^2\approx N^2$$
+$$1{,}5N^2 + 8{,}5N + 1 \leq 1{,}5N^2 + 8{,}5N^2 + N^2 = 11N^2\approx N^2$$
 Kdy¾ u¾ toto víme, mù¾eme zanedbávat konstanty prùbì¾nì: $N$ cyklù po
 $\approx~N$~krocích $\Rightarrow~\approx~N^2$ krokù. To nás vede k zavedení tzv.
-{\I asymptotické notace}
+{\I asymptotické notace:}
 
 \h{Asymptotická notace}
-% Okopírováno z minulých zápiskù, lehké opravy, na konci ukazujeme select sort
-% místo E.A.
 \s{Definice:} Pro funkce $f,g: {\bb N} \rightarrow {\bb R}^+$ øekneme,
 ¾e $f$ je $\O(g)$ právì tehdy, kdy¾ $\exists c>0: \forall ^{*} n \in {\bb N}:
 f(n) \leq c \cdot g(n)$.
@@ -222,16 +218,16 @@ n
 ¹koly (le¾í ve stejné komponentì souvislosti)? Dostanu se do ¹koly, kdy¾ v zimì
 napadne hodnì snìhu a nìkteré cesty budou neprùjezdné? A jaký nejkrat¹í úsek
 cest musí silnièáøi prohrnout, aby byla v¹echna místa na mapì dostupná?
-\:Mìjme hlavolam \uv{Lloydova devítka} -- krabièku $3\times3$ s ètvereèky
+\:Mìjme hlavolam \uv{Lloydova devítka} -- krabièku $3\times3$ se ètvereèky
 oznaèenými èísly od jedné do osmi a jednou mezerou, ètvereèky jsou zamíchané a
 na¹ím úkolem je správnì je seøadit. Jak to udìlat? Kolik nejménì krokù nám na
 to staèí? Jde to vùbec se zadáním, které jsme dostali?
 \:Jaké je nejkrat¹í (kladné, celé) èíslo v desítkové soustavì zapsané jen
-èíslicemi 1, 0 dìlitelné tøemi? Nakreslíme orientovaný graf s vrcholy 1 a¾ 13
-a hranami $(x,y),$ $y=10\cdot x \mod 13$ a $y=(10\cdot x + 1) \mod 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 0 do
-1. Jakým algoritmem takový sled najdeme?
+èíslicemi 1, 0 dìlitelné tøinácti? Nakreslíme orientovaný graf s vrcholy 1 a¾ 13
+a hranami $(x,y),$ $y=10\cdot x \mod 13$ a $y=(10\cdot x + 1) \mod 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~0~do~1. Jakým algoritmem takový sled najdeme?
 \endlist
 Podobné a dal¹í úlohy budeme øe¹it v následujících kapitolách.