Databáze, sítě a techniky programování X33DSP Anotace: Náplní předmětu jsou některé techniky a metody používané ve výpočetních systémech zaměřených na biomedicínské inženýrství. Cílem je položit jednotný základ informačních technologií pro všechny studenty magisterského programu BMI a vybavit absolventy základními znalostmi v oblasti systematického přístupu k programování, správě operačních systémů a sítí i k tvorbě elementárních databázových aplikací. Předn ednáš ášej ející: Ing. Tomáš Vlček, CSc. Doc. Ing. Zdeněk Kouba, CSc. Cvičící: Mgr. Ing. David Šteiner Ing. Miloslav Radakovič Ing. Lenka Novákov ková,, PhD. 1
Osnova přednášek 1. Základy teorie složitosti, polynomiální a nepolynomiální problémy, neřešitelné úlohy (21.9.) 2. Státní svátek (28.9.) 3. Datové struktury, jejich implementace, rekurze (5.10.) 4. Algoritmy řazení a vyhledávání, komprimační algoritmy (12.10). 5. Grafové algoritmy (19.10.) 6. Databáze - datový model, relační model (26.10.) 7. Normální formy, dotazovací jazyk SQL (2.11.) 8. Dotazovací jazyk SQL (9.11.) 9. Transakce, distrib. databáze, replikace, synchronizace (16.11.) 10. Poč. sítě a jejich struktury, adresování, směrování v sítích (23.11.) 11. IP protokoly, porty, služby. Základy bezpečnosti v sítích. (30.11.) 12. Operační systémy I (7.12.) 13. Operační systémy II (14.12.) 14. Datové sklady, správa dokumentů, verzování (21.12.) 2
Podmínky udělení zápočtu a složení zkoušky Podmínky udělení zápočtu Max. 2 absence Maximální počet bodů ze cvičení je 25 (celkem 5 úloh), pro získání zápočtu min. 13 Během testu, řešení semestrální úlohy a zkoušky bude kladen důraz na zásadu samostatné práce. Podmínky zkoušky Zkouška probíhá ústně Tři otázky (algoritmy/databáze/sítě-os) Na každou otázku písemná příprava Každá otázka ohodnocena max. 25 body Pokud je odpověď na libovolnou z těchto tří otázek hodnocena méně než 10 body, celková známka je nedostatečně Výsledná známka je dána součtem bodového hodnocení cvičení a odpovědí na otázky dle platné klasifikační stupnice. 3
Doporučená literatura Wróblewski, Piotr: Algoritmy. Datové struktury a programovací techniky. Computer Press 2004. ISBN: 80-251-0343-9 Knuth, D.E.: Umění programovat. 1.díl Základní algoritmy. Computer Press 2008. ISBN: 978-80-251-2025-5 Herout, Pavel: Učebnice Jazyka Java, Kopp, 2003. Tutoriál Java - http://java.sun.com/docs/books/tutorial/ Wirth, N.: Algorithm + Data Structures = Program. Prentice- Hall, New Jersey, 1975 Louden, Kenneth, C.: Programming Languages. Principles and Practice. PWS-Kent, Massachusetts, 1993 Pokorný J., Halaška I.: Databázové systémy. Praha, ČVUT, 1998 Další publikace o DBMS aktuálně doporučí přednášející 4
Definice algoritmu Algoritmus můžeme definovat jako jednoznačně určenou posloupnost konečného počtu elementárních kroků vedoucí k řešení daného problému, přičemž musí být splněny základní vlastnosti každého algoritmu: Hromadnost a univerzálnost - algoritmus musí vést k řešení celé třídy úloh, vzájemně se lišících pouze vstupními údaji. Determinovanost (jednoznačnost) - v každém kroku algoritmu musí být jednoznačně určeno, co je výsledkem tohoto kroku a jak má algoritmus dále pokračovat. Pro stejná vstupní data vydá algoritmus vždy stejný výsledek. Konečnost - algoritmus v konečné době skončí. Rezultativnost - algoritmus při zadání vstupních dat vždy vrátí nějaký výsledek. Korektnost - výsledek vydaný algoritmem musí být správný. Opakovatelnost při použití stejných vstupních údajů musí algoritmus dospět vždy k témuž výsledku. 5
Ověřování správnosti algoritmu Algoritmus můžeme považovat za korektní, pokud není opomenuta žádná z možností zpracování dat při průchodu algoritmem. Algoritmus je parciálně správný, právě když platí, že pokud skončí, vydá správný výsledek. Algoritmus je konečný, když pro všechna přípustná data algoritmus po konečném počtu kroků skončí. Věta o zastavení Halting Theorem. Úloha o zastavení není algoritmicky řešitelná - neexistuje algoritmus, který by pro libovolné slovo w a libovolný algoritmus A rozhodl, zda se A při vstupu w zastaví, nebo ne. Kvantitativní ukazatele kvality algoritmů operační složitost paměťová složitost (náročnost) 6
Příklad 1 - Sekvenční hledání 1 boolean searchlinear(value[] array, Value val) { 2 boolean ret = false; 3 for (int i = 0; i < array.length; i++) { 4 if (val == array[i]) { 5 ret = true; 6 break; 7 } 8 } 9 return ret; 10 } Operační složitost v nejhorším případě cyklus proběhne n-krát. Paměťová náročnost proměnné. 7
Příklad 2 binární hledání 1 boolean binsearch(value[] array, Value val) { 2 boolean ret = false; 3 int l = 0; int r = array.length; int i; 4 while (!ret && r >= l) { 5 i = (l + r) / 2; 6 if (val == array[i]) { 7 ret = true; 8 } else { 9 if (val > array[i]) { 10 l = i + 1; 11 } else { 12 r = i - 1; 13 } 14 } 15 } 16 return ret; 17 } 8
Příklad 2 binární hledání 1 boolean binsearch(value[] array, Value val) { 2 boolean ret = false; 3 int l = 0; int r = array.length; int i; 4 while (!ret && r >= l) { 5 i = (l + r) / 2; 6 if (val == array[i]) { 7 ret = true; 8 } else { 9 if (val > array[i]) { 10 l = i + 1; 11 } else { 12 r = i - 1; 13 } 14 } 15 } 16 return ret; 17 } Operační složitost v nejhorším případě cyklus proběhne log 2 (n) krát. Paměťová náročnost proměnné l, i a r. 9
Fibonacciho posloupnost n 0 1 2 3 4 5 6 7 8 9 10 11 f(n) 1 1 2 3 5 8 13 21 34 55 89 144 Příklad 3 Rekurzivní výpočet Fibonacciho čísla 1 private int fib(int n) { 2 return (n == 0)?0 : ((n == 1)?1 : fib(n-1) + fib(n-2)); 3 } 10
Fibonacciho posloupnost n 0 1 2 3 4 5 6 7 8 9 10 11 f(n) 1 1 2 3 5 8 13 21 34 55 89 144 11
Příklad 3 tisk posloupnosti S rekurzí: 1 public void printfib1(int n) { 2 for (int i = 1; i <= n; i++) { 3 System.out.println(i + " " + fib(i)); 4 } 5 } Neefektivní, viz strom volání fib() pro n=4 12
Bez rekurze: 1 public void prinfib2(int n) { 2 int p0 = 1; int p1 = 1; int p; 3 for (int i = 1; i <= n; i++) { 4 System.out.println(i + " " + p0); 5 p = p1; p1 = p0 + p1; p0 = p; 6 } 7 } I 1 2 3 4 p0 1 1 2 3 5 p1 1 2 3 5 8 p 1 2 3 5 f(i) 1 1 2 3 5 13
Složitost algoritmu Složitost závisí na velikosti vstupních dat, tj. můžeme popsat jako funkci T(n), kde číslo n udává velikost vstupních dat. Např. T(n) = an + b je zápis lineárníčasové složitosti. Multiplikativní konstanta a reprezentuje počet operací na jednotku vstupních dat, aditivní konstanta b udává nárůst složitosti nezávislý na velikosti vstupních dat. Pro odhad složitosti důležitý pouze typ funkční závislosti. Efektivní algoritmy - takové postupy, jejichž složitost je maximálně polynomiální (např. n 2 ), nikoliv exponenciální např. 2 n ). 14
15
Čas potřebný ke zpracování dat velikosti n, jestliže výpočetní složitost je dána funkcí T(n) a provedení jedné operace trvá 1 µs T(n) 20 40 60 80 100 n 20 µs 40 µs 60 µs 80 µs 0,1 ms n log (n) 86 µs 0,2 ms 0,35 ms 0,5 ms 0,7 ms n 2 0,4 ms 1,6 ms 3,6 ms 6,4 ms 10 ms n 3 8 ms 64 ms 0,22 s 0,5 s 1 s n 4 0,16 s 2,56 s 13 s 41 s 100 s 2 n 1 s 11,7 dne 36600 let 3,6.10 9 let n! 77000 let 16
Horní odhad složitosti algoritmu T worst (n) udává složitost algoritmu v nejhorším případě: Složitost algoritmu f(n) je asymptoticky menší nebo rovna g(n), tj. f(n) = O(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 f(n) cg(n), neboli: Např.: 2n 2 + 3n + 4 = O(n 2 ), neboť pro n 0 = 1 a c = 10 platí 2n 2 + 3n + 4 <= 10*n 2. 17
Dolní odhad složitosti T best (n) určuje minimální složitost daného algoritmu, která nastává jen pro určité případy vstupních dat: Složitost algoritmu f(n) je asymptoticky větší nebo rovna g(n), tj. f(n) = Ω(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 cg(n) f(n), neboli: Např. zápis T best (n) = Ω (n 3 ) udává kubickou dolní složitost algoritmu. 18
Složitost v průměrném případě (očekávaná složitost) T avrg (n) se počítá jako střední hodnota náhodné složitosti T(n) při nějakém rozložení vstupních dat. Někdy může být i řádově lepší než složitost v nejhorším případě. Algoritmus je optimální pro danou úlohu, jestliže neexistuje algoritmus, který by úlohu řešil v nejhorším případě s menším počtem základních operací. Asymptoticky stejná složitost složitosti f(n), g(n) jsou asymptoticky stejné, právě když existují takové kladné konstanty c 1,c 2 tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 c 1 g(n) f(n) c 2 g(n), neboli: 19
Optimalizační úloha slouží k popisu úkolu nalezení řešení, které je omezeno podmínkami a které zároveň nejlépe vyhovuje daným kritériím (účelové nebo kriteriální funkci) Rozhodovací úloha je úloha, jejímžřešením je odpověď ano nebo ne. Každá optimalizační úloha lze převést na rozhodovací úlohu. Příklad - problém obchodního cestujícího. 20
Je dána množina měst {M 1,, M n } a pro každou dvojici měst M i, M j je dána jejich přímá vzdálenost d(m i, M j ). Uvažujme trasu, která je posloupnost měst M π(1), M π(2),, M π(n), kde π je permutace čísel 1,, n. Délka této trasy je n 1 i= 1 d( M π ( i), M π( i+ 1) ) + d( M π( n), M π(1) ) Optimalizační verze: Najděte trasu nejkratší délky. Rozhodovací verze: Je dáno navíc číslo K. Rozhodněte, zda existuje trasa délky K. Řešení NPC úloha, heuristické algoritmy 21
Nedeterministický algoritmus má dvě fáze nedeterministická, kdy se náhodně vygenerujeřetězec symbolů s deterministická, kdy na vstupu úlohy je jak instance úlohy, takřetězec s. Po konečném počtu kroků je výstupem ano nebo ne. Řetězec s je vlastně navrženéřešení úlohy, které se v deterministickéčásti otestuje, zda platí. Pro obchodního cestujícího je to číslo K. Nedeterministický algoritmus je nedeterministický polynomiální (NP algoritmus), jestliže ověřující fáze je splnitelná v polynomiálním čase vzhledem k rozsahu vstupních dat. 22
Třída P je třída všech rozhodovacích úloh U, pro něž existuje polynomiální algoritmus, řešící U. NP úloha je taková úloha, kdy platí : pro každou ano instanci lze v polynomiálnímčase ověřit správnost odpovědi ano. Pro ne instanci takový algoritmus neexistuje. Třída NP je třída všech rozhodovacích úloh U, pro něž existuje nedeterministický algoritmus, pracující v polynomiálnímčase. 23
Obtížnost rozhodovacích úloh se dá srovnávat. Pojem U se redukuje na V zpřesňuje sdělení, že rozhodovací úloha U není těžší než rozhodovací úloha V. U se redukuje na V, jestliže existuje algoritmus A, který pro každou instanci I úlohy U zkonstruuje instanci A(I) úlohy V tak, že I je ano instance U iff A(I) je ano instance V. Je-li A polynomiální, jde o polynomiální redukci. Rozhodovací úloha U je NP úplná, jestliže je NP úloha a každá NP úloha se na U polynomiálně redukuje. Třídu NP úplných úloh označujeme jako NPC. (NP úplné úlohy jsou nejtěžší mezi NP úlohami) 24