opora

frantisek.plesicek
from frantisek.plesicek More from this publisher
10.02.2019 Views

Kapitola 7 Složitost Cílem této kapitoly je pochopení aplikace Turingových strojů pro popis a klasifikaci časové a paměťové složitosti problémů a vymezení složitostních tříd těsně spjatých s otázkami časové a paměťové efektivity výpočtů a reálnosti realizovat řešení problémů na počítačích. 7.1 Základní pojmy složitosti 7.1.1 Složitost algoritmů Základní teoretický přístup a volba Turingova stroje jako výpočetního modelu vychází z Church-Turingovy teze: Každý algoritmus je implementovatelný jistým TS. Zavedení TS nám umožňuje klasifikovat problémy (resp. funkce) do dvou tříd: 1. problémy, jež nejsou algoritmicky ani částečně rozhodnutelné (resp. funkce algoritmicky nevyčíslitelné) 2. problémy algoritmicky alespoň částečně rozhodnutelné (resp. funkce algoritmicky vyčíslitelné). Nyní se budeme zabývat třídou algoritmicky (částečně) rozhodnutelných problémů (vyčíslitelných funkcí) v souvislosti s otázkou složitosti jejich rozhodování (vyčíslování). Analýzu složitosti algoritmu budeme chápat jako analýzu složitosti výpočtů příslušného TS, jejímž cílem je vyjádřit (kvantifikovat) požadované zdroje (čas, prostor) jako funkci závisející na délce vstupního řetězce. 7.1.2 Různé případy při analýze složitosti Nejdříve je třeba určit cenu jednoho konkrétního výpočtu konkrétního TS (paměť, čas výpočtu). Mějme TS M. Složitost bude tedy funkcí Compl M : N → N 1 . Je více možností její definice podle toho, který z možných výpočtů na vstupu příslušné délky (a jeho cenu) si vybereme jako určující: 1. analýza složitosti nejhoršího případu, 2. analýza složitosti nejlepšího případu, 3. analýza složitosti průměrného případu. Průměrná složitost algoritmu je definována následovně: Jestliže algoritmus (TS) vede k m různým výpočtům (případům) s cenou c 1 , c 2 , ..., c m , jež nastávají s pravděpodobností p 1 , p 2 , ..., p m , pak průměrná složitost algoritmu je dána jako Σ n i=1 p ic i . Obvykle (alespoň na teoretické úrovni) se věnuje největší pozornost složitosti nejhoršího případu. 1 pro dané n vrací míru složitosti výpočtu M na řetězcích délky n 145

KAPITOLA 7. SLOŽITOST 146 7.1.3 Složitost výpočtů TS Na cenu výpočtu se budeme dívat z hledisek času výpočtu a paměťové náročnosti. • Časová složitost – počet kroků (přechodů) TS provedený od počátku do konce výpočtu. • Prostorová (paměťová) složitost – počet „buněk“ pásky TS požadovaný pro daný výpočet. Příklad 7.1.1 Uvažme následující TS M: x/R x/L M: ∆/R ∆/x ∆/∆ Pro vstup w = ∆xxx∆∆... je: • časová složitost výpočtu M na w rovna 10, • prostorová složitost výpočtu M na w rovna 5. Lemma 7.1.1 Je-li časová složitost výpočtu prováděného TS rovna n, pak prostorová složitost tohoto výpočtu není větší než n + 1. Důkaz. Tvrzení je jednoduchou implikací plynoucí z definice časové a prostorové složitosti. ✷ Nyní budeme definovat funkce udávající složitost TS v závislosti na čase výpočtu (počtu kroků TS) a použitém prostoru (počtu použitých políček pásky). Bude se jednat o analýzu nejhoršího případu: Definice 7.1.1 Řekneme, že k-páskový DTS (resp. NTS) M přijímá jazyk L nad abecedou Σ v čase T M : N → N, jestliže L = L(M) a M přijme (resp. může přijmout) každé w ∈ L v nanejvýš T M (|w|) krocích. Definice 7.1.2 Řekneme, že k-páskový DTS (resp. NTS) M přijímá jazyk L nad abecedou Σ v prostoru S M : N → N, jestliže L = L(M) a M přijme (resp. může přijmout) každé w ∈ L při použití nanejvýš S M (|w|) buněk pásky. Poznámka 7.1.1 Do prostorové složitosti nepočítáme buňky pásky, na nichž je zapsán vstup, pokud nebudou během vypočtu přepsány. Zcela analogicky můžeme definovat vyčíslování určité funkce daným TS v určitém čase, resp. prostoru.

Kapitola 7<br />

Složitost<br />

Cílem této kapitoly je pochopení aplikace Turingových strojů pro popis a klasifikaci<br />

časové a paměťové složitosti problémů a vymezení složitostních tříd těsně<br />

spjatých s otázkami časové a paměťové efektivity výpočtů a reálnosti realizovat<br />

řešení problémů na počítačích.<br />

7.1 Základní pojmy složitosti<br />

7.1.1 Složitost algoritmů<br />

Základní teoretický přístup a volba Turingova stroje jako výpočetního modelu<br />

vychází z Church-Turingovy teze:<br />

Každý algoritmus je implementovatelný jistým TS.<br />

Zavedení TS nám umožňuje klasifikovat problémy (resp. funkce) do dvou tříd:<br />

1. problémy, jež nejsou algoritmicky ani částečně rozhodnutelné (resp. funkce<br />

algoritmicky nevyčíslitelné)<br />

2. problémy algoritmicky alespoň částečně rozhodnutelné (resp. funkce algoritmicky<br />

vyčíslitelné).<br />

Nyní se budeme zabývat třídou algoritmicky (částečně) rozhodnutelných problémů<br />

(vyčíslitelných funkcí) v souvislosti s otázkou složitosti jejich rozhodování<br />

(vyčíslování).<br />

Analýzu složitosti algoritmu budeme chápat jako analýzu složitosti výpočtů<br />

příslušného TS, jejímž cílem je vyjádřit (kvantifikovat) požadované zdroje (čas,<br />

prostor) jako funkci závisející na délce vstupního řetězce.<br />

7.1.2 Různé případy při analýze složitosti<br />

Nejdříve je třeba určit cenu jednoho konkrétního výpočtu konkrétního TS (paměť,<br />

čas výpočtu).<br />

Mějme TS M. Složitost bude tedy funkcí Compl M : N → N 1 . Je více možností<br />

její definice podle toho, který z možných výpočtů na vstupu příslušné délky (a<br />

jeho cenu) si vybereme jako určující:<br />

1. analýza složitosti nejhoršího případu,<br />

2. analýza složitosti nejlepšího případu,<br />

3. analýza složitosti průměrného případu.<br />

Průměrná složitost algoritmu je definována následovně: Jestliže algoritmus<br />

(TS) vede k m různým výpočtům (případům) s cenou c 1 , c 2 , ..., c m , jež nastávají<br />

s pravděpodobností p 1 , p 2 , ..., p m , pak průměrná složitost algoritmu je dána jako<br />

Σ n i=1 p ic i .<br />

Obvykle (alespoň na teoretické úrovni) se věnuje největší pozornost složitosti<br />

nejhoršího případu.<br />

1 pro dané n vrací míru složitosti výpočtu M na řetězcích délky n<br />

145

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!