Problémy a algoritmy

Podobné dokumenty
Algoritmy používané ve výpočetní geometrii

Problémy a algoritmy

Časová složitost / Time complexity

Tato tematika je zpracována v Záznamy přednášek: str

ALGORITMY A DATOVÉ STRUKTURY

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

10. Složitost a výkon

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Úvod do informatiky. Miroslav Kolařík

Třídy složitosti P a NP, NP-úplnost

Složitost 1.1 Opera ní a pam ová složitost 1.2 Opera ní složitost v pr rném, nejhorším a nejlepším p ípad 1.3 Asymptotická složitost

Složitost. Teoretická informatika Tomáš Foltýnek

Algoritmy I, složitost

Dynamické datové struktury III.

Triangulace. Význam triangulace. trojúhelník je základní grafický element aproximace ploch předzpracování pro jiné algoritmy. příklad triangulace

TGH05 - Problém za milion dolarů.

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Prohledávání do šířky = algoritmus vlny

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Digitální učební materiál

Složitost Filip Hlásek

Základy algoritmizace, návrh algoritmu

Dynamické programování

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Různé algoritmy mají různou složitost

Algoritmizace prostorových úloh

Úvod do informatiky. Miroslav Kolařík

Složitost algoritmů. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

Digitální učební materiál

Výpočetní složitost algoritmů

Optimalizace obecný úvod. [proč optimalizovat?] Formalizace problému. [existují podobné problémy?]

Vztah teorie vyčíslitelnosti a teorie složitosti. IB102 Automaty, gramatiky a složitost, /31

Projekční algoritmus. Urychlení evolučních algoritmů pomocí regresních stromů a jejich zobecnění. Jan Klíma

Zákony hromadění chyb.

PŘÍJMENÍ a JMÉNO: Login studenta: DATUM:

Výroková a predikátová logika - III

IB111 Úvod do programování skrze Python

Třída PTIME a třída NPTIME. NP-úplnost.

Binární soubory (datové, typované)

Databáze, sítě a techniky programování X33DSP

Třída PTIME a třída NPTIME. NP-úplnost.

TGH12 - Problém za milion dolarů

3. úloha - problém batohu metodami branch & bound, dynamické programování, heuristika s testem

Časová a prostorová složitost algoritmů

Voronoiův diagram. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta

Datové struktury 2: Rozptylovací tabulky

Základy algoritmizace

Dynamické datové struktury IV.

MATURITNÍ TÉMATA Z MATEMATIKY

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Algoritmizace řazení Bubble Sort

Digitální učební materiál

NMIN101 Programování 1 2/2 Z --- NMIN102 Programování /2 Z, Zk

Algoritmizace složitost rekurzivních algoritmů. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Základní informace o předmětu Otázka:

Triangulace. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

Algoritmizace diskrétních. Ing. Michal Dorda, Ph.D.

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

12. Globální metody MI-PAA

Základy algoritmizace a programování

Da D to t v o é v ty t py IB111: Datové typy

COMPLEXITY

Algoritmizace prostorových úloh

Dynamické programování

Rekurentní rovnice, strukturální indukce

Náplň. v Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

3. Třídy P a NP. Model výpočtu: Turingův stroj Rozhodovací problémy: třídy P a NP Optimalizační problémy: třídy PO a NPO MI-PAA

Úloha - rozpoznávání číslic

Markov Chain Monte Carlo. Jan Kracík.

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Problémy třídy Pa N P, převody problémů

Výukový materiál zpracován v rámci projektu EU peníze školám

Algoritmy a algoritmizace

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

NP-úplnost problému SAT

Stromy, haldy, prioritní fronty

Zobrazte si svazy a uspořádané množiny! Jan Outrata

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Úvod do mobilní robotiky AIL028

Kartografické stupnice. Přednáška z předmětu Tematická kartografie (KMA/TKA) Otakar Čerba Západočeská univerzita

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Základní datové struktury

Konvexní obálka množiny bodů.

Algoritmizace prostorových úloh

Výroková a predikátová logika - II

Úvod do mobilní robotiky AIL028

Asymptotická složitost algoritmů

Dynamické datové struktury I.

STATISTICKÉ ODHADY Odhady populačních charakteristik

Od Turingových strojů k P=NP

Úvod do problematiky

Prioritní fronta, halda

Algoritmizace- úvod. Ing. Tomáš Otáhal

11 VYPOČITATELNOST A VÝPOČTOVÁ SLOŽITOST

Transkript:

Problémy a algoritmy Algoritmus. Vlastnosti algoritmů. Dělení algoritmů. Složitost algoritmů. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie. Přírodovědecká fakulta UK. 1 / 68

Obsah přednášky 1 Úvodní informace o předmětu 2 Problém a algoritmus 3 Algoritmus 4 Analýza efektivity algoritmu Složitost algoritmu Asymptotická složitost 5 Složitost problému 6 Základní techniky návrhu algoritmu 7 Volba algoritmu a problém 2 / 68

1. Plán přednášek Tematické celky: (1,2) Problémy a algoritmy. (3) Úvod do výpočetní geometrie. (4) Geometrické vyhledávání. (5) Konvexní obálky. (6,7) 2D triangulace. (8) Voroného diagramy. (9) Topologická kostra. (10, 11) Kartografická generalizace. Úvodní informace o předmětu (12) Operace s uzavřenými oblastmi v GIS. Cvičení: Implementace algoritmů v jazyce C++ pod GNU/Linux. Literatura: [1] Rourke O. J.: Computational Geometry in C, 2005, Cambridge University Press. [2] de Berg, van Kreveld, Overmars M., Schwarzkopf O.: Computational Geometry, 2000, Springer. 3 / 68

Problém a algoritmus 2. Problém Termín mající více významů. Definice 1 (Slovník spisovného jazyka českého) Věc k řešení, nerozřešená sporná otázka, otázka k rozhodnutí, nesnadná věc Definice 2 (Wikipedia). Podmínky nebo situace nebo stav, který je nevyřešený, nebo nechtěný, nebo nežádoucí. Problém vyžaduje řešení. Pro nalezení řešení nutné pochopit nejdůležitější aspekty problému. Ne všechny problémy jsme v současné době schopni úspěšně a efektivně vyřešit!!! 4 / 68

Problém a algoritmus 3. Problém & počítačová kartografie Zajímají nás problémy, které lze přesně formulovat s využitím matematického aparátu, jejichž řešení lze mechanizovat (např. s využitím počítače). Kartografie je věda a současně umění, u řady problémů neexistuje exaktní řešení: barevnost mapy, čitelnost mapy, kartografická generalizace. Řešení problémů v počítačové kartografii (Digital Cartography) založeno na kombinaci exaktních a subjektivních postupů. Snaha nalézt exaktní postupy řešení a omezovat vliv lidského faktoru při zpracování geodat. V každém okamžiku přibývá mnohem více dat, než lze ručně zpracovat. 5 / 68

