Dynamické datové struktury II.
|
|
- Michal Pravec
- před 6 lety
- Počet zobrazení:
Transkript
1 Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 1 / 56
2 Obsah přednášky 1 Strom 2 Binární vyhledávací strom Binární strom 3 Vyvážené BST stromy Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 2 / 56
3 Strom 1. Strom Patří mezi rekurzivní datové struktury. Takové uspořádání dat, kdy každý prvek má nejvýše jednoho předchůdce a může mít více než jednoho následníka. Jedna z nejčastěji používaných dynamických datových struktur. Mnoho typů stromů: binární stromy, ternární stromy, kořenové stromy, volné stromy... Neorientovaný graf G = H, U, ρ, H = {h i n h i=1, U = {u i nu i=1, ρ(h) = [u 1, u 2 ]. G stromem T, T G, pak právě jedna cesta C C(u, v) = {h 1,..., h k, ρ(h 1 ) = [u, ], ρ(h 1 ) = [, v], u, v U. Pozn.: každá hrana h se v cestě C vyskytuje pouze 1x. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 3 / 56
4 Strom 2. Typy uzlů 3 typy uzlů: Listy: Uzly bez následníka, u l. Není k nim připojen žádný podstrom. Kořen: Uzel bez předchůdce = kořen. Existuje právě 1, u 0. Vnitřní uzly: Uzly, které nejsou listem ani kořenem. Kořenové stromy: Každý uzel je současně kořenem stromu a zároveň listem stromu vyšší úrovně. Volné stromy: Nedisponují kořenem, obecnější datové struktury (seznam). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 4 / 56
5 Strom 3. Stromy, základní vztahy Stupeň uzlu m: maximální počet potomků uzlu (m = 2, binární; m = 3, ternární). Vztah počtu uzlů a hran n u = n h 1. Výška uzlu x: Délka cesty od kořene k uzlu Výška stromu h: Představuje úroveň nejnižšího uzlu x = C(u 0, v) x l = C(u 0, u l ). h = max (x i) = max C(u 0, u l ). T u l U Ovlivňuje rychlost operací nad stromem (odpovídá hloubce rekurze). Snaha vytvářet stromy s h, cesty do všech uzlů stejně dlouhé: x l = x l Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 5 / 56
6 Strom 4. Stromy, základní vztahy Vztah mezi počtem uzlů a úrovní x n u (x) = m x 1. Vztah mezi počtem uzlů a výškou stromu: h n u m 0 + m m h = m h = 1 mh+1 1 m. Binární strom: n u 2 h 1. i=0 Vztah mezi výškou h a počtem uzlů n u : ln(nu ) h ln(m), n u 1. = log m (n u ), n u 1 Pozor na stromy h sup(n u 1), neefektivní! Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 6 / 56
7 Strom 5. Ukázky stromů pro různá n Unární strom: n = 1 seznam, fronta zásobník. Binární strom: n = 2. Ternární strom: n = 3. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 7 / 56
8 Strom 6. Vyvážené a degenerované stromy Vyvážený strom: Každý uzel má podobný počet potomků nebo výšku. Pro konstrukci vyvážených stromů existuje řada různých algoritmů. Využití při práci s daty, teorii grafů, indexování. Nevyvážený (degenerovaný) strom: Nerovnoměrné rozložení uzlů, větší výška. Nebezpečí používání: značná hloubka rekurzivního volání, při provádění může dojít pamět. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 8 / 56
9 Binární strom 7. Binární strom Nejčastěji používané typy stromů v informatice, m = 2. Každý uzel (rodič) má dva podstromy (potomky): levý podstrom a pravý podstrom. Využití pro rychlé vyhledávání, indexace, komprese,... Vyvážené binární stromy: Rovnoměrné rozložení uzlů, neobsahuje příliš dlouhé či krátké větve. Všechny listy se nacházejí na přibližně stejné úrovni. Hloubka vyváženého binárního stromu: h = log 2 (n u ). Důsledek: Operace nad tímto stromem mají příznivou asymptotickou složitost. Procházení, vyhledávání se stávají efektivní, méně efektivní přidávání či mazání uzlů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 9 / 56
10 Binární strom 8. Vyvážené binární stromy Dokonale vyvážený binární strom: Počet vrcholu v levém a pravém podstromu se liší maximálně o 1. Obtížné na implementaci při přidávání a odebírání vrcholu. Nutné jeho převažování (LL, LP, PL, PP rotace). Absolutně vyvážený binární strom: Výška levého podstromu se rovná výšce pravého podstromu nebo se liší právě o 1 (Adelson, Velskii, Landis) AVL stromy. Snadnější zajištění vyváženosti než v předchozí variantě, používány v praxi. h AVL 2 log(n u ). Převažování stromu O(log(n u ). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 10 / 56
11 9. Ukázky binárních stromů Binární strom Dokonale vyvážený strom (1,2), absolutně vyvážený strom (3). Tomáš Bayer (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 11 / 56
12 Binární strom 10. Binární vyhledávací strom (BST) Pro každý uzel u U, a jeho potomky u left, u right U platí: u left < u u right > u, u U. Všechny prvky v levém podstromu jsou menší než u, Všechny prvky v pravém podstromu větší než u. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 12 / 56
13 11. Operace nad BST stromy Základní operace: Přidání uzlu: O(log(N)), Odstranění uzlu: O(log(N)), Nalezení uzlu: O(log(N)), Průchod stromem: O(N). Smazání stromu: O(N). Pokud stromy nejsou vyvážené, složitost O(log(N)) O(N)!!! Operace probíhají ve směru shora-dolů: od kořene k listům (přidání uzlu), od listům ke kořeni (mazání). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 13 / 56
14 12. Procházení BST stromu 3 základní metody procházení stromu, složitost O(N): 1 Přímé zpracování: PREORDER. 2 Vnitřní zpracování: INORDER. 3 Zpětné zpracování: POSTORDER. Přímé zpracování: Nejprve zpracován kořen, poté levý podstrom, nakonec pravý podstrom. Vnitřní zpracování: Nejprve zpracován levý podstrom, poté kořen, nakonec pravý podstrom. Zpětné zpracování: Nejprve zpracován levý podstrom, poté pravý podstrom, nakonec kořen. Princip zpracování stejný, liší se však pořadím prováděných operací. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 14 / 56
15 13. Procházení stromu PREORDER Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 15 / 56
16 14. Procházení stromu INORDER Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 16 / 56
17 15. Implementace třídy Uzel v BST stromu public class Uzel { int data; //Datova polozka Uzel levy; //Odkaz na levy podstrom Uzel pravy; //Odkaz na pravy podstrom public Uzel(int data_) { //Konstruktor data=data_; //Pouze inicializace dat, zarazeni pozde null; pravy=null; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 17 / 56
18 16. Vytvoření prázdného stromu, ukázka Složitost O(1). Postup vytvoření prázdného stromu: Vytvoření odkazu na kořen. Inicializace odkazu na null: koren=null. public class Strom { private Uzel koren; public Strom (){ koren=null; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 18 / 56
19 17. Procházení stromu PREORDER: rekurze Záměnou pořadí tisku můžeme ilustrovat varianty INORDER, PREORDER, POSTORDER. Rekurzivní varianta: Strom.java public void preorder(uzel u) { if (u==null) return; else { System.out.println(u.data); //1. koren preorder(u.levy); //2. L podstrom preorder(u.pravy); //3. P podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 19 / 56
20 18. Procházení stromu PREORDER: zásobník Nekurzivní varianta s využitím zásobníku. public void preorder(uzel u) { Stack S = new Stack(); S.push (u); while (!S.empty()){ Uzel v = S.pop() System.out.println(v.data); //1. koren if (v.levy!= null) S.push(v.levy); //2. L podstrom if (v.pravy!= null) S.push(v.levy); //3. P podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 20 / 56
21 19. Procházení stromu INORDER: rekurze public void inorder(uzel u) { if (u==null) return; else { inorder(u.levy); //1. L podstrom System.out.println(u.data); //2. koren inorder(u.pravy); //3. P podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 21 / 56
22 20. Procházení stromu INORDER: zásobník public void inorder(uzel u) { Stack S = new Stack(); S.push (u); while (!S.empty()){ Uzel v = S.pop() if (v.levy!= null) S.push(v.levy); //1. L podstrom System.out.println(v.data); //2. koren if (v.pravy!= null) S.push(v.levy); //3. P podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 22 / 56
23 21. Procházení stromu POSTORDER: rekurze public void postorder(uzel u) { if (u==null) return; else { postorder(u.levy); //1. L podstrom postorder(u.pravy); //2. P podstrom System.out.println(u.data); //3. koren Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 23 / 56
24 22. Procházení stromu POSTORDER: zásobník public void postorder(uzel u) { Stack S = new Stack(); S.push (u); while (!S.empty()){ Uzel v = s.pop() if (v.levy!= null) S.push(v.levy); //1. L podstrom if (v.pravy!= null) S.push(v.levy); //2. P podstrom System.out.println(v.data); //3. koren Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 24 / 56
25 23. Přidání nového uzlu Složitost O(1.4 log(n)). Postup využívá rekurzivní prohledávání stromu ve směru od kořene k listům: nalezení vhodného uzlu a zařazení položky. Využijeme přístup PREORDER (nejprve zpracujeme kořen, poté levý podstrom, následně pravý podstrom) Postup přidání nového uzlu: 1 Otestujeme, zda je přidávaný uzel v kořenem 2 Pokud ano (v=null), vytvořen nový uzel. 3 Jinak: Je-li data < v.data (tj. kořen podstromu), přidáme v do levého podstromu V opačném případě přidáme v do pravého podstromu 4 Vrátíme odkaz na nově vytvořený kořen. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 25 / 56
26 24. Přidání nového uzlu: rekurze Strom.java private Uzel pridej(uzel v, int data) { //Rekurzivni metoda if (v==null) v=new Uzel(data); //Prazdny strom else { if(data<v.data) { //Pridani do L podstromu v.levy=pridej(v.levy, data); //Vrati odkaz na L podstrom else if(data>v.data) { //Pridani do P podstromu v.pravy= pridej(v.pravy,data); //Vrati odkaz na P podstrom else return null; //Prvek uz ve stromu je return v; //Odkaz na nove vytvoreny prvek public void pridejuzel(int data){ //Pridani, nerekurzivni metoda koren=pridej(koren, data); //Volani privatni rekurzivni metody Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 26 / 56
27 25. Přidání nového uzlu: nerekurzivní řešení void pridej(int data) { //Nekurzivni reseni if (root==null) { //Prazdny strom root=new Uzel(data); return; Uzel u = koren, p = u; //Urceni uzlu a jeho predchudce while (u!= null) //Opakuj, dokud nedojdeme do listu p = u; //Zapamatuj si predchudce if(data<u.data) u = u.levy; //Prohledavani L podstromu else if(data>u.data) u = u.pravy; //Prohledavani P podstromu else return; //Uz je ve stromu u = new Uzel (data); if (data < p.data) p.levy = u; //Pridani do L podstromu else p.pravy = u; //Pridani do P podstromu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 27 / 56
28 26. Nalezení uzlu ve stromu Složitost C aver = 1.4 log(n). 1 Pokud je strom prázdný, ukončíme jeho prohledávání. 2 Jinak testujeme shodu uzlu a hledané položky. V případě shody ukončíme prohledávání. 3 Pokud hledaná položka menší než hodnota v L podstromu, hledáme v L podstromu. 4 Jinak prohledáme P podstrom. Poznámka k implementaci: Využití rekurze. Pokud je uzel nalezen, vracíme odkaz na něj. V opačném případě vracíme null. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 28 / 56
29 27. Nalezení uzlu v BST stromu, ukázka private Uzel najdi(int data, Uzel u) { //Rekurzivni metoda //Prazdny strom if (u==null) return null; //Rovnost s prvkem if (data==u.data) return u; //Vraceni uzlu //Prohledavani L podstromu if (data<u.data) return najdi (data,u.levy); //Prohledavani P podstromu else return najdi(data,u.pravy); public Uzel nalezeni(int data) { //Nerekurzivni metoda return najdi (data, koren); //Volani privatni rekurzivni met Na tomto principu založeno tzv. binární vyhledávání. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 29 / 56
30 28. Smazání stromu Složitost O(N). Mazání probíhá od kořene k uzlům. Nejprve mažeme levý podstrom, poté mažeme pravý podstrom. Jako poslední mažeme kořen. Postup mazání stromu: 1 Pokud je strom prázdný, ukončíme mazání. 2 Smažeme levý podstrom připojený k aktuálnímu uzlu u. 3 Smažeme pravý podstrom připojený k aktuálnímu uzlu u. 4 Smažeme uzel u. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 30 / 56
31 29. Smazání stromu, ukázka Strom.java public void smaz(uzel u) { if (u!=null) { //Neni strom prazdny? smaz(u.levy); //Smazani L podstromu smaz(u.pravy); //Smazani P podstromu u=null; //Prirazeni null korenu Využití POSTORDER procházení. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 31 / 56
32 30. Smazání uzlu Binární vyhledávací strom Složitost O(1.4 log(n)). Smazání uzlu představuje zřejmě implementačně nejtěžší operaci nad binárním stromem. Cílem je odstranění uzlu zadaného hodnotou ze stromu. Při mazání uzlu dochází ke třem situacím: Mazaný uzel je list. Mazaný uzel má jednoho následníka. Mazaný uzel má dva následníky. Varianty (1) (2) jednoduché, varianta (3) obtížnější. Postup mazání uzlu: 1 Test, zda se ve stromu vyskytuje uzel se zadaným klíčem. 2 Pokud se uzel ve stromu nevyskytuje, proces mazání je ukončen. 3 V opačném případě mohou nastat 3 situace (viz výše). Detekce, o jakou variantu se jedná. 4 Smazání uzlu. 5 Rekonstrukce sousedských vztahů (odkazy na L a P podstrom). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 32 / 56
33 31. Upravené prohledávání stromu Při hledání si zapamatujeme předchůdce p nalezeného uzlu u. Uzlu p následně upravíme odkaz na levý či pravý uzel (následník mazaného). private Uzel najdi(int data, Uzel u, Uzel p){ //Rekurzivni metoda //Prazdny strom if (u==null) return null; //Rovnost s prvkem if (data==u.data) return u; p=u; //Zapamatovani predchudce //Prohledavani L podstromu if (data<u.data) return najdi (data,u.levy,p); //Prohledavani P podstromu else return najdi(data,u.pravy,p); public Uzel hledej(int data) { //Nerekurzivni metoda Uzel n=null; return najdi(data, koren, n); //Volani rekurzivni privatni metody Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 33 / 56
34 32. Smazání uzlu, ukázka Strom.java public void smaz(int data) { //Rekurzivni metoda Uzel p; //Predchudce mazaneho uzlu //Upravene prohledavani, vraci predchudce Uzel u=najdi(data,p); if (u==null) return; //Uzel nenalezen else { //Uzel nalezen if ((u.levy==null)&&(u.pravy==null)) { //List smazlist(u,p); else if(u.levy==null u.pravy==null) { //1 potomek smaz1vetev(u,p); else smaz2vetve(u,p); //2 potomci Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 34 / 56
35 33. Smazání listu Metodě předáváme jako parametr předchůdce p uzlu u. Při mazání listu u mohou nastat dva případy: Mazaný list u je kořenem. Předchůdce listu u má adresu null. Uzel u smažeme. Mazaný list u není kořenem. Předchůdce uzlu u nemá adresu null. Otestujeme, zda na u ukazuje levý nebo pravý podstrom. Nastavíme p.levy=null nebo p.pravy=null. Nejjednodušší varianta, obejde se bez použití rekurze. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 35 / 56
36 34. Mazání uzlu (list) Odstranění uzlu a přesměrování odkazu z jeho předchůdce na null. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 36 / 56
37 35. Smazání listu, ukázka public void SmazList(Uzel u, Uzel p) { if (p==null) { //Koren koren=null; else { //Neni koren //L podstrom, smazani if (p.levy==u) p.levy=null; //P podstrom, smazani else p.pravy=null; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 37 / 56
38 36. Smazání uzlu s jedním potomkem Metodě předáváme jako parametry uzel u a jeho předchůdce p. Zavádíme pomocnou proměnnou w, která představuje následníka u. Postup bez použití rekurze. Postup mazání uzlu: 1 Rozhodneme, zda je následník w mazaného uzlu u v jeho levém či pravém podstromu: w=u.levy nebo w=u.pravy. 2 Otestujeme, zda je mazaný prvek u kořenem: Pokud ano: bude w novým kořenem. V opačném případě zjistíme, zda je u levým či pravým následníkem p. Nastavíme uzlu p jako následníka uzel w. 3 Smazání uzlu u. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 38 / 56
39 37. Mazání uzlu (jeden následník) Přesměrování odkazu z předchůdce na následníka mazaného uzlu s následným smazáním uzlu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 39 / 56
40 38. Smazání uzlu s jedním potomkem, ukázka Strom.java public void smaz1vetev(uzel u, Uzel p) { Uzel w; //Je naslednik mazaneho prvku L ci P naslednikem? if (u.levy!=null) w=u.levy; else w=u.pravy; //Je predchudce mazaneho prvek korenem? if(p==null) koren=w; else { if (p.levy!=u) p.levy=w; else p.pravy=w; u=null; //Smazani uzlu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 40 / 56
41 39. Mazání uzlu (2 následníci) Implementačně nejtěžší varianta. Který uzel bude novým rodičovským uzlem po smazání rodiče? Vede k přeuspořádání stromu. Dvě možnosti: Metoda PL: pracuje s největší nižší hodnotou, než je hodnota v mazaném uzlu (list). Metoda LP: pracuje s nejmenší vyšší hodnotou, než je hodnota v mazaném uzlu (list). Postup mazání uzlu tvořen 3 kroky: 1 Nalezení nejpravějšího uzlu n v levém podstromu (je to list). Jde o uzel s největší hodnotou menší než hodnota rušeného uzlu (PL). [Nebo: Nalezení nejlevějšího uzlu n v pravém podstromu. (LP).] 2 Hodnotu n přesuneme do rušeného uzlu. 3 Zrušíme uzel n. Tomáš Řešení Bayer bayertom@natur.cuni.cz s rekurzí či bez (Katedra rekurze. aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 41 / 56
42 40. Mazání uzlu (2 následníci), varianta PL Nalezení nejpravějšího prvku v levém podstromu (list). Prohození pozice s mazaným prvkem. Zrušení listu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 42 / 56
43 41. Mazání uzlu (2 následníci), varianta LP Nalezení nejlevějšího prvku v pravém podstromu (list). Prohození pozice s mazaným prvkem. Zrušení listu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 43 / 56
44 42. Varianta PL Postup mazání uzlu: 1 Nalezení uzlu w v levém podstromu, který je následníkem u. 2 Nalezení nejpravějšího w uzlu a jeho předchůdce p: Inicializace p=u. Dokud existuje pravý podstrom (w.pravy!=null), tak: (1) zapamatuj si uzel w: p=w (2) inkrementuj w: w=w.pravy. 3 Prohození obsahu uzlů u a w. 4 Smazání uzlu w, 2 varianty: w je list: smaž list (w). w není list: smaž uzel s jedním následníkem (w). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 44 / 56
45 43. Varianta PL: nerekurzivní varianta Strom.java public void smaz2vetve(uzel u) { Uzel w=u.levy; //Levy naslednik //Nejpravejsi uzel v L podstromu Uzel p=u; //Inicializace predchudce while (w.pravy!=null) { //Dokud existuje P uzel p=w; //Predchuce nejpravejsiho uzlu w=w.pravy; //Zamena uzlu u <-> w u.data=w.data; //presun dat mezi uzly //Smazani uzlu if (w.levy!=null w.pravy!=null) smaz1vetev(w,p); else smazlist(w,p); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 45 / 56
46 44. Prohledávání stromu Strom lze procházet dvěma způsoby: Prohledávání do hloubky (Depth First Search). Postup stromem dolů tak dlouho, dokud je to možné. Jakmile narazí na list, couvá a do první neprozkoumané větve a postup opakuje. Analogie procházení bludištěm. Implementace zásobníkem. Prohledávání do šířky (Breadth First Search). Postup stromem do stran od kořene. Přechod na následující úroveň až po zpracování předchozí. Implementace frontou. Oproti obecným grafům odpadá nutnost značkovat vrcholy neexistence cyklu. Základní paradigmata používaná při řešení problémů, prohledávání stavového prostoru. Projdeme -li celý strom, nemůžeme minout řešení pozor, vede k exponenciálnímu nárůstu složitosti. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 46 / 56
47 45. Procházení stromu do hloubky DFS, tzv. backtracking. Postup od kořene stromem směrem dolů. V každém uzlu postupujeme vlevo, tj. zpracováváme levý podstrom, dokud nedorazíme do listu. Poté se vrátíme se do nejbližšího uzlu vyšší úrovně a pokračujeme pravým stromem. Pokud u uzlu prohledány oba podstromy, uzel opouštíme a vracíme se do nejbližšího uzlu vyšší úrovně. Každý uzel navštíven celkem 3x: od předchůdce, zpět z levého podstromu zpět z pravého podstromu. Tento průchod binárním stromem odpovídá metodě preorder. Implementace s využitím zásobníku. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 47 / 56
48 46. Ukázka procházení stromu DFS Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 48 / 56
49 47. Implementace DFS: zásobník Metoda bez použití značkování. public void dfs() { Stack s = new Stack(); s.push (root); while (!s.empty()){ Uzel v = s.pop(); //Udelej nejakou operaci s v if (v.pravy!= null) s.push(v.levy); //P podstrom if (v.levy!= null) s.push(v.levy); // L podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 49 / 56
50 48. Procházení stromu do šířky BFS. Postup od kořene stromu k listům po jednotlivých úrovních. Dokud nejsou zpracovány všechny uzly jedné úrovně, nepřesouváme se na úroveň další. Každá úroveň procházena postupně ve směru od nejlevějšího uzlu k nejpravějšímu. Na rozdíl od DFS se stromem nevracíme zpět. Implementace velmi podobná předchozí, místo zásobníku použita fronta. Uzly opět není nutné značkovat, graf neobsahuje cyklus. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 50 / 56
51 49. Ukázka procházení stromu do šířky Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 51 / 56
52 50. Implementace BFS: fronta Metoda bez použití značkování. public void dfs() { Query q = new Query(); q.push (root); while (!q.empty()){ Uzel v = q.pop(); //Udelej nejakou operaci s v if (v.levy!= null) q.push(v.levy); //L podstrom if (v.pravy!= null) q.push(v.levy); //P podstrom Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 52 / 56
53 51. Vyvážené stromy Vyvážené BST stromy BST stromy mají dobré výkonnostní charakteristiky, pozor na Worst case (degenerované stromy). O(N) O(N 2 ): tvorba stromu O(1.4 log(n)) O(N): hledání Způsobeny nevhodnou konfigurací vstupních množin: setříděné množiny, reverzně setříděné množiny, Střídání velkých a malých hodnot. Možnosti řešení: randomizace vstupních dat randomizované BST. průběžná optimalizace tvaru stromu převažování. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 53 / 56
54 Vyvážené BST stromy 52. Degenerovaný strom, setříděná množina Setříděná množina X 1 = {1, 2, 3, 4, 5, 6, reverzně setříděná množina X 2 = {6, 5, 4, 3, 2, Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 54 / 56
55 Vyvážené BST stromy 53. Randomizované BST stromy Zavedení prvku náhodnosti při konstrukci stromu. Výhodou jednoduchost implementace a rychlost. Metody: Randomizace vstupní množiny Vytvoření počáteční permutace. Výběr náhodného uzlu s cílem zamezit vzniku degenerovaného stromu pro nevhodné množiny. Randomizované vkládání Modifikace standardního vkládání do BST stromu. Každý prvek může být se stejnou pravděpodobností p = 1/(n+1) kořenem stromu. Nový uzel může být vložen na libovolnou pozici mezi kořenem a cílovou pozicí pro nerandomizované vkládání. S pravděpodobností p rozhodneme o určitém prvku, zda bude/nebude kořenem. Oba postupy ekvivalentní. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 55 / 56
56 Vyvážené BST stromy 54. Ukázka randomizovaného vkládání: x= Tomáš Bayer (Katedra aplikované Dynamické geoinformatiky datové struktury a kartografie, II. Přírodovědecká fakulta UK.) 56 / 56
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
Dynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
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
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
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ý
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é
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í
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
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)
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ý
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
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.
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
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ří
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
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. 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
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
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í
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:
Stromy. Jan Kybic.
Stromy Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 44 Stromy Binární vyhledávací stromy Množiny a mapy 2 / 44 Strom (Tree) Strom skládá se s uzlů (nodes) spojených hranami (edges).
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í
Lineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
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
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
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
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
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.
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
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
Prohledávání do šířky = algoritmus vlny
Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé
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
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
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
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
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 Grafové úlohy Daniela Szturcová Tento
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
Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C
Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat
PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze
PROHLEDÁVÁNÍ GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 4 Evropský sociální fond Praha & EU: Investujeme do
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
Vyhledávací algoritmy
Vyhledávací algoritmy Sekvenční hledání, binární hledání, indexace klíče, BST, hashing. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš
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
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
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
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()
Algoritmy výpočetní geometrie
Algoritmy výpočetní geometrie 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)
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ž
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
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í
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ý
Kolekce, cyklus foreach
Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro
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?
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ý
STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta
STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach vlož do fronty kořen opakuj, dokud není fronta prázdná 1. vyber uzel z fronty a zpracuj jej 2. vlož do fronty levého následníka
Implementace binárního stromu směrníky
Téma: Vypracoval: Zdeněk Alčer Implementace binárního stromu směrníky 1. Teorie stromu: Pojem strom je datová struktura, která je v teorii grafů formálně definována jako zvláštní případ grafu bez cyklů.
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
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
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
Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest
Obsah prezentace Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest 1 Základní pojmy Vrchol grafu: {množina V} Je to styčná vazba v grafu, nazývá se též uzlem, prvkem
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
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
ABSTRAKTNÍ DATOVÉ TYPY
Jurdič Radim ABSTRAKTNÍ DATOVÉ TYPY Veškeré hodnoty, s nimiž v programech pracujeme, můžeme rozdělit do několika skupin zvaných datové typy. Každý datový typ představuje množinu hodnot, nad kterými můžeme
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
Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.
Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká
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
Datové struktury. alg12 1
Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou
Ú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í
Dynamické programování
ALG 0 Dynamické programování zkratka: DP Zdroje, přehledy, ukázky viz https://cw.fel.cvut.cz/wiki/courses/a4balg/literatura_odkazy 0 Dynamické programování Charakteristika Neřeší jeden konkrétní typ úlohy,
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ě
Č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á
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
TGH05 - aplikace DFS, průchod do šířky
TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující
Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.
1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste
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
Stromové struktury v relační databázi
Stromové struktury v relační databázi Stromové struktury a relační databáze Zboží Procesory Paměti Intel AMD DDR DIMM Pentium IV Celeron Duron Athlon http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich/
Úvod do programování 10. hodina
Úvod do programování 10. 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 Syntax Dvojrozměrné pole
Algoritmizace I. Ak. rok 2015/2016 vbp 1. ze 132
Ak. rok 2015/2016 vbp 1. ze 132 Ing. Vladimír Beneš, Ph.D. vedoucí katedry Petrovický K101 katedra informatiky a kvantitativních metod E-mail: vbenes@bivs.cz Telefon: 251 114 534, 731 425 276 Konzultační
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.
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í
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),
ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ
ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2/2, Lekce Evropský sociální fond Praha & EU: Investujeme
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
vyhledávací stromové struktury
vyhledávací algoritmy Brute Force Binary Search Interpolation Search indexové soubory Dense index, Sparse index transformační funkce Perfect Hash, Close Hash Table, Open Hash Table vyhledávací stromové
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
Základy umělé inteligence
Základy umělé inteligence Automatické řešení úloh Základy umělé inteligence - prohledávání. Vlasta Radová, ZČU, katedra kybernetiky 1 Formalizace úlohy UI chápe řešení úloh jako proces hledání řešení v
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
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
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]
Základy informatiky. 07 Teorie grafů. Kačmařík/Szturcová/Děrgel/Rapant
Základy informatiky 07 Teorie grafů Kačmařík/Szturcová/Děrgel/Rapant Obsah přednášky barvení mapy teorie grafů definice uzly a hrany typy grafů cesty, cykly, souvislost grafů Barvení mapy Kolik barev je
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ů)
State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node
State Space Search Po spuštění appletu se na pracovní ploše zobrazí stavový prostor první předpřipravené úlohy: - Zeleným kroužkem je označen počáteční stav úlohy, který nemůže být změněn. - Červeným kroužkem
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Prohledávání stavového prostoru
Prohledávání stavového prostoru State space search Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 45 Stavový prostor Prohledávání do hloubky Prohledávání do šířky Informované
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
prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT
prohledávání grafů Karel Horák, Petr Ryšavý 16. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Nad frontou (queue) byly provedeny následující operace: push(1) push(2) print(poll()) print(peek()) print(peek())
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A
Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A Každá úloha je hodnocena maximálně 25 body. Všechny své odpovědi zdůvodněte! 1. Postavte na stůl do řady vedle
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
Konstruktory a destruktory
Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,
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)):