KIV/PRO Cvičení
Nalezení maxima Nalezněte (co nejefektivněji) maximum v následující posloupnosti: – 2; 12; 8; 39; 9; 4; 3; 20; 28; 19; 6; 31; 47; 27; 11; 7
Hádání čísla Myslím si (přirozené) číslo od 1 do N… Uhádněte, na jaké číslo myslím – Na každý váš pokus odpovím „číslo je větší“, „číslo je menší“, nebo „ano“ – Kolik pokusů budete potřebovat?
Hádání čísla D&C přístup - půlení intervalu Zkuste zapsat v pseudokódu – S rekurzí – Bez rekurze
Násobení matic Mějme dvě čtvercové matice A, B velikosti n×n Nejjednodušší přístup – O(n 3 ):
Násobení matic Jde to lépe – Strassenovo násobení matic Matice A, B, C = A∙B rozdělíme na bloky: Zavedeme: – C 11 = A 11 B 11 + A 12 B 21 – C 12 = A 11 B 12 + A 12 B 22 – C 21 = A 21 B 11 + A 22 B 21 – C 22 = A 21 B 12 + A 22 B 22
Násobení matic Následuje malý trik, zavedeme: – M 1 = (A 11 + A 22 )(B 11 + B 22 ) – M 2 = (A 21 + A 22 )B 11 – M 3 = A 11 (B 12 – B 22 ) – M 4 = A 22 (B 21 – B 11 ) – M 5 = (A 11 + A 12 )B 22 – M 6 = (A 21 – A 11 )(B 11 + B 12 ) – M 7 = (A 12 – A 22 )(B 21 + B 22 )
Násobení matic A trik pokračuje – pomocí M 1, …, M 7 vyjádříme C 11, C 12, C 21, C 22 – C 11 = M 1 + M 4 – M 5 + M 7 – C 12 = M 3 + M 5 – C 21 = M 2 + M 4 – C 22 = M 1 – M 2 + M 3 + M 6
Násobení matic Co se právě stalo? – Ušetřili jsme jedno násobení – Aplikujeme rekurzivně, dokud to má smysl (dokud tím něco získáme) Složitost? – Zhruba O(n ) Nevýhody? – Obvykle mírně sníží numerickou stabilitu výpočtu.
Hádání čísla ještě jednou Opět si myslím číslo, opět můžete hádat a já odpovím „menší“, „větší“, nebo „ano“ Ale vše má jeden háček! – Má odpověď bude zpožděná o k kroků
Hádání čísla ještě jednou Příklad (myslím si 42, k = 2) – Q: 50 – Q: 30 – Q: 10 – A: „moje číslo je menší“ (42 < 50) – Q: 60 – A: „moje číslo je větší“ (42 > 30) Jak na to? – Efektivita, složitost, atd. (jako obvykle…)
Složitost D&C Často rekurzivní zápis – Na první pohled není složitost zřejmá – Obtížný odhad složitosti – Rekurzivní vztahy není obvykle triviální „rozepsat“ Master Theorem – Řeší výpočet složitosti některých (!) rekurzivně zapsaných algoritmů