Problém a algoritmus 4. Popis problému Problém v geoinformatice/počítačové kartografii lze formálně zapsat takto: NÁZEV PROBLÉMU: Slovní popis problému VSTUP: Popis přípustného vstupu (množina vstupních dat). VÝSTUP: Popis výstupu, tj. výsledku, který je pro daný vstup očekáván. Musí existovat funkce f přiřazující vstupním datům požadovaný výstup. Nalezení řešení problému nalezení příslušné funkce f. Definice: Každý problém P je určen uspořádanou trojicí (IN, OUT, f), kde IN představuje množinu přípustných vstupů, OUT množinu očekávaných výstupů a f : IN OUT funkci přiřazující každému vstupu očekávaný výstup. VSTUP/VÝSTUP: Kombinace znaků, celých čísel či přirozených čísel představující kódování. 6 / 68

5. Algoritmizace problémů Algoritmus Dynamický rozvoj přírodních/technických věd přináší řadu nových problémů. Poptávka po odbornících: kteří se orientují v současné problematice a jsou schopni problémy efektivně řešit, kteří jsou schopni hledat řešení nových problémů. Většina současných problémů z oblasti přírodních/technických věd je nějak řešitelná s využitím knihoven či specializovaného software. Vždy lze nalézt nějakou variantu problému, která ještě nebyla zpracována, či problém drobně modifikovat. Jak postupovat dále? Čekat, až problém někdo někdy vyřeší? Řešení problému hledáno ve formě obecného předpisu zahrnujícího posloupnost jednotlivých kroků, tzv. algoritmus řešení. Algoritmizace problémů rozvíjí logické myšlení, zejména schopnost abstraktního uvažování. 7 / 68

Algoritmus 6. Algoritmus Pojem cca 1000 let starý, poprvé použit významným perským matematikem Abú Abdallahem Muhammadem ibn Musa al-khwarizmim. 1 Algoritmus je obecný předpis sloužící pro řešení zadaného problému. Představuje posloupnost kroků doplněných jednoznačnými pravidly. Setkáváme se s ním i v běžném životě: kuchyňský recept, lékařský předpis. Algoritmicky řešitelné problémy Algoritmus A řeší problém P, pokud libovolnému vstupu x, x IN, přiřazuje v konečném počtu kroků (alespoň jeden) výstup y, y OUT, tak, že platí: y = f(x). Poznámky: Předpokládáme, že algoritmus A rozumí vstupnímu kódování a je schopen uložit data ve výstupním kódování. Pro zadaný vstup x může existovat více než jedno řešení y, algoritmus A by měl nalézt alespoň jedno. 1 Fibonacci jeho příjmení zkomolil na Algorizmi a začal tento termín používat. 8 / 68

Algoritmus 7. Vlastnosti algoritmu A) Determinovanost Algoritmus musí být jednoznačný jako celek i v každém svém kroku. Tohoto stavu nelze dosáhnout přirozenými jazyky, proto jsou pro zápis algoritmu používány formální jazyky. Algoritmus je invariantní vůči formálnímu jazyku!!! B) Rezultativnost Algoritmus vede vždy ke správnému výsledku v konečném počtu kroků. C) Hromadnost Algoritmus lze použít pro řešení stejné třídy problémů s různými vstupními hodnotami. Pro jejich libovolnou kombinaci obdržíme jednoznačné řešení. D) Opakovatelnost Při opakovaném použití stejných vstupních dat vždy obdržíme tentýž výsledek. Pozor na heuristiky! E) Efektivnost Každý krok algoritmu by měl být efektivní. Tomáš Krok Bayer využívá bayertom@natur.cuni.cz elementární (Katedraoperace, aplikované geoinformatiky které Problémy lze a algoritmy kartografie. provádět Přírodovědecká v konečném fakulta UK.) čase. 9 / 68

Algoritmus 8. Řešitelnost problému Řešitelnost problému nelze posuzovat obecně, je nutné stanovit určitá omezení. Omezení problému na speciální typ problému, tzv. ANO/NE problém Problém musí být řešitelný v konečném čase. ANO/NE problém (tzv. rozhodovací problém): Vstupní množina IN = {0, 1} a výstupní množina OUT = {0, 1} jsou dvouprvkové, algoritmus A, problém P. VSTUP: x 1, x 2 VÝSTUP: f(x 1 ) = f(x 2 )? (tj. ANO/NE) Pokud algoritmus A řeší rozhodovací problém problém P (přiřadí správně odpovědi a skončí v konečném čase), problém P označujeme jako algoritmicky rozhodnutelný. Pokud algoritmus A vstupu, na který je odpověd 1, přiřadí správnou odpověd 1 a skončí a pro vstup, na který je odpověd 0, přiřadí odpověd 0 nebo je jeho běh nekonečný, problém P označujeme jako algoritmicky částečně rozhodnutelný. V jiném případě označujeme problém jako algoritmicky nerozhodnutelný. 10 / 68

Algoritmus 9. Doplňkový problém P Doplňkový problém P k rozhodovacímu problému P. Představuje takový problém, který má stejné vstupy jako P, ale výstupy jsou prohozeny. Vztahy mezi P a P: Definice1: Je -li P rozhodnutelný problém, pak je P také částečně rozhodnutelný. Definice 2: Je -li P rozhodnutelný, pak je i P rozhodnutelný. Definice 3, negace (2): Je -li P nerozhodnutelný, pak je i P nerozhodnutelný. Postova věta: Je -li P částečně rozhodnutelný a P částečně rozhodnutelný, pak je P rozhodnutelný. 11 / 68

10. Efektivita algoritmu Analýza efektivity algoritmu Efektivita algoritmu je důležitou výkonnostní charakteristikou. Výkonnostní charakteristiky algoritmů nelze ignorovat: časové a materiální úspory. Každý algoritmus má kritické místo (tzv. bottleneck ), které spotřebuje většinu výkonu optimalizace. Efektivní algoritmus řeší problém s minimálními nároky na hardware v co nejrychlejším čase, cílem je co neoptimálnější využití existujících prostředků Time Is Money. Rychlost běhu algoritmu ovlivňuje rychlost běhu jeho nejpomalejší komponenty, pozor na zdánlivě nepodstatné detaily. Nejrychlejší vs. optimální řešení: Nejjednodušší řešení zpravidla nejdéle trvá, ale je jednoduché na implementaci (nenáročné aplikace). Nejrychlejší řešení bývá zpravidla velmi náročné na implementaci (časově kritické aplikace), nemusí však být stabilní. Optimální řešení bývá řádově pomalejší než nejrychlejší varianta, avšak spolehlivé. Průmyslová implementace 12 / 68 V průmyslové implementaci nejčastěji používáno optimální řešení aneb v

