opora
KAPITOLA 7. SLOŽITOST 147 7.1.4 Složitost a cena atomických operací Pro případ TS předpokládáme, že každý jeho výpočetní krok je stejně náročný. Používáme tedy takzvané uniformní cenové kritérium, kdy každé operaci přiřadíme stejnou cenu. V jiném výpočetním prostředí, než jsou TS, tomu tak ale být nemusí. Používá se ale např. také tzv. logaritmické cenové kritérium, kdy operaci manipulující operand o velikosti i, i > 0, přiřadíme cenu ⌊lg i⌋ + 1. Zohledňujeme to, že s rostoucí velikostí operandů roste cena operací – logaritmus odráží růst velikosti s ohledem na binární kódování (v n bitech zakódujeme 2 n hodnot). Analýza složitosti za takových předpokladů není zcela přesná, důležité ale obvykle je to, aby se zachovala informace o tom, jak rychle roste čas/prostor potřebný k výpočtu v závislosti na velikosti vstupu. 2 Význam srovnávání rychlosti růstu složitosti výpočtů si snad nejlépe ilustrujeme na příkladu: Příklad 7.1.2 Srovnání polynomiální (přesněji kvadratické – n 2 ) a exponenciální (2 n ) časové složitosti: délka vstupu časová složitost časová složitost n c 1 .n 2 , c 1 = 10 −6 c 2 .2 n . , c 2 = 9.766.10 −8 10 0.0001 s 0.0001 s 20 0.0004 s 0.1024 s 30 0.0009 s 1.75 min 40 0.0016 s 1.24 dne 50 0.0025 s 3.48 roku 60 0.0036 s 35.68 století 70 0.0049 s 3.65 mil. roků 7.1.5 Složitost výpočtů na TS a v jiných prostředích Pro rozumná cenová kritéria se ukazuje, že výpočetní složitost je pro různé modely výpočtu blízké běžným počítačům (RAM, RASP stroje) polynomiálně vázaná se složitostí výpočtu na TS (viz dále) a tudíž složitost výpočtu na TS není „příliš“ rozdílná oproti výpočtům na běžných počítačích. • RAM stroje mají paměť s náhodným přístupem (jedna buňka obsahuje libovolné přirozené číslo), instrukce typu LOAD, STORE, ADD, SUB, MULT, DIV (akumulátor a konstanta/přímá adresa/nepřímá adresa), vstup/výstup, nepodmíněný skok a podmíněný skok (test akumulátoru na nulu), HALT. U RAM stroje je program součástí řízení stroje (okamžitě dostupný), u RASP je uložen v paměti stejně jako operandy. • Funkce f 1 (n), f 2 (n) : N → N jsou polynomiálně vázané, existují-li polynomy p 1 (x) a p 2 (x) takové, že pro všechny hodnoty n je f 1 (n) ≤ p 1 (f 2 (n)) a f 2 (n) ≤ p 2 (f 1 (n)). • Logaritmické cenové kritérium se uplatní, uvažujeme-li možnost násobení dvou čísel. Jednoduchým cyklem typu A i+1 = A i ∗ A i (A 0 = 2) jsme schopni počítat 2 2n , což TS s omezenou abecedou není schopen provést v polynomiálním čase (pro uložení/načtení potřebuje projít 2 n buněk při použití binárního kódování). Ilustrujme si nyní určení složitosti v prostředí mimo TS: 2 Algoritmus A 1 , jehož nároky rostou pomaleji než u jiného algoritmu A 2 , nemusí být výhodnější než A 2 pro řešení malých instancí.
KAPITOLA 7. SLOŽITOST 148 Příklad 7.1.3 Uvažme následující implementaci porovnávání řetězců. int str_cmp (int n, string a, string b) { int i; i = 0; while (i value)) { a[j+1] = a[j]; j = j - 1; } a[j+1] = value; } } • Pro určení složitosti aplikujme uniformní cenové kritérium např. tak, že budeme považovat složitost každého řádku programu (mimo deklarace) za jednotku. (Předpokládáme, že žádný cyklus není zapsán na jediném řádku.) • Složitost lze pak určit jako 2n 2 + 4n + 1: – vnitřní cyklus má 4 kroky, provede se 0, 1, ..., n − 1 krát, tj. 4(0 + 1 + ... + n − 1) = 4 n 2 (0 + n − 1) = 2n2 − 2n kroků, – vnější cyklus má mimo vnitřní cyklus 6 kroků (včetně testu ukončujícího vnitřní cyklus) a provede se n krát, tj. 6n kroků, – jeden krok připadá na ukončení vnějšího cyklu. 7.1.6 Asymptotická omezení složitosti Přesná informace o složitosti algoritmu je pro nás většinou zbytečná, o skutečném čase (prostoru) výpočtu vypovídá málo:
- Page 97 and 98: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 99 and 100: KAPITOLA 4. BEZKONTEXTOVÉ JAZYKY A
- Page 101 and 102: Kapitola 5 Turingovy stroje Cílem
- Page 103 and 104: KAPITOLA 5. TURINGOVY STROJE 102 5.
- Page 105 and 106: KAPITOLA 5. TURINGOVY STROJE 104
- Page 107 and 108: KAPITOLA 5. TURINGOVY STROJE 106 L:
- Page 109 and 110: KAPITOLA 5. TURINGOVY STROJE 108 St
- Page 111 and 112: KAPITOLA 5. TURINGOVY STROJE 110 p
- Page 113 and 114: KAPITOLA 5. TURINGOVY STROJE 112
- Page 115 and 116: KAPITOLA 5. TURINGOVY STROJE 114 -
- Page 117 and 118: KAPITOLA 5. TURINGOVY STROJE 116 5.
- Page 119 and 120: KAPITOLA 5. TURINGOVY STROJE 118 D
- Page 121 and 122: KAPITOLA 5. TURINGOVY STROJE 120 5.
- Page 123 and 124: KAPITOLA 5. TURINGOVY STROJE 122 5.
- Page 125 and 126: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 127 and 128: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 129 and 130: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 131 and 132: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 133 and 134: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 135 and 136: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 137 and 138: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 139 and 140: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 141 and 142: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 143 and 144: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 145 and 146: KAPITOLA 6. MEZE ROZHODNUTELNOSTI 1
- Page 147: KAPITOLA 7. SLOŽITOST 146 7.1.3 Sl
- Page 151 and 152: KAPITOLA 7. SLOŽITOST 150 • Napr
- Page 153 and 154: KAPITOLA 7. SLOŽITOST 152 7.2.4 Ne
- Page 155 and 156: KAPITOLA 7. SLOŽITOST 154 • Stro
- Page 157 and 158: KAPITOLA 7. SLOŽITOST 156 7.3.4 Uz
- Page 159 and 160: KAPITOLA 7. SLOŽITOST 158 Pokud pr
- Page 161 and 162: KAPITOLA 7. SLOŽITOST 160 7.5.1 Po
- Page 163 and 164: KAPITOLA 7. SLOŽITOST 162 7.5.4 V
- Page 165 and 166: KAPITOLA 7. SLOŽITOST 164 6. Uveď
KAPITOLA 7. SLOŽITOST 147<br />
7.1.4 Složitost a cena atomických operací<br />
Pro případ TS předpokládáme, že každý jeho výpočetní krok je stejně náročný.<br />
Používáme tedy takzvané uniformní cenové kritérium, kdy každé operaci přiřadíme<br />
stejnou cenu.<br />
V jiném výpočetním prostředí, než jsou TS, tomu tak ale být nemusí. Používá<br />
se ale např. také tzv. logaritmické cenové kritérium, kdy operaci manipulující<br />
operand o velikosti i, i > 0, přiřadíme cenu ⌊lg i⌋ + 1. Zohledňujeme to, že s<br />
rostoucí velikostí operandů roste cena operací – logaritmus odráží růst velikosti s<br />
ohledem na binární kódování (v n bitech zakódujeme 2 n hodnot).<br />
Analýza složitosti za takových předpokladů není zcela přesná, důležité ale<br />
obvykle je to, aby se zachovala informace o tom, jak rychle roste čas/prostor<br />
potřebný k výpočtu v závislosti na velikosti vstupu. 2<br />
Význam srovnávání rychlosti růstu složitosti výpočtů si snad nejlépe ilustrujeme<br />
na příkladu:<br />
Příklad 7.1.2 Srovnání polynomiální (přesněji kvadratické – n 2 ) a exponenciální<br />
(2 n ) časové složitosti:<br />
délka vstupu časová složitost časová složitost<br />
n c 1 .n 2 , c 1 = 10 −6 c 2 .2 n .<br />
, c 2 = 9.766.10<br />
−8<br />
10 0.0001 s 0.0001 s<br />
20 0.0004 s 0.1024 s<br />
30 0.0009 s 1.75 min<br />
40 0.0016 s 1.24 dne<br />
50 0.0025 s 3.48 roku<br />
60 0.0036 s 35.68 století<br />
70 0.0049 s 3.65 mil. roků<br />
7.1.5 Složitost výpočtů na TS a v jiných prostředích<br />
Pro rozumná cenová kritéria se ukazuje, že výpočetní složitost je pro různé modely<br />
výpočtu blízké běžným počítačům (RAM, RASP stroje) polynomiálně vázaná se<br />
složitostí výpočtu na TS (viz dále) a tudíž složitost výpočtu na TS není „příliš“<br />
rozdílná oproti výpočtům na běžných počítačích.<br />
• RAM stroje mají paměť s náhodným přístupem (jedna buňka obsahuje libovolné<br />
přirozené číslo), instrukce typu LOAD, STORE, ADD, SUB, MULT,<br />
DIV (akumulátor a konstanta/přímá adresa/nepřímá adresa), vstup/výstup,<br />
nepodmíněný skok a podmíněný skok (test akumulátoru na nulu), HALT. U<br />
RAM stroje je program součástí řízení stroje (okamžitě dostupný), u RASP<br />
je uložen v paměti stejně jako operandy.<br />
• Funkce f 1 (n), f 2 (n) : N → N jsou polynomiálně vázané, existují-li polynomy<br />
p 1 (x) a p 2 (x) takové, že pro všechny hodnoty n je f 1 (n) ≤ p 1 (f 2 (n)) a<br />
f 2 (n) ≤ p 2 (f 1 (n)).<br />
• Logaritmické cenové kritérium se uplatní, uvažujeme-li možnost násobení<br />
dvou čísel. Jednoduchým cyklem typu A i+1 = A i ∗ A i (A 0 = 2) jsme schopni<br />
počítat 2 2n , což TS s omezenou abecedou není schopen provést v polynomiálním<br />
čase (pro uložení/načtení potřebuje projít 2 n buněk při použití binárního<br />
kódování).<br />
Ilustrujme si nyní určení složitosti v prostředí mimo TS:<br />
2 Algoritmus A 1 , jehož nároky rostou pomaleji než u jiného algoritmu A 2 , nemusí být výhodnější<br />
než A 2 pro řešení malých instancí.