Základní informace o předmětu Otázka: Proč vůbec porovnávat algoritmy? Vlastnosti algoritmů přirozenost a stabilita algoritmu časová náročnost algoritmu asymetrická a asymptotická časová náročnost algoritmů řád algoritmu paměťová náročnost Literatura základní, doporučená 1
předmět KI/ADS zápočet / 2kb informace ki.ujep.cz termínovník, e nástěnka, personální složení literatura stag.ujep.cz Vstup do systému Prohlížení Předměty podmiňující předměty žádné (dříve KI/PGL1) navazující předměty: KI/PGL1, KI/PGL2, KI/DSY, KI/PDSY, a další e-mail: kvetuse.sykorova@ujep.cz požadavky k zápočtu: zápočtová práce specifikace dle dohody s vyučující 1x generátor náhodných celých čísel» Vstup: od, do, počet; Výstup: soubor txt 2x datová struktura» Zásobník, Fronta 1x třídící algoritmus složitosti 2» Bubblesort 2x algoritmus složitosti. log 2 nebo vyšší» Quicksort, Mergesort 1x vyhledávací algoritmus» Binary search + Brute force 1x speciální vyhledávací struktura» Hash table, Tree dle vlastního výběru 2
Co nás bude čekat? třídící algoritmy různé obtížnosti 2 : selectsort, bubblesort, log : quicksort, heapsort, : radixsort, bucketsort, vyhledávací algoritmy brute force, binary search, interpolation search speciální struktury pro rychlé vyhledávání index files: dense, sparse, multilevel hash table: close, open, perfect, speciální vyhledávací stromové struktury search tree, digi tree, binary tree, B tree, AVL tree, trie, definice: třídění proces (pře)uspořádání záznamů (objektů) tabulky podle určitého pořadí nejčastěji vzestupné uspořádání zrychluje následný proces vyhledávání vyhledávání proces nalezení / nenalezení informací o určitém konkrétním záznamu (objektu) z tabulky vyhledávací struktury specifické datové struktury určené pro rychlé vyhledávání nutná znalost vlastností klíčových hodnot 3
značení: n počet vstupních dat / řádků / záznamů key klíčová položka / sloupec / atribut určen pro rychlé vyhledání záznamu v příkladech: budeme uvádět pouze pohyby klíčových položek!!! přesto dochází i k přesunům celých záznamů!!! tyto přesuny časově náročnější časová náročnost dána délkou záznamu informace / data uchovávána v databázích uložena v tabulkách pouze pro uživatele řádky (záznamy), sloupce (atributy), hodnoty (pole) nutné rychlé vyhledávání řádově miliardy záznamů ( 10 ) doba čekání uživatele 20 příklady: databáze vozidel ČR, univerzitní a městské knihovny, evidence obyvatel ČR, bankovní účty, evidence nákupů obchodních řetězců, 4
nesetříděný soubor: vyhledávání = od prvního po poslední záznam: v průměru je potřeba /2 porovnání klíčů 1 počet porovnání n velikost souboru počet porovnání n = 10 1 až 10 n = 10 2 1 až 100 n = 10 3 1 až 1 000 n = 10 4 1 až 10 000 n = 10 5 1 až 100 000 n = 10 6 1 až 1 000 000 n = 10 9 1 až 1 000 000 000 setříděný soubor: vyhledávání = metoda půlení intervalu + setříděný soubor: 1 počet porovnání log 2 tj. 2 č á í velikost souboru počet porovnání n = 10 1 až 4 n = 10 2 1 až 7 n = 10 3 1 až 10 n = 10 4 1 až 14 n = 10 5 1 až 17 n = 10 6 1 až 20 n = 10 9 1 až 30 5
příklad Jak dlouho bude trvat vyhledat informace o daném záznamu? n = 1 000 000 záznamů předpoklad: 1 porovnání = 1milisec (dnes mnohonásobně rychlejší) data v paměti bez uspořádání algoritmy bez inteligence počet porovnání od 1 do 1 000 000 max 16,7 min data v paměti uspořádaná programově náročnější algoritmy! počet porovnání od 1 do log 2 1 000 000 19,9 max 20 milisec data v paměti uspořádaná ve speciální vyhledávací struktuře počet porovnání = 1, 2, 3, max 1,2,3, milisec programově a paměťově mnohem náročnější!!! databázový systém (DBS) systém uchovávající určité informace o různých reálných objektech nejpoužívanější je relační databázový systém (RDBS) údaje o jednotlivých typech objektů jsou uchovávány v tabulkách s určitou strukturou tabulky fyzicky realizovány pomocí speciálních vyhledávacích struktur B stromy, Hash Table, apod. indexové soubory seřazeny pro rychlé vyhledávání třídící a vyhledávací algoritmy 6
základní pojmy Tabulka souhrn určitých informací o jednom typu reálných objektů propojené tabulky vytvářejí základ RDBS Záznam všechny informace uchovávané v tabulce o jednom konkrétním objektu záznam tvoří jeden řádek tabulky Atribut určitý typ informace o všech objektech tabulky (položka) atribut tvoří jeden sloupek tabulky Pole určitá informace o jednom objektu pole tvoří průsečík jednoho řádku a jednoho sloupce atributy jméno příjmení datum Pavel Veselý 23.5.1979 záznamy Jana Tomáš Doudová Novotný 17.1.1992 2.11.1984 pole Emil Rychlý 15.7.1988 Jana Klára Jan Zárubová Dlouhá Novák 26.11.1981 9.8.1995 12.6.1993 7
klíč atribut (sloupec) tabulky určený pro setřídění záznamů podle jeho hodnot numerický klíč textový klíč unikátní klíč klíčový atribut tabulky každá hodnota se vyskytuje nejvýše jedenkrát duplicitní klíč klíčový atribut tabulky každá hodnota se může vyskytovat i vícekrát (u více různých záznamů) unikátní klíč duplicitní klíč 125 131 149 156 jana pavel dan pavel 167 174 183 jana adam pavel 8
jeden problém různé postupy řešení algoritmy různé způsoby naprogramování schopnosti programátora Je to nutné? výkon procesorů v PC desítky a stovky GFLOPS FLOPS (Floating Point Operations per Second) = počet operací za sec. důležitá vlastnost dobrého programátora schopnost porovnat různé postupy řešení vybrat z nich ten, který je pro daný problém nejvhodnější nespokojí se s prvním nápadem programátorský problém několik různých způsobů řešení pro jejich porovnání hledáme vhodná kritéria pro rozhodování který algoritmus je lepší a který je horší Je to ten, co nás napadne jako první / poslední? Je to ten s realizací nejjednodušší / nejsložitější? důležité: rychlost výpočtu, spotřeba operační paměti výpočetní složitost algoritmů vědecká disciplína s matematickými základy 9
obecné vlastnosti algoritmu analýza algoritmu (výběr s ohledem na přidělené prostředky) složitost (náročnost) algoritmu časová složitost rychlost výpočtu algoritmu paměťová (prostorová) složitost velikost potřebné operační paměti» nesmí být závislé na výbavě PC ani na schopnosti programátora tato hlediska často protichůdná rychlé a paměťově náročné X pomalé a paměťově nenáročné efektivita algoritmu doplňková vlastnost ke složitosti čím větší složitost, tím menší efektivita algoritmu obecné vlastnosti algoritmů způsob klasifikace počítačových algoritmů Přirozenost Stabilita Časová náročnost Paměťová náročnost Asymptotická složitost řád algoritmu 1.! Amortizovaná složitost 10
Přirozenost schopnost algoritmu rozpoznat již setříděnou posloupnost tj. schopnost algoritmu zkrátit dobu výpočtu s ohledem na případné částečné nebo úplné setřídění posloupnosti klíčů Stabilita schopnost algoritmu zachovat stejné pořadí záznamů s duplicitními hodnotami klíčů tj. schopnost algoritmu zachovat pořadí dvou různých záznamů se stejnou hodnotou klíče určuje se pro případ, že se ve vstupním poli mohou vyskytnout duplicitní hodnoty klíčů Rychlost algoritmu počet porovnání klíčových hodnot (i přesunů celých záznamů) potřebných pro výsledné uspořádání záznamů v tabulce závisí na vstupním počtu záznamů n časová náročnost algoritmu rychlost algoritmu počet porovnání klíčů nebo přesunů celých záznamů paměťová náročnost algoritmu velikost paměti potřebná pro bezproblémovou funkčnost algoritmu 11
Velikost dat (rozdělení): výkonnost závisí na počtu a velikosti záznamů vnitřní třídění (třídění polí) všechny záznamy se vejdou do operační paměti rychlost algoritmu určena počtem porovnání klíčových hodnot a počtem prohození celých záznamů vnější třídění (třídění souborů) všechny záznamy uloženy na vnějším paměťovém médiu mnohem pomalejší přístup na vnější médium rychlost algoritmu určena počtem přístupů na médium Asymptotická časová složitost: změna chování algoritmu v závislosti na změně počtu vstupních dat n nesmí být závislé ani na implementaci, ani na rychlosti počítače třída P» existuje algoritmus řešení s polynomiální časovou náročností třída NP» neexistuje algoritmus řešení s polynomiální časovou náročností řád algoritmu řád růstu funkce 1.! Amortizovaná časová složitost: průměrný čas potřebný pro vykonání sekvence v nejhorším případě 12
Jak porovnat dva různé algoritmy řešící stejnou úlohu? T ( n) 1 100 log2 n T ( n) 2 10 Rychlejší algoritmus je ten, jehož řád algoritmu vykazuje se zvětšujícím se počtem vstupních dat pomalejší rychlost růstu. n T(n) 1 n T(n) 2 300 8 80 400 16 160 500 32 320 600 64 640 700 128 1 280 800 256 2 560 Asymptotická časová složitost: Jak ji spočítat? určíme počet všech elementárních operací algoritmu operace porovnání dvou hodnot (if) operace aritmetické (+,, *, /, %, ) přesuny celých záznamů a instancí prvků složitost algoritmu = celkový počet porovnání, operací nebo přesunů celých záznamů výsledek bývá stejný nebo podobný 13
Řád algoritmu : Pro každou funkci : definujeme řád algoritmu ; funkce : 1.! seřazeno od nejnižšího po nejvyšší řád výpočet z : zanedbáme multiplikativní konstanty zanedbáme aditivní složitosti nižších řádů Např. pro 7 12 5 získáme kategorie : konstantní = 1 logaritmická = log lineární = lineárně logaritmická = log kvadratická = kubická = polynomiální = exponenciální = faktoriálová =! 14
vlastnosti : Základní: SEDGEWICK R. Algoritmy v C. SoftPress, Praha, 2003. WIRTH N. "Algorithms + Data Structures = Programs". Prentice Hall, 1975. WRÓBLEWSKI P. Algoritmy, datové struktury a programovací techniky. ComputerPress, Brno, 2004. KNUTH D.E.: The Art of Computer Programming. vol.3. Sorting and Searching. Addison Wesley, USA 2005 Rozšiřující: WIRTH N. "Algoritmy a štruktúry údajov". Alfa, Bratislava, 1989. RYCHLÍK J.: Programovací techniky. Kopp, České Budějovice 1994 HUDEC B.: Programovací techniky. FEL ČVUT, Praha 1999 KEOGH J., DAVIDSON K.: Datové struktury bez předchozích znalostí. ComputerPress, Brno 2006 15
16