Analýza efektivity algoritmu 11. Analýza efektivity algoritmu Efektivita algoritmu stanovena na základě jeho analýzy. Analýzu algoritmu je možné provádět: Empiricky: srovnáním doby běhu různých algoritmů. Provádí se nad 3 množinami dat: náhodná data (ověřují funkcionalitu algoritmu), data s nevhodnou vstupní konfigurací (ověřují schopnost zpracovat libovolná data), skutečná data. Exaktně: s využitím matematické analýzy. Analýza řad, hledání asymptotických funkcí. Cíle analýzy algoritmů: Porovnání různých algoritmů řešící stejný problém: výběr nejvhodnějšího algoritmu (optimalizace volbou algoritmu). Odhad výkonnosti algoritmu: lze tento algoritmus použít pro zadaný problém a vstup? Nastavení parametrů algoritmu: jak nastavit vstupní parametry, aby algoritmus běžel co nejefektivněji? Výběr vhodných datových struktur (optimalizace volbou datové struktury) Častou chybou je pouhé sledování výkonnostních charakteristik algoritmů. Implementace a odladění výkonově efektivnějšího algoritmu pro libovolný vstupní množinu může být značně složité vhodnější je použít pomalejší, ale univerzálnější algoritmus. 13 / 68

Analýza efektivity algoritmu Složitost algoritmu 12. Složitost algoritmu Jeden problém může být řešen sadou různých algoritmů. Kdyby počítač pracoval s nekonečnou rychlostí, nezáleželo by na volbě algoritmu. V praxi vykonání instrukce trvá určitou dobu, nejrychlejší je přiřazení, nejpomalejší násobení/dělení. Vyhýbat se mocninám a odmocninám, velmi pomalý výpočet. Různé algoritmy se budou lišit dobou běhu, a to mnohdy velmi významně. Jak exaktně určit, rychlost algoritmu a množství spotřebované paměti? Dvě kritéria: Časová složitost algoritmu (Time Complexity) Popisuje dobu zpracování vstupních dat D algoritmem A v čase T, vyjádřena časovou funkcí t T = t(a(d)) Pamět ová složitost algoritmu (Space Complexity) Popisuje pamět ovou náročnost algoritmu. 14 / 68

Analýza efektivity algoritmu Složitost algoritmu 13. Posuzování složitosti algoritmu Doba běhu algoritmu i pamět ová náročnost se mění, existují dva přístupy vyjadřující dobu běhu: A) V závislosti na velikosti vstupní množiny Složitost lze definovat jako funkcí velikosti vstupu n. Závislost doby běhu na n lze hledat v exaktním tvaru (např. 4n 3 9n 2 + 20n + 27), což není časté, nebo běžně ve formě odhadu (např. O(n 3 )). B) V závislosti na vstupní množině dat Pro vstupní množinu se stejnou velikostí n se doba běhu může výrazně měnit (např. třídící algoritmus se chová výrazně jinak, pokud má na vstupu náhodnou, částečně setříděnou nebo reverzně setříděnou posloupnost dat). Složitost lze posuzovat: dle nejhoršího možného případu (Worst Case). dle průměrné doby běhu (Average Case). dle nejlepšího možného případu (Best Case). 15 / 68

Analýza efektivity algoritmu Složitost algoritmu 14. Worst/Average Case Nejhorší možný případ (Worst Case): Pro dané n je výsledkem maximum z dob běhu algoritmu pro všechny vstupy velikosti n. T WORST = max(t 1 (n), T 2 (n),..., T n (n)) Zachycuje nejdelší možnou dobu běhu algoritmu (např. nevhodná konfigurace vstupních dat), může být o několik řádů vyšší než Average Case. Algoritmus se bude ve všech případech chovat lépe než pesimistický odhad. V praxi k takové situaci nemusí dojít (nebo jen ve velmi řídkých případech), vlastnosti algoritmu mohou být tímto odhadem zkresleny. Průměrná doby běhu (Average Case): Průměrná doba výpočtu na (běžných) datech velikosti n. Může být o několik řádů lepší než Worst Case. Problematické určení, nejčastěji medián. T AVERAGE = t(t1 (n), T 2 (n),..., T n (n)) Nemusí reprezentovat skutečná data, pouhý matematický konstrukt. 16 / 68

Analýza efektivity algoritmu Složitost algoritmu 15. Best Case Nejlepší možný případ (Best Case) Pro dané n je výsledkem minimum z dob běhu algoritmu pro všechny vstupy velikosti n. T BEST = min(t 1(n), T 2(n),..., T n(n)) Zachycuje nejkratší možnou dobu běhu algoritmu (pro ideální konfiguraci vstupních dat). Abychom se abstrahovali od závislosti na hardware, vytváříme model tzv. abstraktního počítače, jehož parametry jsou odvozeny od skutečného počítače. Příkladem abstraktního matematického počítače může být tzv. Turingův stroj nebo tzv. RAM (Random Acces Machine). U dobře navržených algoritmů rozdíl mezi Best Case a Worst Case malý. Optimalizace algoritmu: snížení rozpětí mezi Best Case a Worst Case. Pokud Best Case = Worst Case, nelze dále optimalizovat. Některé algoritmy nejsou z důvodu vysokého Worst Case používány pro časově kritické aplikace, např. QuickSort: Average Case T AVER = n log n, ale Worst Case: T WORST = n 2!!!. Nahrazován HeapSortem, kde AC WC:T AVER = T WORST = n log n. 17 / 68

Analýza efektivity algoritmu Složitost algoritmu 16. Ukázka 18 / 68

Analýza efektivity algoritmu Asymptotická složitost 17. Asymptotická složitost Pro složitější algoritmy je přesné (algebraické) vyjádření složitosti algoritmu matematicky náročné. Ve většině případů postačí nahrazení přesného vyjádření časové složitosti jeho vhodným odhadem. Asymptotická složitost se pro n limitně blíží k algebraické hodnotě složitosti. Zásady: 1) V matematických výrazech ignorujeme členy malých hodnot (ignorujeme aditivní a multiplikativní konstanty). 2) Do testování nezahrnujeme části algoritmů, které přispívají k analyzovanému výkonu nepatrně (tj. zanedbáme rychlé části algoritmu). 5 asymptotických odhadů složitosti: 1) Asymptotický horní odhad časové složitosti: ostrý O(g(N)), neostrý o(g(n)). 2) Asymptotický dolní odhad časové složitosti: ostrý Ω(g(N)), neostrý ω(g(n)). 3) Asymptotický oboustranný odhad časové složitosti: Θ(g(N)). 19 / 68

Analýza efektivity algoritmu Asymptotická složitost 18. Asymptotický horní odhad složitosti O(g(N)) Ilustruje nejhorší možný případ doby běhu algoritmu. Předpoklad 1: Zanedbání multiplikativní konstanty c Necht f(n) je libovolná funkce a c libovolná konstanta, c > 0. Pak funkce f(n) a c f(n) jsou označovány jako (asymptoticky) stejně rychle rostoucí. Předpoklad 2: Zanedbání aditivní konstanty d Necht f(n) je libovolná funkce a d libovolná konstanta, d > 0. Pak funkce f(n) a f(n) + d jsou označovány jako (asymptoticky) stejně rychle rostoucí. Důsledky obou předpokladů: funkce f(n) a c f(n) + d jsou stejně rychle rostoucí. Např. funkce 0.001n 2, 0.5n 2 50, 100n 2 + 90, 500000n 2 + 100000 patří do stejné třídy (kvadratické funkce). 20 / 68

