Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10 c) 0, 10 3. Převeďte dané číslo z dané soustavy do tří zbývajících: a) 11 0101 1110 2 b) 3057 8 c) D9C 16 Výsledky 1. a) 759 10 = 10 1111 0111 2 = 1367 8 = 2F7 16 b) 2578 10 = 1010 0001 0010 2 = 5022 8 = A12 16 2. a) 0,8125 10 = 0,1101 2 b) 0,35 10 = 0,01 2 3. a) 11 0101 1110 2 = 862 10 ( = 1536 8 = 35E 16 ) b) 3057 8 = 1583 10 ( = 62F 16 = 110 0010 1111 2 ) c) D9C 16 = 3484 10 ( = 6634 8 = 1101 1001 1100 2 )
Úlohy- 3.cvičení 1. Převeďte zadané číslo do binárního tvaru: 15,35 10 2. Zadaný polynom uzávorkujte podle Hornerova schématu: 3x 5 + 2x 4 + 4x 3 + x 2 + 5x + 1 Vypočítejte kolik operací násobení je zapotřebí k vypočtení hodnoty tohoto polynomu v zadaném bodě: a) před uzávorkováním b) po uzávorkování c) Kolik operací násobení bychom pořebovali k vypočtení hodnoty polynomu desátého stupně přímým dosazením? d) Kolik operací násobení bychom pořebovali k vypočtení hodnoty polynomu desátého stupně pomocí Hornerova schématu? 3. Odvoďte výpočetní složitost algoritmu Třídění přímým výběrem a) popište princip algoritmu b) zapište algoritmus pomocí metakódu c) spočítejte výpočetní složitost f(n) měřenou počtem porovnání d) najděte konstantu c a funkci g(n) takové, že f(n) <= c. g(n), tj. f(n) = O(g(n))
Výsledky 3.cvičení 1. 15,35 10 = 15 10 + 0,35 10 = 1111,01 2 2. ((((3x + 2)x + 4)x + 1)x + 5)x + 1 a) 15 násobení před uzávorkováním, 5 + 4 + 3 + 2 + 1 = 15 b) 5 násobení po uzávorkování c) 55 násobení přímým dosazením, n = 10, (n 2 +n)/2=(100+10)/2 = 55 d) 10 násobení pomocí Hornerova schématu 3. a) Postupně se prochází posloupnost (pole) a hodnoty a(j) pro j>1 se porovnávají s a(1). Pokud je a(j)<a(1), tak se další hodnoty porovnávají s a(j). Po průchodu celé posloupnosti až do konce se provede záměna nejmenší nalezené hodnoty s a(1). V dalším kroku se posloupnost znovu prochází, tentokrát od a(2). Na konci se provede záměna nejmenší nalezené hodnoty s a(2). Atd. b) viz. 1. cvičení nebo učebnice str. 114 c) počet porovnání: n+(n-1)+... +2 =(n+2)n/2 = (n 2 +2n)/2 = f(n) d) f(n) = O(n 2 ), c = 3/2 (například)
Úlohy- 4.cvičení 1. Napište algoritmus pro přidání informace x do zásobníku (LIFO) implementovaného jako pole. (n... počet obsazených prvků, Nmax... maximální možný počet prvků) 2. Napište algoritmus pro vyzvednutí informace z vrcholu zásobníku (LIFO) implementovaného jako pole. Informaci uložte do proměnné x. 3. Napište algoritmus pro přidání informace Nová data na konec fronty (FIFO) implementované jako spojový seznam. (zac, kon) 4. Napište algoritmus pro vyzvednutí informace ze začátku fronty implementované jako spojový seznam (FIFO). Informaci uložte do proměnné x. Uvolněte paměť pro další použití. 5. R = { }, A = { }, B = { } Uložte do binární tabulky množiny A a B, jež jsou podmnožinou množiny R. Pomocí binární tabulky stanovte jejich a) průnik b) sjednocení
Řešení 4.cvičení 1. Přidání informace x do (n+1)-ní složky zásobníku: Jestliže n = Nmax, pak tisk nelze přidat, plný zásobník, konec n := n+1 a[ ] := x 2. Vyzvednutí informace z vrcholu zásobníku a její uložení do proměnné x: Jestliže n = 0, pak tisk nelze vybrat, prázdný zásobník, konec x := a[ ] n := n-1 3. Přidání informace Nová data na konec fronty: new(p) p^.info := Nová data p^.dalsi := nil kon^.dalsi := p kon := p 4. Vyzvednutí informace ze začátku fronty a její uložení do proměnné x: Jestliže zac = nil, pak tiskni prázdný seznam, konec x := zac^.info p := zac^.dalsi dispose (zac) zac := p 5. R 0 1 2 3 4 5 6 7 8 9 10 A 1 1 0 1 0 0 1 1 0 1 0 B 1 0 1 0 0 1 0 1 0 0 1 A B 1 0 0 0 0 0 0 1 0 0 0 A B 1 1 1 1 0 1 1 1 0 1 1
Úlohy- 5.cvičení 1 2 3 4 5 6 1. Stanovte incidenční matici grafu. Hrany očíslujte zleva doprava a to nejprve hrany vycházející z uzlu 1, pak z uzlu 2, nakonec z uzlu 3. 2. Stanovte matici sousednosti grafu. 3. Kolik prvků bude mít pole, použijeme-li pro reprezentaci grafu v počítači pomocí pole matici sousednosti? a) Uložíme-li do pole všechny prvky matice sousednosti. b) Využijeme-li toho, že matice sousednosti je symetrická a na hlavní diagonále má samé nuly. 4. Najděte co nejvíc cyklů, které začínají a končí v uzlu 1. 5. Určete číslo nezávislosti α a uveďte alespoň jednu nezávislou komponentu, jejíž počet uzlů je roven α. 6. Nalezněte v grafu artikulaci nebo 2-artikulaci (takové dva uzly, po jejichž odstranění se graf rozpadne na dvě nebo více nesouvislých částí). 7. Nakreslete nový graf o 5 uzlech s 2-artikulací. Vyznačte ji.
Řešení 5.cvičení 1. Incidenční matice H1 H2 H3 H4 H5 H6 H7 H8 H9 1 1 1 1 0 0 0 0 0 0 2 0 0 0 1 1 1 0 0 0 3 0 0 0 0 0 0 1 1 1 4 1 1 1 0 0 0 0 0 0 5 0 0 0 1 1 1 0 0 0 6 0 0 0 0 0 0 1 1 1 2. Matice sousednosti 3. 1 2 3 4 5 6 1 0 0 0 1 1 1 2 0 0 0 1 1 1 3 0 0 0 1 1 1 4 1 1 1 0 0 0 5 1 1 1 0 0 0 6 1 1 1 0 0 0 a) Počet prvků pole: 6 x 6 = 36 (obecně: n 2 ) b) Počet prvků pole: (36 6)/2 = 15 (obecně: (n 2 - n)/2 4. Cykly z uzlu 1: {1,6,3,4,1}, {1,5,2,4,1}, {1,5,3,6,1}, {1,6,2,4,1}, {1,4,3,6,1}, {1,4,2,5,1}, {1,6,3,5,1}, {1,4,2,6,1} 5. Číslo nezávislosti α = 3 nezávislá komponenta např.: {1, 2, 3} 6. Artikulace ani 2-artikulace neexistuje.
Teorie - 6. Cvičení Prohledávání binárního kořenového stromu do hloubky pomocí zásobníku Krok 1. Vlož adresu kořene do zásobníku Krok 2. Opakuj následující operace, dokud není zásobník prázdný. Vyzvedni ze zásobníku adresu U daného uzlu v. Zpracuj informaci na adrese U. Má-li uzel v pravého následníka, vlož ho do zásobníku. Má-li uzel levého následníka, vlož ho do zásobníku. Prohledávání binárního kořenového stromu do šířky pomocí fronty Krok 1. Vlož adresu kořene do fronty Krok 2. Opakuj následující operace, dokud není fronta prázdná. Vyzvedni adresu U daného uzlu v ze začátku fronty. Zpracuj informaci na adrese U. Má-li uzel v levého následníka, vlož ho na konec fronty. Má-li uzel pravého následníka, vlož ho na konec fronty.
Úlohy- 6.cvičení 1. Nakreslete strom o alespoň 7 uzlech, který je AVL vyvážený, ale není dokonale vyvážený. 2. Uvedený strom prohledejte do hloubky a vytiskněte obsahy uzlů užitím operace inorder. Uveďte algoritmus rekurzivní procedury s uvedenou operací. U B C A H X G 3. Uvedený strom prohledejte do hloubky a vytiskněte obsahy uzlů užitím operace postorder. Uveďte algoritmus rekurzivní procedury s uvedenou operací. M B L R U J K 4. Vyjádřete následující výrazy v prefixové a postfixové notaci. a) ((u+t)*((x+y)*z))/(w-s) b) (u*((x+y)*z))/(s-(w+t)) c) a/(b-(c*(x/(y+z)))) 5. Sestrojte binární kořenový strom, při jehož prohledávání do hloubky jsou v zásobníku (vrchol je vlevo) postupně hodnoty (7), (11, 3), (4, 5, 3), (5, 3) (3), (9, 12), (2, 16, 12), (16, 12), (12)
Řešení- 6.cvičení 1. Strom o alespoň 7 uzlech, je AVL vyvážený, není dokonale vyvážený. 2. Tisk užitím operace inorder: B A U G H C X Hledej_2(U) jestliže U <> nil, pak Hledej_2(U^.levy) tisk(u^.info) Hledej_2(U^.pravy) 3. Tisk užitím operace postorder: K R B U J L M Hledej_3(U) jestliže U <> nil, pak Hledej_3(U^.levy) Hledej_3(U^.pravy) tisk(u^.info) 4. Vyjádřete následující výrazy v prefixové a postfixové notaci. a) prefixová notace: / * + u t * + x y z w s postfixová notace: u t + x y + z * * w s / b) prefixová notace: / * u * + x y z s + w t postfixová notace: u x y + z * * s w t + / c) prefixová notace: / a b * c / x + y z postfixová notace: a b c x y z + / * /
Úlohy- 7.cvičení 1. Sestrojte binární kořenový strom, při jehož prohledávání do šířky jsou ve frontě (vkládá se vpravo) postupně hodnoty (5), (3, 9), (9, 4, 1), (4, 1, 2) (1, 2), (2, 7, 6), (7, 6), (6), (8) 2. Sestrojte Huffmanův strom pro zprávu danou následující tabulkou. Dále stanovte Huffmanovy kódy jednotlivých znaků a celkový počet L potřebných bitů. znak A B C D E F G H I četnost 5 2 3 2 4 7 9 10 1 3. K haldě umístěné v daném poli a) přidejte prvek s klíčem 2 a přebudujte haldu b) zrušte kořen a přebudujte haldu 3 5 6 12 8 19 13 17 14 16 10 20 P(1) P(2) P(3) P(4) P(5) P(6) P(7) P(8) P(9) P(10) P(11) P(12) P(13) 4. Ve vyhledávacím stromu a) nalezněte hodnoty klíčů 4, 10 b) postupně zrušte uzly s klíči 5, 6 c) nakonec přidejte uzly s klíči 3, 12 6 2 8 L 1 5 7 9 4 13
Řešení- 7.cvičení Huffmanův kód (není určen jednoznačně) znak A B C D E F G H I četnost 5 2 3 2 4 7 9 10 1 kód 101 1000 1100 10011 1101 111 00 01 10010 délka 3 4 4 5 4 3 2 2 5 L = 5*3 + 2*4 + 3*4 + 2*5 + 4*4 + 7*3 + 9*2 + 10*2 + 1*5 = 105 bitů