Stromy. Jan Kybic.
|
|
- Naděžda Pokorná
- před 6 lety
- Počet zobrazení:
Transkript
1 Stromy Jan Kybic / 44
2 Stromy Binární vyhledávací stromy Množiny a mapy 2 / 44
3 Strom (Tree) Strom skládá se s uzlů (nodes) spojených hranami (edges). je souvislý a acyklický a Kořenový strom orientovaný graf, má jeden význačný uzel = kořen (root) b c z kořene vede do každého jiného uzlu právě jedna orientovaná cesta d e f do kořene nevstupuje žádná hrana, do každého jiného uzlu vstupuje právě jedna hrana 3 / 44
4 Vlastnosti stromů každé dva uzly jsou spojeny právě jednou neorientovanou cestou počet hran = počet uzlů - 1 pokud jednu hranu vyjmeme, graf bude nesouvislý pokud jednu hranu přidáme, graf bude obsahovat cyklus Názvosloví kořen, list, vnitřní uzel, rodič, (pravý/levý) potomek (syn), sourozenci, stupeň uzlu, hloubka (výška) Poziční strom potomci jsou označeni čísly (=levý/pravý) některý potomek může chybět 4 / 44
5 Binární strom poziční strom každý uzel má nanejvýš dva potomky. Úplný binární strom s n uzly každý uzel má právě dva potomky Počet uzlů v hloubce i je 2 i n = h i=0 2i = 2 h+1 1 Všechny listy mají hloubku h = log 2 (n + 1) 1 = log 2 n 1 Počet listů je (n + 1)/2, počet vnitřních uzlů je (n 1)/2. Pro každý binární strom s n uzly a hloubkou h log 2 n 1 h n 1 5 / 44
6 Příklady stromů Unixová struktura adresářů Images courtesy of Brad Miller, David Ranum. 6 / 44
7 Příklady stromů Gramatická struktura věty. Images courtesy of Brad Miller, David Ranum. 6 / 44
8 Příklady stromů Struktura aritmetického výrazu (7 + 3) (5 2) Images courtesy of Brad Miller, David Ranum. 6 / 44
9 Reprezentace stromu záznam class BinaryTree: def init (self, data,left=none,right=none): self.data = data self.left = left self.right = right 7 / 44
10 Reprezentace stromu záznam class BinaryTree: def init (self, data,left=none,right=none): self.data = data self.left = left self.right = right Reprezentace výrazu (7 + 3) (5 2): t=binarytree( *, BinaryTree( +,BinaryTree(7),BinaryTree(3)), BinaryTree( -,BinaryTree(5),BinaryTree(2))) 7 / 44
11 Reprezentace stromu záznam class BinaryTree: def init (self, data,left=none,right=none): self.data = data self.left = left self.right = right Reprezentace výrazu (7 + 3) (5 2): t=binarytree( *, BinaryTree( +,BinaryTree(7),BinaryTree(3)), BinaryTree( -,BinaryTree(5),BinaryTree(2))) V této reprezentaci strom=kořen. Prázdný strom = None. 7 / 44
12 Reprezentace stromu záznam class BinaryTree: def init (self, data,left=none,right=none): self.data = data self.left = left self.right = right Reprezentace výrazu (7 + 3) (5 2): t=binarytree( *, BinaryTree( +,BinaryTree(7),BinaryTree(3)), BinaryTree( -,BinaryTree(5),BinaryTree(2))) V této reprezentaci strom=kořen. Prázdný strom = None. Implicitní (default) parametry mohou a nemusí být zadány. Soubor binary_tree 7 / 44
13 Procházení stromu preorder nejdřív aktuální uzel, pak oba podstromy (prefixová notace) abdecfg inorder levý podstrom, pak aktuální uzel, pak pravý podstrom (infixová notace) dbeafcg postorder nejdřív oba podstromy, pak aktuální uzel (postfixová notace) debfgca a b c d e f g 8 / 44
14 Procházení stromu implementace def to_string_preorder(tree): return ( str(tree.data)+" "+ to_string_preorder(tree.left) + to_string_preorder(tree.right) if tree else "" ) 9 / 44
15 Procházení stromu implementace def to_string_preorder(tree): return ( str(tree.data)+" "+ to_string_preorder(tree.left) + to_string_preorder(tree.right) if tree else "" ) print(to_string_preorder(t)) * / 44
16 Procházení stromu implementace def to_string_preorder(tree): return ( str(tree.data)+" "+ to_string_preorder(tree.left) + to_string_preorder(tree.right) if tree else "" ) print(to_string_preorder(t)) * def to_string_postorder(tree): return ( to_string_postorder(tree.left) + to_string_postorder(tree.right) + " " + str(tree.data) if tree else "" ) 9 / 44
17 Procházení stromu implementace def to_string_preorder(tree): return ( str(tree.data)+" "+ to_string_preorder(tree.left) + to_string_preorder(tree.right) if tree else "" ) print(to_string_preorder(t)) * def to_string_postorder(tree): return ( to_string_postorder(tree.left) + to_string_postorder(tree.right) + " " + str(tree.data) if tree else "" ) print(to_string_postorder(t)) * 9 / 44
18 Procházení stromu implementace (2) def to_string_inorder(tree): if not tree: # prázdný strom return "" if tree.left: # binární operátor return ( "(" + to_string_inorder(tree.left) + str(tree.data) + to_string_inorder(tree.right) + ")" ) return str(tree.data) # jen jedno číslo 10 / 44
19 Procházení stromu implementace (2) def to_string_inorder(tree): if not tree: # prázdný strom return "" if tree.left: # binární operátor return ( "(" + to_string_inorder(tree.left) + str(tree.data) + to_string_inorder(tree.right) + ")" ) return str(tree.data) # jen jedno číslo print(to_string_inorder(t)) ((7+3)*(5-2)) 10 / 44
20 Vyhodnocení výrazu def evaluate(tree): """ Vyhodnotí aritmetický výraz zadaný stromem """ if tree.data== + : return evaluate(tree.left) + evaluate(tree.right) if tree.data== - : return evaluate(tree.left) - evaluate(tree.right) if tree.data== * : return evaluate(tree.left) * evaluate(tree.right) if tree.data== / : return evaluate(tree.left) / evaluate(tree.right) return tree.data # jen jedno číslo print(evaluate(t)) 30 Soubor binary tree 11 / 44
21 Stromy Binární vyhledávací stromy Množiny a mapy 12 / 44
22 Binární vyhledávací stromy motivace (Binary search trees) Aktualizovatelná struktura pro rychlé vyhledávání porovnatelných dat. Setříděné pole vkládání O(n), vyhledávání O(log n) Spojový seznam vkládání O(1), vyhledávání O(n) Vyhledávací strom vkládání O(log n), vyhledávání O(log n) 13 / 44
23 Množina Podporované operace add(key) vložení prvku delete(key) odstranění prvku contains(key) obsahuje množina daný prvek? Pomocné funkce: size / len Rychlé operace (složitost O(log n) nebo lepší) 14 / 44
24 Binární vyhledávací strom Vlastnosti každý uzel obsahuje klíč klíč v uzlu není menší, než všechny klíče v jeho levém podstromu klíč v uzlu není větší, než všechny klíče v jeho pravém podstromu 15 / 44
25 Reprezentace vyhledávacího stromu class BinarySearchTree: def init (self,key,left=none,right=none): self.key = key self.left = left self.right = right Strom = uzel. Prázdný strom reprezentujeme jako None. Soubor binary_search_tree.py 16 / 44
26 Vyhledávání ve stromu def contains(tree,key): """ Je prvek key ve stromu? """ if tree: # je strom neprázdný? if tree.key==key: # je to hledaný klíč? return True if tree.key>key: return contains(tree.left,key) else: return contains(tree.right,key) return False 17 / 44
27 Vytvoření ve stromu Hledání ve stromu je ekvivalentní binárnímu vyhledávání. Sestrojíme strom ze setříděného pole. def from_array(a): """ Build a tree (containing only keys) from an array """ def build(a): if len(a)==0: return None if len(a)==1: return BinarySearchTree(a[0]) m=len(a)//2 return BinarySearchTree(a[m],left=build(a[:m]), right=build(a[m+1:])) a=sorted(a) return build(a) 18 / 44
28 Vytisknutí stromu def print_tree(tree,level=0,prefix=""): if tree: print(" "*(4*level)+prefix+str(tree.key)) if tree.left: print_tree(tree.left,level=level+1,prefix="l:") if tree.right: print_tree(tree.right,level=level+1,prefix="r:") 19 / 44
29 Vyhledávácí strom příklad import binary_search_tree as bst t=bst.from_array([21, 16, 19, 87, 34, 92, 66]) bst.print_tree(t) 34 L:19 L:16 R:21 R:87 L:66 R:92 20 / 44
30 Vkládání do stromu def add(tree,key): """ Vloží key do stromu a vrátí nový kořen """ if tree is None: return BinarySearchTree(key) if key<tree.key: tree.left=add(tree.left,key) elif key>tree.key: tree.right=add(tree.right,key) return tree # hodnota již ve stromu je 21 / 44
31 Vkládání do stromu příklad print_tree(t) 34 L:19 L:16 R:21 R:87 L:66 R:92 t=add(t,41) t=add(t,16) print_tree(t) 34 L:19 L:16 R:21 R:87 L:66 L:41 R:92 22 / 44
32 Příklad: strom jako množina Vypiš všechny možné součty hodů na dvou kostkách. s=none for i in range(1000): s=add(s,random.randrange(1,7)+random.randrange(1,7)) print_tree(s) 7 L:4 R:9 L:3 R:6 L:2 L:5 L:8 R:11 L:10 R:12 23 / 44
33 Převod na pole Projde uzly stromu podle velikosti a uloží do pole. def to_array(tree): a=[] def insert_inorder(t): nonlocal a if t: insert_inorder(t.left) a+=[t.key] insert_inorder(t.right) insert_inorder(tree) return a print(to_array(s)) [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] nonlocal přístup k proměnné vnější funkce (jen Python 3) Soubor binary_search_tree.py 24 / 44
34 Odstranění prvku ze stromu 25 / 44
35 Odstranění prvku implementace def delete(tree, key): """ Smaže key za stromu tree a vrátí nový kořen. """ if tree is not None: if key < tree.key: # najdi uzel key tree.left = delete(tree.left, key) elif key > tree.key: tree.right = delete(tree.right, key) else: # uzel nalezen, má syny? if tree.left is None: return tree.right # jen pravý syn nebo nic elif tree.right is None: return tree.left # jen levý syn nebo nic else: # nahradíme uzel maximem levého podstromu w = rightmost_node(tree.left) tree.key = w.key tree.left = delete(tree.left, w.key) return tree 26 / 44
36 Odstranění prvku (2) def rightmost_node(tree): while tree.right: tree=tree.right return tree 27 / 44
37 Odstranění prvku příklad t=from_array([21, 16, 19, 87, 34, 92, 66]) print_tree(t) 34 L:19 L:16 R:21 R:87 L:66 R:92 t=delete(t,87) print_tree(t) 34 L:19 L:16 R:21 R:66 R:92 28 / 44
38 Množinový rozdíl (set difference) Find elements in array y but not in array x. def set_difference(x,y): t=none for i in y: t=add(t,i) for j in x: t=delete(t,j) return to_array(t) 29 / 44
39 Množinový rozdíl příklad x = [ 442, 59, 691, 84, 699, 603, 697, 669, 591, 795, 439, 198, 207, 785, 101, 372, 804, 728, 837, 605, 336, 667, 969, 860, 241, 728, 866, 82, 317, 154, 340, 992, 535, 331, 900, 177, 735, 256, 903, 195, 182, 190, 191, 647, 399, 707, 927, 817, 905, 477, 194, 205, 896, 930, 757, 388, 354, 987, 137, 403, 272, 576, 406, 589, 28, 38, 179, 486, 814, 310, 102, 794, 158, 173, 543, 499, 923, 353, 610, 927, 721, 125, 324, 23, 753, 527, 292, 622, 44, 475, 345, 158, 612, 331, 525, 225, 261, 943, 592, 21 ] y = [ 21, 622, 603, 866, 173, 256, 753, 439, 310, 477, 804, 345, 592, 194, 589, 817, 905, 794, 707, 336, 44, 179, 190, 23, 667, 728, 837, 101, 721, 82, 860, 207, 177, 28, 331, 647, 900, 525, 158, 75, 406, 354, 125, 930, 195, 154, 353, 691, 292, 987, 795, 158, 102, 969, 403, 591, 699, 182, 896, 324, 605, 198, 241, 923, 475, 84, 728, 340, 38, 543, 331, 137, 785, 943, 527, 903, 225, 486, 442, 399, 814, 927, 735, 612, 261, 388, 669, 317, 59, 927, 610, 499, 576, 697, 272, 205, 757, 535, 372, 992, 191 ] 30 / 44
40 Množinový rozdíl příklad x = [ 735, 909, 600, 717, 575, 349, 756, 762, 950, 8, 129, 368, 226, 248, 198, 875, 3, 566, 611, 115, 351, 136, 114, 394, 550, 910, 198, 479, 516, 371, 780, 290, 931, 81, 689, 700, 132, 133, 930, 298, 233, 383, 923, 425, 419, 455, 400, 641, 753, 78, 722, 44, 239, 957, 832, 253, 660, 232, 165, 730, 831, 422, 112, 9, 747, 992, 456, 580, 168, 879, 399, 544, 481, 797, 857, 839, 479, 998, 135, 193, 828, 630, 748, 897, 447, 363, 664, 847, 247, 943, 470, 157, 823, 788, 601, 140, 233, 343, 73, 456 ] y = [ 717, 580, 290, 233, 226, 363, 481, 8, 140, 132, 747, 823, 566, 931, 239, 660, 232, 115, 233, 923, 455, 689, 136, 371, 756, 419, 193, 198, 722, 422, 81, 368, 910, 394, 470, 550, 950, 73, 762, 343, 3, 135, 516, 383, 133, 897, 400, 748, 780, 797, 248, 909, 129, 998, 664, 857, 753, 700, 735, 992, 847, 456, 930, 575, 399, 839, 943, 544, 479, 730, 447, 198, 832, 253, 641, 875, 44, 157, 112, 479, 831, 828, 78, 425, 611, 456, 601, 247, 349, 788, 298, 21, 114, 168, 630, 165, 879, 957, 351, 600, 9 ] print(set_difference(x,y)) [21] Složitost O(n log n) místo O(n 2 ). 30 / 44
41 Složitost Vkládání, vyhledávání i mazání = 1-2 průchody stromem = O(h) Dokonale vyvážený strom = rozdíl počtu uzlů podstromů stejného rodiče se liší nejvýše o / 44
42 Složitost Vkládání, vyhledávání i mazání = 1-2 průchody stromem = O(h) Dokonale vyvážený strom = rozdíl počtu uzlů podstromů stejného rodiče se liší nejvýše o 1. hloubka h = O(log n) složitost vkládání, vyhledávání i mazání O(log n) 31 / 44
43 Složitost Vkládání, vyhledávání i mazání = 1-2 průchody stromem = O(h) Dokonale vyvážený strom = rozdíl počtu uzlů podstromů stejného rodiče se liší nejvýše o 1. hloubka h = O(log n) složitost vkládání, vyhledávání i mazání O(log n) Nejhorší případ Degenerovaný strom s hloubkou n 1 Složitost vkládání, vyhledávání i mazání O(n) 31 / 44
44 Vyvažování stromu Dokonalé vyvážení je obtížné, stačí hloubka h = O(log n) Náhodná data Omezení na tvar stromu AVL stromy (Adelson-Velsky a Landis) red-black trees (červeno-černé stromy) 2-3 stromy... Při přidávání/odebírání elementů strom vyvažujeme Vyvažování má složitost O(log n) 32 / 44
45 AVL stromy (Adelson-Velsky a Landis) Rozdíl hloubek podstromů stejného rodiče se liší nejvýše o 1. Pro AVL strom platí h < c log 2 (n + 2) + b kde c = log 1 2 φ 1.44, b a φ = 1 2 ( 5 + 1) (zlatý řez) Pro každý binární strom h > log 2 (n + 1) 1 33 / 44
46 AVL stromy (Adelson-Velsky a Landis) Rozdíl hloubek podstromů stejného rodiče se liší nejvýše o 1. Pro AVL strom platí h < c log 2 (n + 2) + b kde c = log 1 2 φ 1.44, b a φ = 1 2 ( 5 + 1) (zlatý řez) Pro každý binární strom h > log 2 (n + 1) 1 V každém uzlu si pamatujeme h(l) h(r) { 1, 0, 1} 33 / 44
47 Maximálně nevyvážené AVL stromy 34 / 44
48 Rotace Nevyváženost odstraníme rotací 35 / 44
49 Rotace Nevyváženost odstraníme rotací 35 / 44
50 Rotace Nevyváženost odstraníme rotací 35 / 44
51 Rotace Problém 35 / 44
52 Rotace Dvojitá rotace Implementace např. Problem Solving with Algorithms and Data Structures 35 / 44
53 Stromy Binární vyhledávací stromy Množiny a mapy 36 / 44
54 Množina Podporované operace add(key) vložení prvku delete(key) odstranění prvku contains(key) obsahuje množina daný prvek? Pomocné funkce: size / len Rychlé operace (složitost O(log n) nebo lepší) 37 / 44
55 Asociativní mapa Associative map Funkce klíč hodnota Podporované operace (key value) put(key,value) vložení položky delete(key) odstranění prvku contains(key) obsahuje mapa daný prvek? get(key) value nalezení/vyzvednutí hodnoty Pomocné funkce: size / len Rychlé operace (složitost O(log n) nebo lepší) 38 / 44
56 Asociativní mapa Associative map Funkce klíč hodnota Podporované operace (key value) put(key,value) vložení položky delete(key) odstranění prvku contains(key) obsahuje mapa daný prvek? get(key) value nalezení/vyzvednutí hodnoty Pomocné funkce: size / len Rychlé operace (složitost O(log n) nebo lepší) Množina je speciální případ mapy. 38 / 44
57 Reprezentace class BinarySearchTree: def init (self, key,value=none,left=none,right=none): self.key = key self.value = value self.left = left self.right = right Soubor binary_search_tree.py 39 / 44
58 Vyhledávání v mapě def get(tree,key): """ Vrátí value prvku s klíčem key, jinak None """ if tree: # je strom neprázdný? if tree.key==key: # je to hledaný klíč? return tree.value if tree.key>key: return get(tree.left,key) else: return get(tree.right,key) return None 40 / 44
59 Vkládání do mapy def put(tree,key,value): """ Vloží pár key -> value, vrátí nový kořen """ if tree is None: return BinarySearchTree(key,value=value) if key<tree.key: tree.left=put(tree.left,key,value) elif key>tree.key: tree.right=put(tree.right,key,value) else: tree.value=value # klíč již ve stromu je return tree 41 / 44
60 Mapa příklad tabulka symbolů t=none t=put(t, pi, ) t=put(t, e, ) t=put(t, sqrt2, ) t=put(t, golden, ) print_tree(t) pi -> L:e -> R:golden -> R:sqrt2 -> print(get(t, pi )) print(get(t, e )) print(get(t, gamma )) None Implementace funguje i pro řetězcové klíče. 42 / 44
61 Vyhledávací stromy Datová struktura pro porovnatelné klíče Může reprezentovat množinu i mapu. Základní operace (vkládání, hledání, mazání) mají složitost O(log n). Vyšší režie (oproti např. poli) Stromů je mnoho typů B-stromy k-d stromy, R-stromy prefixové stromy ropes / 44
62 Náměty na domácí práci Reprezentujte strom pomocí dvou tříd, aby nebylo potřeba vracet nový kořen. Doplňte detekci chyb. Zefektivněte implementaci, aby nedocházelo k neustálému přepisování odkazů. Zrychlete operaci delete pro případ mazání uzlu se dvěma syny. Implementujte Eratosthenovo síto pomocí množin. Implementujte AVL strom. Ověřte experimentálně časovou složitost operací se stromem. Přepište algoritmy bez použití rekurze. Najděte množinový rozdíl dvou polí pomocí třídění. 44 / 44
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015
Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí
Základní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní
Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy
Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný
Spojový seznam. Jan Kybic.
Spojový seznam Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 25 Složitost operací u lineárních datových struktur v Pythonu operace zásob. fronta pole pole řetězce přidej na začátek
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy
Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří
Rozptylovací tabulky
Rozptylovací tabulky Hash tables Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 31 Rozptylovací tabulka Hash table Rozptylovací tabulka = implementace množiny / asociativního pole
Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy
Základní pojmy Stromy doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Graf uzly hrany orientované / neorientované Souvislý
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.
Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující
Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární stromy pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1
Třídění a vyhledávání Searching and sorting
Třídění a vyhledávání Searching and sorting Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 33 Vyhledávání Třídění Třídící algoritmy 2 / 33 Vyhledávání Searching Mějme posloupnost (pole)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)
ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel
Programování v C++ 1, 16. cvičení
Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené
Dynamické datové struktury II.
Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)
13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací
Stromy. Jan Hnilica Počítačové modelování 14
Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A
BINARY SEARCH TREE
---------------------------------------- BINARY SEARCH TREE --------------------------------------------------- Je dán BVS s n uzly. Máme za úkol spočítat hodnotu součtu všech klíčů v tomto stromě. Když
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Radek Mařík
2012-03-20 Radek Mařík 1. Pravá rotace v uzlu U a) v podstromu s kořenem U přemístí pravého syna U.R uzlu U do kořene. Přitom se uzel U stane levým synem uzlu U.R a levý podstrom uzlu U.R se stane pravým
STACK
Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný
1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10
Ú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
Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom
8 Podklady ředmětu ro akademický rok 2013/2014 Radim Farana Obsah 2 Dynamické datové struktury. Strom. Binární stromy. Vyhledávací stromy. Vyvážené stromy. AVL stromy. Strom 3 Název z analogie se stromy.
Dynamické datové struktury IV.
Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra
2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.
Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus
BINARY SEARCH TREE
Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný
bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT
binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım
Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Red Black strom je binární strom s jedním dvouhodnotovým příznakem
Datové struktury Úvod
Datové struktury Úvod Navrhněte co nejjednodušší datovou strukturu, která podporuje následující operace: 1. Insert a Delete v O(n), Search v O(log n); Datové struktury Úvod Navrhněte co nejjednodušší datovou
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
Rekurzivní algoritmy
Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS
a) b) c) Radek Mařík
2012-03-20 Radek Mařík 1. Čísla ze zadané posloupnosti postupně vkládejte do prázdného binárního vyhledávacího stromu (BVS), který nevyvažujte. Jak bude vypadat takto vytvořený BVS? Poté postupně odstraňte
2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky
Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých
Dynamic programming. Optimal binary search tree
The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamic programming Optimal binary search tree Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The complexity
Dynamické programování. Optimální binární vyhledávací strom
The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The
1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:
Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.
Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)
Stromy Binární Vyhledávací Stromy, u kterých je č asová složitost operací v nejhorším případě rovná O(log n) Vlastnosti Red-Black Stromů Vlastnosti Red-Black stromů Každý uzel stromu je obarven červenou
ADT STROM Lukáš Foldýna
ADT STROM Lukáš Foldýna 26. 05. 2006 Stromy mají široké uplatnění jako datové struktury pro různé algoritmy. Jsou to matematické abstrakce množin, kterou v běžném životě používáme velice často. Příkladem
Rekurze a zásobník. Jak se vypočítá rekurzivní program? volání metody. vyšší adresy. main(){... fa(); //push ret1... } ret1
Rekurze a zásobník Jak se vypočítá rekurzivní program? volání metody vyšší adresy ret1 main(){... fa(); //push ret1... PC ret2 void fa(){... fb(); //push ret2... return //pop void fb(){... return //pop
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 5. dubna 2017 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
Úvod do teorie grafů
Úvod do teorie grafů Neorientovaný graf G = (V,E,I) V množina uzlů (vrcholů) - vertices E množina hran - edges I incidence incidence je zobrazení, buď: funkce: I: E V x V relace: I E V V incidence přiřadí
Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.
Vyhledávací stromy Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vytvářejí se vždy nad již existující datovou strukturou (zpravidla tabulkou). Vyhledávací stromy můžeme rozdělit
SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů
SPJA, cvičení 1 ipython, python, skripty základy syntaxe: základní datové typy, řetězce podmínky: if-elif-else, vyhodnocení logických výrazů cykly: for, while kolekce: seznam, n-tice, slovník funkce, list
Algoritmy II. Otázky k průběžnému testu znalostí
Algoritmy II Otázky k průběžnému testu znalostí Revize ze dne 19. února 2018 2 Lineární datové struktury 1 1. Vysvětlete co znamená, že zásobník představuje paměť typu LIFO. 2. Co je to vrchol zásobníku?
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA INFORMAČNÍCH TECHNOLOGIÍ ÚSTAV INFORMAČNÍCH SYSTÉMŮ FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF INFORMATION SYSTEMS PŘÍPRAVA DOMÁCÍCH
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
Binární vyhledávací stromy II
Binární vyhledávací stromy II doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 19. března 2019 Jiří Dvorský (VŠB TUO) Binární vyhledávací
Vyvažování a rotace v BVS, všude se předpokládá AVL strom
Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce
Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem
Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]
Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání
Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost
Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??
ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky
LG 04 Zásobník Fronta Operace nqueue, equeue, Front, mpty... yklická implementace fronty Průchod stromem do šířky Grafy průchod grafem do šířky průchod grafem do hloubky Ořezávání a heuristiky 1 Zásobník
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
Rozptylování, stromy - zákl. vlastnosti
Karel Müller, Josef Vogel (ČVUT FIT) Rozptylování, stromy - zákl. vlastnosti BI-PA2, 2011, Přednáška 12 1/55 Rozptylování, stromy - zákl. vlastnosti Ing. Josef Vogel, CSc Katedra softwarového inženýrství
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
TGH05 - Problém za milion dolarů.
TGH05 - Problém za milion dolarů. Jan Březina Technical University of Liberec 20. března 2012 Časová složitost algoritmu Závislost doby běhu programu T na velikosti vstupních dat n. O(n) notace, standardní
Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace
Programování: základní konstrukce, příklady, aplikace IB111 Programování a algoritmizace 2011 Připomenutí z minule, ze cvičení proměnné, výrazy, operace řízení výpočtu: if, for, while funkce příklady:
Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika
amortizovaná složitost, Fibonacciho halda, počítačová aritmetika Jiří Vyskočil, Marko Genyg-Berezovskyj 2009 Amortizovaná složitost Asymptotická složitost často dostatečně nevypovídá o složitosti algoritmů,
IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
Časová složitost / Time complexity
Časová složitost / Time complexity Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 24 Složitost algoritmů Algorithm complexity Časová a paměťová složitost Trvání výpočtu v závislosti
SQL tříhodnotová logika
SQL tříhodnotová logika Jmeno Prijmeni Student Jaroslav Novák true Josef Novotný false Jiří Brabenec SELECT * FROM OSOBA WHERE Student!= true Jaký bude výsledek? SQL tříhodnotová logika Jmeno Prijmeni
Da D to t v o é v ty t py IB111: Datové typy
Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité
Datové struktury 2: Rozptylovací tabulky
Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy
Rekurze a rychlé třídění
Rekurze a rychlé třídění Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 54 Rekurze Rychlé třídění 2 / 54 Rekurze Recursion Rekurze = odkaz na sama sebe, definice za pomoci sebe
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
Dynamické datové struktury I.
Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
Časová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620
Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.
Jednoduché datové struktury a stromy
155OB poznámky 2015-10-25 Jednoduché datové struktury a stromy 2015-10-25 1 / 69 Obsah 1 Jednoduché datové struktury a stromy Jednoduché datové struktury Binární stromy AVL stromy Quadtrees a Octrees B-stromy
DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3
DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),
B-Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.
B-Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 11 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start
Záznam, zásobník a fronta
Záznam, zásobník a fronta Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 57 Záznam Zásobník Fronta 2 / 57 Záznam (Record) Záznam (obecně) strukturovaný/složený datový typ obsahuje
Konečný automat. Jan Kybic.
Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s
Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.
Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky
Programování v Pythonu
ƒeské vysoké u ení technické v Praze FIT Programování v Pythonu Ji í Znamená ek P íprava studijního programu Informatika je podporována projektem nancovaným z Evropského sociálního fondu a rozpo tu hlavního
5. Vyhledávání a řazení 1
Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 1 Základy algoritmizace 5. Vyhledávání a řazení 1 doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze
ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.
ADT prioritní fronta Haldy množina M operace Přidej(M,x) přidá prvek x do množiny M Odeber(M) odeber z množiny M prvek, který je na řadě Zásobník (LIFO), Fronta (FIFO) Prioritní fronta: Přidej(M,x) přidá
R zné algoritmy mají r znou složitost
/ / zné algoritmy mají r znou složitost Dynamické programování / / Definice funkce Otázka Program f(x,y) = (x = ) (y = ) f(x, y-) + f(x-,y) (x > ) && (y > ) f(,) =? int f(int x, int y) { if ( (x == ) (y
autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)
definice ( tree) autoři: Rudolf Bayer, Ed McCreight vyvážený strom řádu m ( ) každý uzel nejméně a nejvýše m potomků s výjimkou kořene každý vnitřní uzel obsahuje o méně klíčů než je počet potomků (ukazatelů)
Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2007 Michal Krátký, Jiří Dvorský 1/57
6. Tahy / Kostry / Nejkratší cesty
6. Tahy / Kostry / Nejkratší cesty BI-EP2 Efektivní programování 2 LS 2017/2018 Ing. Martin Kačer, Ph.D. 2011-18 Martin Kačer Katedra teoretické informatiky Fakulta informačních technologií České vysoké
Vzdálenost uzlů v neorientovaném grafu
Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
3 Algoritmy řazení. prvku a 1 je rovněž seřazená.
Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A ... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka()
Abstraktní datové typy
Karel Müller, Josef Vogel (ČVUT FIT) Abstraktní datové typy BI-PA2, 2011, Přednáška 10 1/27 Abstraktní datové typy Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra teoretické informatiky,
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010
Pokročilé haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (I-EFA) ZS 2010/11,