Analýza efektivity algoritmu Asymptotická složitost 19. Definice O(g(N)) Pro libovolné funkce f, g: N N platí: f(n) O(g(n)) ( k N)( n 0 N)( n > n 0 ): f(n) k g(n). Komentář k definici: Z definice plyne, že funkce f(n) roste řádově nejvýše rychle jako g(n), g(n) je horním odhadem f(n). Z definice nevyplývá, že f(n) g(n). Jedná se o řádový růst, zanedbáváme aditivní a multiplikativní konstanty. Z definice nevyplývá, že n : f(n) g(n). Existuje nějaké (n 0 N)(n 0 > N) od kterého vztah asymptoticky platí. Z definice vyplývá, že f(n) O(g(n) tehdy, pokud pro dostatečně velkou konstantu k platí f(n) k g(n), tj. existuje pouze konečné množství výjimek. 21 / 68

Analýza efektivity algoritmu Asymptotická složitost 20. Ukázka asymptotického horního odhadu O(g(N)) Příklad: Platí, že 20n 2 O(0.001n 2 )?. Řešení: 20n 2 k 0.001n 2. k 20 = 20000. Platí. 0.001 22 / 68

Analýza efektivity algoritmu Asymptotická složitost 21. Pravidla pro práci s O-notací 1) O(O(f(n)) O(f(n)) 2) O(f(n)) + O(f(n)) O(f(n)) 3) c O(g(n)) O(g(n)) 4) O(c g(n)) O(g(n)) 5) f(n) g(n) = O(h(n)) f(n) = g(n) + O(h(n)) 6) O(f(n)) O(g(n)) O(f(n) g(n)) f(n) O( g(n) ) 8) n k O(f(n)) O(f(n) n k ) 7) O(f(n)) O(g(n) 9) O(f(n) + g(n)) O(max(f(n), g(n))) 23 / 68

Analýza efektivity algoritmu Asymptotická složitost 22. Příklady Příklad 1, zjednodušení výrazu: (O(n) + n)(n + O(lg(n)) + O(n) + 1) + O(50) (O(n) + n)(n + O(lg(n)) + O(n)) = O(n 2 ) + n 2 + O(n lg(n)) + O(n 2 ) + O(n 2 ) + O(n 2 ) + O(n) + n + O(50). O(n 2 ) + n 2 + O(n lg(n)) + O(n 2 ) + O(n 2 ) + O(n 2 ) + O(n) + n + O(50) = O(n 2 ) + n 2. Příklad 2, zjednodušení výrazu: (10 lg(n) + O(n) + 4n) n n lg n + O(n) (10 lg(n) + O(n) + 4n) 10 lg(n) + O(n) + 4n n = n lg n + O(n) lg n + O(1) = 10 + O( n logn ) + 4n = O(n) + n. log n. 24 / 68

Analýza efektivity algoritmu Asymptotická složitost 23. Další asymptotické odhady (1/2) Asymptotický horní odhad složitosti O(g(n)) (ostrý): Pro libovolné funkce f, g: N N platí: f(n) O(g(n)) ( k N)( n 0 N)( n > n 0 ): f(n) k g(n). Interpretace: f roste nejvýše tak rychle jako g. Asymptotický dolní odhad složitosti Ω(g(n)) (ostrý): Pro libovolné funkce f, g: N N platí: f(n) Ω(g(n)) ( k N)( n 0 N)( n > n 0 ): f(n) k g(n). Interpretace: f roste nejméně tak rychle jako g. Asymptotický horní odhad složitosti o(g(n)) (neostrý): Pro libovolné funkce f, g: N N platí: f(n) o(g(n)) ( k N)( n 0 N)( n > n 0 ): f(n) > k g(n). Interpretace: f roste pomaleji než g. 25 / 68

Analýza efektivity algoritmu Asymptotická složitost 24. Další asymptotické odhady (2/2) Asymptotický dolní odhad složitosti ω(g(n)) (neostrý): Pro libovolné funkce f, g: N N platí: f(n) ω(g(n)) ( k N)( n 0 N)( n > n 0 ): k f(n) < g(n). Interpretace: f roste rychleji než g. Asymptotický oboustranný (horní i dolní) odhad Θ(g(n)) : Pro libovolné funkce f, g: N N platí: f(n) Θ(g(n)) ( k 1 N)( k 2 N)( n 0 N)( n > n 0 ): 0 k 1 g(n) f(n) k 2 g(n). Interpretace: Odhad stejné rychlosti růstu, f roste stejně rychle jako g, tj. složitost algoritmu daného f(n) je asymptoticky stejná jako g(n). Popisuje očekávanou složitost (tj. průměrný případ). Vztahy mezi O-notacemi jsou platné i pro ostatní asymptotické odhady Ω(g(n)), o(g(n)), ω(g(n)). V praxi jsou nejčastěji používány asymptotické odhady O(g(n)), Ω(g(n)), 26 / 68

Analýza efektivity algoritmu Asymptotická složitost 25. Ukázka asymptotického dolního odhadu Ω(g(N)) 27 / 68

Analýza efektivity algoritmu Asymptotická složitost 26. Ukázka asymptotického oboustranného odhadu Θ(g(N)) 28 / 68

Analýza efektivity algoritmu Asymptotická složitost 27. Příklady Př. 1: Který kód proběhne rychleji? int n = 100; int sum = 0; for (i = 0; i < n; i++){ for (j = 0; j < i; j++){ sum += i+j; } } int n = 50;int sum = 0; for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ sum += i+j; } } První kód: vnější cyklus 100x, vnitřní 0,1,2,...,99, celkem 50*99=4950x Druhý kód: vnější cyklus 50x, vnitřní cyklus 50, celkem 50*50=2500. Tomáš Druhý Bayer bayertom@natur.cuni.cz cyklus je rychlejší. (Katedra aplikované geoinformatiky Problémy a algoritmy kartografie. Přírodovědecká fakulta UK.) 29 / 68

Analýza efektivity algoritmu Asymptotická složitost 28. Příklady Př. 2: Problém s dobou řešení k n 2 je na řešen pro n = 10000 na PC. Jak je možné zvětšit vstup, aby byla úloha na 10x rychlejším počítači vyřešena ve stejném čase? Staré PC: k 10000 2,nové PC 10 k 10000 2. 10 k 10000 2 = k n 2 n = 100000 = 31623. Poměr se zvětší 31623. = 3. 10000 Př. 3: Algoritmus A 1 pro řešení úlohy použije 10000n + 40000 operací, algoritmus A 2 pro řešení úlohy použije 12n 2 + 9 operací. Pro jakou množinu dat je výhodnější použít A 2? 12n 2 + 9 10000n + 40000 12n 2 10000n 39991 < 0 n 1 = 4, n 2 = 837. Pro n < 837 je vhodnější algoritmus A 2. 30 / 68

Analýza efektivity algoritmu Asymptotická složitost 29. Příklady Př. 4: Která tvrzení jsou pravdivá? 1) 20n O(n) 2) 60n 2 100n + 249 O(n 2 ) 3) n 2 O(n log n) 4) log n O(n) 5) n log n O(n 2 ) 6) n log n Ω(n) 7) n log n Ω(n 2 ) 8) n Ω(n log n) Řešení: Ad 1) Patří do stejné skupiny, pravdivé. Ad2) viz 1) Ad 3) n log n roste pomaleji než n 2, nepravdivé. Ad 4) n roste rychleji než log n, pravdivé. Ad 5) n 2 roste rychleji než n log n, pravdivé. Ad 6) n roste pomaleji než n log n, pravdivé. Ad 7) n 2 roste rychleji než n log n, nepravdivé. Ad 8) n log n roste rychleji než n, nepravdivé. 31 / 68

Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Problémy C n = a algoritmy kartografie. n Přírodovědecká fakulta UK.) 32 / 68 Analýza efektivity algoritmu Asymptotická složitost 30. Příklady odhadů složitosti Algoritmus 1: C 1 = 1; pro n > 1 :C n = C n 1 + n: procházení n 1 položek Algoritmus 2: C n = C n 1 + n = C n 2 + (n 1) + n = C n 3 + (n 2) + (n 1) + n......... = C 1 + 2 +... + (n 2) + (n 1) + n = C 1 = 0; pro n > 1 :C n = C n/2 + 1, n = 2 N : půlení vstupu Divide and Conquer. Algoritmus 3: C n = log 2 (N) n(n + 1) 2 C 1 = 0; pro n > 2 :C n = C n/2 + n, n = 2 N : půlení vstupu + kontrola vstupní položky

Analýza efektivity algoritmu Asymptotická složitost 31. Charakteristika algoritmů dle časové složitosti Složitost Vyjádření Charakteristika Konstantní 1 Konstantní doba běhu programu. Nezávisí na vstupních datech. Logaritmická log(n) Doba běhu se mírně zvětšuje v závislosti na N. Řešení hledáno opakovaným dělení vstupní množiny na menší množiny (hledání v binárním stromu). Lineární n Doba běhu programu roste lineárně s N. Zpracováván každý prvek, např.cyklus. n log(n) n log(n) Doba běhu roste téměř lineárně. Opakované dělení vstupního problému na menší problémy, které jsou řešeny nezávisle (Divide and Conquer, např. třídění). Kvadratická n 2 Doba běhu roste kvadraticky, vhodný pro menší množiny dat. Vnořený cyklus. Kubická n 3 Doba běhu roste s třetí mocninou, dvojnásobně vnořený cyklus. V praxi snaha nahrazovat algoritmus předchozími dvěma kategoriemi (Greedy algoritmy) Exponenciální 2 n Exponenciální doba běhu. Použitelné pro množiny do n=30 Aplikace v kryptografii. 33 / 68

Analýza efektivity algoritmu Asymptotická složitost 32. Ukázka časové složitosti algoritmů Vstupní množina n = 10, 100, 1000 prvků. Počet operací nutných pro řešení problému. Složitost n = 10 n = 100 n = 1000 Logaritmická složitost 1 2 3 Lineární složitost 10 100 1000 Kvadratická složitost 100 10000 1.0 10 6 Kubická složitost 1000 1.0 10 6 1.0 10 9 Bikvadratická složitost 10000 1.0 10 8 1.0 10 12 Exponenciální složitost 1024 1.3 10 30 1.1 10 301 Faktoriální složitost 3.6 10 6 9.3 10 157 4.0 10 2567 34 / 68

Analýza efektivity algoritmu Asymptotická složitost 33. Ukázka doby běhu algoritmů Ukázka doby běhu algoritmu pro n = 10 9. CPU: Počet operací/s 106 s, 109 s, 1012 s. Složitost CPU 106 CPU 109 CPU 1012 s s s Logaritmická složitost hodiny vteřiny okamžitě Lineární složitost hodiny vteřiny okamžitě N log(n) hodiny vteřiny okamžitě Kvadratická složitost nikdy roky týdny Kubická složitost nikdy nikdy měsíce Bikvadratická složitost nikdy nikdy roky Exponenciální složitost nikdy nikdy nikdy Faktoriální složitost nikdy nikdy nikdy Nepostačuje zakoupení výkonnějšího PC. 35 / 68

Analýza efektivity algoritmu Asymptotická složitost 34. Grafické znázornění algoritmů dle časové složitosti Vstupní množina: n (0, 20) 36 / 68

Složitost problému 35. Složitost problému vs složitost algoritmu Dle výše uvedených postupů lze určit složitost algoritmu. Jak přejít ke složitosti problému? Problém může být řešen řadou algoritmů s různou složitostí: O(n 3 ), O(n 2 ), O(n log n)... Složitost problému odpovídá složitosti efektivního algoritmu, který problém řeší. Věty o vztazích složitosti problému a algoritmu: Věta 1: Problém P má složitost O(g(n)), jestliže pro něj existuje algoritmus řešící ho v O(g(n)). Interpretace: Pokud se podaří nalézt algoritmus se složitostí O(g(n)), pak má problém i složitost O(g(n)). Věta 2: Problém P má složitost Ω(g(n)), jestliže pro něj existuje algoritmus řešící ho v Ω(g(n)). Interpretace: Neexistuje algoritmus, který by problém řešil rychleji. Velmi obtížné matematické důkazy!!! Věta 3: Problém P má složitost Θ(g(n)), jestliže pro něj existuje algoritmus řešící ho v Θ(g(n)). Interpretace: 1)+2) Hledán algoritmus se složitostí O(g(n)) + důkaz, že neexistuje rychlejší Tomáš algoritmus. Bayer bayertom@natur.cuni.cz (Katedra aplikované geoinformatiky Problémy a algoritmy kartografie. Přírodovědecká fakulta UK.) 37 / 68

Složitost problému 36. Třída složitosti algoritmů Zaváděny pro (hierarchickou) kategorizaci problémů dle jejich složitosti. Rozčlenění problémů do tříd téže složitosti umožňuje: 1) Odhalovat vzájemné podobnosti těchto problémů. 2) Řešení jednoho problému převodem na jiný problém, tj. převodu problému s neznámým řešením na podobný problém s již známým řešením. Problém se snažíme zařadit do třídy s co nejnižší složitostí. Většina problémů má limitní hranici složitosti, po jejímž dosažení již algoritmus nelze urychlit. Definice: Pro funkci f : N N označujeme třídou časové složitosti τ(f(n)) množinu problémů P, které lze řešit s časovou složitostí O(f). P τ(n) τ(n log n) τ(n 2 ) τ(n 3 ) τ(2 n ). 38 / 68

Složitost problému 37. Třída složitosti PTIME Základní třídy složitosti: třída složitosti PTIME (problémy rychle řešitelné), třída složitosti NPTIME (problémy rychle verifikovatelné), problémy algoritmicky řešitelné (ne deterministicky v polynomiálním čase), problémy algoritmicky neřešitelné. Třída složitosti PTIME: Do této třídy patří problémy řešitelné algoritmy s polynomiální složitostí: O(n c ). PTIME = τ(n c ) Problémy, pro něž existuje polynomiální algoritmus, nazýváme výpočetně snadné, představují prakticky zvládnutelné problémy. V praxi nejčastěji používány algoritmy se složitostí: O(n), O(n log(n), O(n 2 ), O(n 3 ). Nejznámější problémy třídy PTIME: aritmetické operace, třídění, vyhledávání, některé grafové či geometrické algoritmy. 39 / 68 c=0

Složitost problému 38. Deterministické a nedeterministické algoritmy Nedeterministický algoritmus: při opakovaném stejném vstupu dává různé výsledky (ke každé hodnotě vstupu definována více variant výstupu, algoritmus se rozhoduje náhodně/pseudonáhodně). Deterministický algoritmus: při opakovaném stejném vstupu dává stejné výsledky (ke každé hodnotě vstupu definována hodnota výstupu). Pro každou množinu vstupních dat existuje 2 nc potenciálních řešení, u každého z nich nutné zjistit, zda se jedná o skutečné řešení odpověd ANO/NE, vede opět k rozhodovacímu problému. Definice: Nedeterministický algoritmus A rozhoduje ANO/NE problém P, pokud: Pro problém, na nějž je odpověd ANO alespoň jeden výpočet nedeterministického algoritmu A vydá ANO. Pro problém, na nějž je odpověd NE každý výpočet nedeterministického algoritmu A vydá NE. Převoditelnost lze realizovat v polynomiálním čase. Je -li vstupní formule splnitelná, alespoň jeden opakovaný výpočet tuto skutečnost Tomáš ověří Bayer vydáním bayertom@natur.cuni.cz ANO.(Katedra aplikované geoinformatiky Problémy a algoritmy kartografie. Přírodovědecká fakulta UK.) 40 / 68

Složitost problému 39. Třída složitosti NPTIME Časová složitost nedeterministického algoritmu: Časovou složitostí nedeterministického algoritmu A představuje funkce T A : N N, kde T A(n) je délkou nejdelšího výpočtu algoritmu A pro vstup velikosti n T A(n) = max(t A). Třída NPTIME je třídou všech problémů, které jsou rozhodovány Nedeterministickými polynomiálními algoritmy v polynomiálním čase O(n c ), c > 0. Existuje pro ně verifikační algoritmus pracující v polynomiálně omezeném čase. Použití u tzv. optimalizačních úloh obslužné algoritmy: Jak optimalizovat počet pokladen, aby fronta byla co nemenší a náklady zaměstnavatele co nejnižší? Jak optimalizovat dopravní značení (semafory), aby se co nejvíce zmenšily fronty v ulicích? Vztah mezi PTIME a NPTIME: PTIME NPTIME nebo PTIME = NPTIME 41 / 68

Složitost problému 40. Převoditelnost problému Obtížnost problémů náležejících třídy NP je stejná. Nalezení rychlého algoritmu pro řešení kterékoliv z těchto úloh, by znamenalo nalezení rychlého algoritmu pro všechny úlohy této třídy (Cook, 1970). Pokud umíme efektivně řešit problém P 2, potom lze problém P 1 můžeme efektivně vyřešit tím převedením na P 2. Převedení musí být dostatečně rychlé (tj. polynomiální). Polynomiální ANO/NE problém P 1 je polynomiálně převoditelný na problém P 2, jestliže existuje polynomiální algoritmus A: který pro libovolný vstup v problému P 1 sestrojí vstup A(v) problému P 2. platí, že odpověd na otázku problému P 1 pro vstup v je ANO právě tehdy, když odpověd na otázku problému P 2 pro vstup A(v) je ANO. 42 / 68

Složitost problému 41. NP-těžký a NP-úplný problém NP-těžký problém Problém Q nazýváme NP-těžkým, pokud každý problém ve třídě NP lze na problém Q polynomiálně převést. V praxi stačí jeden převod. Interpretace: Pokud bychom nalezli nějaký polynomiální algoritmus řešící problém Q, pak takový algoritmus musí existovat pro každý problém v NP: PTIME = NPTIME (zatím žádný takový algoritmus nebyl nalezen). Není znám algoritmus řešící problém v polynomiálním čase, řešení lze ověřit v polynomiálním čase. NP-úplný problém Problém Q nazýváme NP-úplným, pokud je NP-těžký, a náleží do třídy NP. Jedná se o nejtěžší úlohy z třídy NP. Do této skupiny patří řada problémů, u kterých není známo exaktní řešení. Není znám algoritmus řešící problém v polynomiálním čase avšak nelze prokázat, že takové řešení neexistuje. Praktické použití: je číslo x prvočíslo? Existují p, q 1 tak, aby platilo x = pq? 43 / 68

Složitost problému 42. Vztah mezi P, NP, NP-úplným problémem 44 / 68

Složitost problému 43. Příklady NP-úplných problémů V současné době existuje přes 1000 NP-úplných problémů, u kterých není znám polynomiální algoritmus. Jsou často velmi podobné problémům, u kterých existuje polynomiální algoritmus. Příklady NP-úplných problémů: TSP problem (problém obchodního cestujícího): navštívení všech vrcholů grafu právě jednou, délka cesty nejkratší. Problém k barev: obarvení vrcholů grafu tak, aby žádné dva sousední vrcholy nebyly obarveny dvěma stejnými barvami. Problém batohu: Jak naskládat do batohu předměty známého tvaru tak, aby zabíraly co nejméně místa? Loupežnický problém: rozdělení množiny n dvě podmnožiny se stejným součtem. NP-úplné problémy lze řešit přibližně: aproximační algoritmy. 45 / 68

Základní techniky návrhu algoritmu 44. Techniky návrhu algoritmů Návrh algoritmu prováděn dvěma technikami: Návrh algoritmu Shora dolů, Návrh algoritmu Zdola nahoru. V praxi obě techniky z důvodů větší efektivity často kombinujeme. Představují analogie postupů používaný při řešení běžných problémů. 46 / 68

Základní techniky návrhu algoritmu 45. Návrh algoritmu Shora dolů Návrh algoritmu Shora dolů Odvozen z postupu, jakým člověk řeší složité úkoly v praxi. Problém rozkládáme na jednodušší kroky, tzv. dekompozice problému. Postup směrem od obecného ke konkrétnímu. Postupně tak dospějeme k elementárním krokům, které již zpravidla umíme poměrně snadno vyřešit. Návrh algoritmu metodou shora-dolů je nejpoužívanějším přístupem. Příkladem využití návrhu shora dolů může být metoda Divide&Conquer. Návrh algoritmu Zdola nahoru Opačný přístup než Shora dolů. Elementární kroky se snažíme za použití abstrakce sdružovat do složitějších celků ve snaze nalézt řešení zadaného problému. Postup směrem od konkrétního k obecnému. Používán převážně při implementaci algoritmu: 1) Nejprve vytváříme nejjednodušší komponenty. 2) Jednoduché komponenty spojujeme ve složitější komponenty. Tomáš 3) Bayer Jako bayertom@natur.cuni.cz poslední vytváříme (Katedra zpravidla aplikovanéhlavní geoinformatiky Problémy program. a algoritmy kartografie. Přírodovědecká fakulta UK.) 47 / 68

Základní techniky návrhu algoritmu 46. Druhy algoritmů Problémy řešené v běžném životě jsou různorodé. Při návrhu algoritmu neexistuje univerzální technika vedoucí k nalezení řešení. V některých případech požadujeme přesné řešení, někdy postačuje řešení přibližné (přesné nemusí existovat, viz NP-úplné problémy ). Každá z technik je vhodná pro řešení jiných skupin problému. V závislosti na typu problému je nutné zvolit vhodnou techniku k jeho řešení. Přehled technik návrhu algoritmů: Metoda hrubé síly (Brute Force Algorithm). Inkrementální algoritmy (Incremental Algorithms). Rozděl a panuj (Divide and Conquer). Heuristické algoritmy (Heuristic Algorithm). Aproximační algoritmy Randomizované algoritmy 48 / 68

47. Metoda hrubé síly Základní techniky návrhu algoritmu Vyzkoušení všech variant řešení problému, vybráno nejlepší z nich. Počet operací nutných k nalezení řešení roste nepolynomicky (exponenciálně n c, faktoriálně n!). Výhodou je jednoduchost implementace. Lze aplikovat pouze na malé datové soubory, pro rozsáhlé soubory nelze vyzkoušet všechny metody, nalezené řešení nemusí být nejlepší. Postupy založené na hrubé síle bývají nazývány naivními algoritmy, neobsahují žádnou hlubší myšlenku. Využití např. u NP problémů. Lepších výsledků pro tyto problémy dosahují heuristické algoritmy. 49 / 68

Základní techniky návrhu algoritmu 48. Inkrementální algoritmy Postupné přidávání resp. výběr jednoho prvku ze vstupní množiny resp. z existujícího řešení, po každém takovém kroku je řešení aktualizováno. Druhy inkrementálních algoritmů: Inkrementální vkládání, Inkrementální konstrukce, Inkrementální výběr. Vlastnosti: Algoritmy implementačně poměrně jednoduché, za předpokladu, že přidání / odebrání jednoho prvku příliš neovlivní výsledné řešení. Vhodné i pro značně složité problémy. Snadno lze analyzovat změny řešení v závislosti na vstupní množině dat. Lze použít jako on-line algoritmy, po přidání vstupu vidíme výsledné řešení nad podmnožinou zpracovaného data setu. Jedny z nejčastěji používaných algoritmů ve výpočetní geometrii: konvexní obálky, Voronoi Diagramy, Delauany triangulace. 50 / 68

Základní techniky návrhu algoritmu 49. Inkrementální vkládání = Incremental Insertion Algoritmus inkrementálního vkládání konstruuje řešení nad množinou M = {m i} n i=1 prvků tak, že nalezne řešení pro množinu N M, N = {m i} n 1 i=1 prvků a poté do této množiny přidá prvek m n (tj. updatuje stávající řešení). A(P(M)) = A(P(N m n)) = A(P(N)) + A(P(m n)). Celá vstupní množina dat nemusí být k dispozici po dobu běhu algoritmu, data mohou být získávána průběžně (tj. i v době běhu algoritmu). Data mohou být vybírána ze vstupní množiny bud randomizovaně nebo dle určitých pravidel. Jeden z nejčastěji používaných postupů ve výpočetní geometrii. V paměti udržováno většinou pouze výsledné řešení, pro některé situace i průběžná řešení (DT). V takovém případě lze snadno analyzovat vliv dat na řešené, tj. provést krok zpět. Pro první kroky řešení ( malá n) je nutno vstupní množinu doplnit vhodně volenými daty a tato data po zpracování množiny n prvků z řešení dodatečně odstranit. 51 / 68

Základní techniky návrhu algoritmu 50. Inkrementální vkládání: konstrukce DT 52 / 68

Základní techniky návrhu algoritmu 51. Inkrementální konstrukce = Incremental Construction Algoritmus inkrementálního konstrukce generuje řešení nad podmnožinou N M průběžně, přidání dalšího vstupu zpravidla neovlivní dílčí řešení. Data zpracovávána podle požadavků algoritmu, nemohou být přidávána na vstup randomizovaně. V době běhu algoritmu musí být k dispozici celá vstupní množina dat. Pro urychlení běhu algoritmu je vhodné data předzpracovat, např. vhodně setřídit. Algoritmus inkrementální konstrukce často používán ve výpočetní geometrii (např. Delaunay triangulace). Většinou pomalejší než inkrementální vkládání. 53 / 68

Základní techniky návrhu algoritmu 52. Inkrementální konstrukce: DT 54 / 68

53. Divide & Conquer Základní techniky návrhu algoritmu Založena na opakovaném rozdělování problému na menší a jednodušší podproblémy, které jsou svým řešením podobné původnímu problému. Důsledek návrhu algoritmu technikou Shora dolů. Hodí se pro dekomponovatelné úlohy, tj. úlohy rozdělitelné na podúlohy stejného nebo podobného typu. Dělení prováděno dokud není řešení podproblému triviální (tj. většinou přímé). Takové řešení umíme zpravidla nalézt bez složitých výpočtů. Podproblémy řešeny nezávisle na sobě a poté jejich řešení spojena v celek, čímž získáme řešení původního problému. Odhad složitosti: Θ(n log n) Techniky řešení: Rekurze, iterace. Příklady: třídící algoritmy (Merge Sort, Quick Sort), významné pro úlohy výpočetní geometrie (Convex Hull, Voronoi Diagram, Delaunay Triangulace...), kartografická generalizace (Douglas Peucker Algorithm) 55 / 68

Základní techniky návrhu algoritmu 54. Ukázka Douglas-Peuckerova algoritmu 56 / 68

Základní techniky návrhu algoritmu 55. Heuristické algoritmy Charakteristika heuristiky: Technika řešení problémů, vygenerováno velké množství potenciálních řešení (na rozdíl od metody hrubé síly nikoliv všechny varianty), z nich hledáno nejlepší možné řešení. Vygenerovaná množina nemusí obsahovat nejlepší možné řešení. Heuristické algoritmy využívají heuristiku. Nehledají exaktní řešení problému, ale tzv. přípustné řešení, takové řešení není nejlepší možné, ale zároveň není špatné. Řešení nemusí být nalezeno v rychlém čase, některé heuristiky pracují poměrně dlouho. Špatné určování časové složitosti, někdy běží rychle, jindy ne (závislost na vstupních datech). Zvýšením počtu opakování lze dosáhnou přesnějšího řešení, kvalita řešení zpravidla je zpravidla funkcí počtu iterací (odmocnina) nadměrné zvyšování 57 / 68

Základní techniky návrhu algoritmu 56. Techniky heuristiky Základní techniky heuristiky: Iterativní algoritmy: Postupné hledání řešení nad zmenšující se množinou možných řešení, kvalita řešení se v každém dalším kroku zlepšuje. Hladové algoritmy: V každém dílčím kroku hledáno optimální řešení. Hledáním lokálního minima chceme nalézt globální minimum. Genetické algoritmy: Založeny na principech evoluční biologie. Do dalšího kroku přežívají pouze perspektivní řešení, která jsou dále zlepšována drobnou modifikací (křížením). Výhody a nevýhoda heuristiky: + Snadná implementace. + Často jediné řešení problémů, u nichž neexistuje exaktní řešení (NP problémy). - Obtížné stanovení časové složitosti, závislost na konfiguraci vstupních dat. - Řešení nelze dokázat. - V mezních situacích nemusí být nalezené řešení vhodné. Tomáš - Není Bayer bayertom@natur.cuni.cz zaručeno, že takové (Katedra aplikované řešenígeoinformatiky bude Problémy vždy a algoritmy kartografie. nalezeno. Přírodovědecká fakulta UK.) 58 / 68

57. Kvalita řešení Základní techniky návrhu algoritmu Cílem nalezení přípustného řešení, jak je nalezené řešení dobré?. Hodnocení kvality nalezeného řešení: odchylka řešení m A nalezeného algoritmem A od optimálního řešení m opt Často hodnoceno poměrem k, nalezené řešení představuje k% optima (např. 90%). k = m A m opt Jako optimální řešení může být posuzováno dosud nejlepší nalezené řešení. počet kroků vedoucích k nalezení řešení Snaha o co nejrychlejší konvergenci algoritmu. Důležitá volba podmínky ukončující iteraci. 59 / 68

Základní techniky návrhu algoritmu 58. Hladový algoritmus Greedy Algorithm se snaží z množiny M = {m i } vybrat podmnožinu N M takovou, která má minimální sumu ohodnocení W = w(n) = N M w(m i ) = min. Hodnotu W i = w(m i ) nazýváme ohodnocením prvku m i, funkci w(n) označujeme jako účelovou funkcí. Hladový algoritmus hledá v každém kroku lokální minimum účelové funkce m = arg min (w(m i )) m i M ve snaze nalézt globální minimum/maximum účelové funkce. N = arg min ( w(m i )). m i M N M Následně Ñ = {N + m}. Pokud w(ñ) < w(n): N = {N + m}, M = {M m}. Globální minimum nemusí být vždy nalezeno, algoritmus vygeneruje přípustné řešení, které není výrazně horší než optimální řešení. Jako přípustné řešené označíme libovolnou množinu N M, jako optimální řešení množinu N M pro kterou platí w(n) = min resp. w(n) = max. 60 / 68

Základní techniky návrhu algoritmu 59. Implementace hladového algoritmu Při implementaci Greedy algoritmů používány dynamické datové struktury, zejména prioritní fronta. Vstupní množina M, množina řešení N. Postup: Všechny prvky m i množiny M setřídíme do posloupnosti vzestupně resp. sestupně dle hodnot w i v závislosti na tom, zda hledáme minimum/maximum. V každém kroku vybereme prvek m s nejnižším resp. nejvyšším ohodnocením w, dočasně ho přidáme k existující množině prvků Ñ = {N + m}. Pro novou množinu N určíme w(n). Pokud : w(ñ) < W Přidáním prvku m se snížilo ohodnocení množiny N, updatujeme minimum W = w(ñ). Pak N = Ñ. V opačném případně množinu N ponecháme beze změny. Body 2,3 opakujeme pro všechna m. Po prohledání všech m i M účelová funkce w(n) splňuje podmínku minimálního ohodnocení. 61 / 68

Základní techniky návrhu algoritmu 60. Heuristika: TSP, Nearest Neighbor 62 / 68

Základní techniky návrhu algoritmu 61. Heuristika: TSP, Best Insertion 63 / 68

Základní techniky návrhu algoritmu 62. Randomizované algoritmy Algoritmy zavádějí do procesu řešení nedeterministický prvek, tj. prvek náhodnosti. Cílem zjednodušení implementace algoritmu při zachování Worst Case. Máme -li štěstí (jestliže není vybrán nevhodný prvek), běží algoritmus průměrně rychleji. Tímto postupem lze řešit úlohy, které nemusí být běžně řešitelné. Metody randomizace: Náhodný (nedeterministický) výběr prvku ze vstupních dat Zpracování dat ze vstupní množiny v náhodném pořadí, v každém okamžiku vybrán náhodný prvek. Náhodné stanovení prahové veličiny Výběr náhodného prvku u kterého očekáváme požadované statistické parametry (např. medián). Nahrazuje předzpracování ve formě statistické analýzy dat. Výhody a nevýhody: + snadnost implementace, + vylepšení špatných vlastností algoritmů (špatný Worst Case, dobrý Average Case), - nelze použít pro NP problémy, - v obecných případech vede převod deterministického algoritmu na nedeterministický ke 64 / 68

Základní techniky návrhu algoritmu 63. Randomizované algoritmy Dělení randomizovaných algoritmů: Randomizované inkrementální algoritmy: Zpravidla náhodný výběr prvku ze vstupní množiny, použití např. u triangulací. Randomizované Divide & Conquer algoritmy: Náhodný výběr prvku majícího předpokládané statistické parametry. Např. QuickSort, náhodné stanovení mediánu. Vzorkování: Před spuštěním algoritmu obyčejně provedena statistická analýza podmnožiny dat, statistické parametry následně vztaženy na celý vstupní soubor. Výběr vzorku velmi důležitý, požadavky: reprezentativnost (vzorek reprezentuje rozložení dat v celém souboru), přiměřená velikost (krátká doba zpracování). 65 / 68

Základní techniky návrhu algoritmu 64. Randomizované algoritmy Typy vzorkování: Použití: Jednoduché vzorkování Všechny prvky vstupní množiny mají stejnou pravděpodobnost pro zařazení do vzorku. Položky vybrány náhodně, nemusí být rovnoměrně rozloženy. Systematické vzorkování Výběr každé n-té položky, první položka vybrána náhodně. Výhodou lepší rozložení položek v souboru. Shlukové vzorkování Ze vstupní množiny vybrán náhodný / předem daný počet vzorků. Zpracovány všechny prvky každého vybraného vzorku. Třídící algoritmy, konvexní obálky, triangulace, hledání průsečíků. 66 / 68

Základní techniky návrhu algoritmu 65. Randomizované zpracování bodů: body vybírány ze shluků v náhodném pořadí 67 / 68

66. Volba algoritmu Volba algoritmu a problém Při volbě algoritmu nutno zohlednit: Jaké jsou požadavky na vstupní / výstupní data? Jaká je velikost vstupních / výstupních dat, tj. pro jaká n problém řeším? Požaduji exaktní / přibližné řešení? Jak jsem schopen ověřit kvalitu přibližného řešení? Je problém řešitelný pro libovolnou konfiguraci vstupních dat? Existují speciální případy, které musí být řešeny zvlášt nebo je lze zanedbat? Lze problém efektivně převést na jiný problém? Jak má být problém rychle vyřešen, tj. on-line, nebo mohu čekat sekundy, minuty, hodiny či dny? Jak dlouho má vývoj aplikace trvat, tj. kolik času a financí je do řešení problému možno investovat? O jaký typ problému se jedná, nepatří mezi NP problémy? Lze urychlit / vylepšit řešení volbou vhodných datových struktur? Lze urychlit / vylepšit řešení předzpracováním dat? 68 / 68