STROMY Datová struktura sestávající z uzlů

Slides:



Advertisements
Podobné prezentace
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Advertisements

Programovací jazyk C++
Třída SIMSET je druhou standardní systémovou třídou, která obsahuje prostředky pro práci se spojovými seznamy. KRUHOVÉ SPOJOVÉ SEZNAMY Spojový seznam –
Programování v Pascalu
Algoritmizace od algoritmu k Pascalu.
Vnitřní řazení v poli (in sito)
1 Vnitřní řazení s využitím dynamických struktur Tvorba spojového seznamu je vcelku triviální záležitostí: a)Vytvořím prázdný seznam příkazem LIST:=nil.
10. Dynamické datové struktury
Spojové struktury Spojová struktura ( linked structure ):
Red-Black Stromy Binární Vyhledávací Stromy, u kterých je časová složitost operací v nejhorším případě rovná O(log n)
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Programování v Pascalu Přednáška 3
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Třídění Seminář IVT. Definice uspořádání skupiny dat (záznamů) dle daného klíče vzestupně (od nejmenší do největší hodnoty klíče) sestupně (od největší.
Algoritmizace a programování Podprogramy v Delphi - 10
Principy překladačů Mezikód Jakub Yaghob.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
ADT Strom.
Skip-List je datová struktura, která může být použita jako náhrada za vyvážené stromy. představují pravděpodobnostní alternativu k vyváženým stromům (struktura.
1 Vyhledávání Principy vyhledávání Klasifikace klíče:  Interní klíč – je součástí prohlížených záznamů  Externí klíč – není jeho součástí, je jím např.
1IT S ÍŤOVÝ DATOVÝ MODEL Ing. Jiří Šilhán. S ÍŤOVÝ DATOVÝ MODEL Je historicky nejstarším datovým modelem. Jeho základem jsou vzájemně propojené množiny.
Informatika I 3. přednáška
Procedury a funkce Základní charakteristika a použití v programu.
B-strom je dynamická indexová struktura.
TI 6.1 STROMY A KOSTRY Stromy a kostry. TI 6.2 Stromy a kostry Seznámíme se s následujícími pojmy: kostra grafu, cyklomatické číslo grafu, hodnost grafu.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_18 Digitální učební materiál Sada: Úvod do programování.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Podmienený príkaz. Kĺúčové slová  Pro podmínky se v Pascalu používají klíčové příkazy IF, THEN a ELSE.  Také se jim říká „príkaz vetvenia"..  Příkaz.
Algoritmy a programovací techniky
Organizace a zpracování dat I
Stromy.
Algoritmizace a programování Třídící algoritmy - 12
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – OPAKOVANÝM VÝBĚREM NEJVĚTŠÍHO PRVKU (SELECTSORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ ŘAZENÍ PRVKŮ – PŘÍMOU VÝMĚNOU (BUBBLESORT) Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko, Adámkova.
Další abstraktní datové typy
5. Procedury a funkce Procedura je samostatně odladěný algoritmus, v programu může být volána vícekrát. Dvojí terminologie - rozlišujeme procedury a funkce.
Spojové struktury BI-PA1 Programování a algoritmizace 1, ZS
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_16 Digitální učební materiál Sada: Úvod do programování.
BINÁRNÍ STROM Vytvořte program, který bude vytvářet "binární strom". Každý prvek bude definován z klávesnice svým obsahem a dvěma dalšími proměnnými, které.
GYMNÁZIUM, VLAŠIM, TYLOVA
Gymnázium Vincence Makovského se sportovními třídami Nové Město na Moravě VY_32_INOVACE_INF_RO_19 Digitální učební materiál Sada: Úvod do programování.
6. Typ záznam Strukturovaný datový typ - znamená spojení několika elementů stejného nebo různých typů do jedné proměnné. Např. pole je strukturovaný datový.
doc. RNDr. Zdeněk Botek, CSc.
Pascal – if Mgr. Lenka Švancarová.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ
doc. RNDr. Zdeněk Botek, CSc.
Cvičení 2 Podmíněné příkazy, cykly. Podmíněné příkazy Podmínka – jakýkoliv logický výraz ( a=1,……..) ( a=1,……..) Příkaz – vlastní instrukce, která se.
Pascal - větvení.
Cvičení 3-4 Procedury, funkce,řetězce. Procedury Procedura Procedura Procedura je podprogram, který mění stav programu (změnou stavu proměnných nebo změnou.
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.
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Databáze ● úložiště dat s definovaným přístupem ● typy struktury – strom, sekvence, tabulka ● sestává z uspořádaných záznamů ● databáze – struktura – záznam.
Výška stromu - algoritmus
Výukový materiál zpracován v rámci projektu
STROMY A KOSTRY Stromy a kostry - odst. 3.2.
Překladače 5. Syntaktická analýza
ADT zásobník - příklad Prakticky aplikovatelný příklad využití ADT zásobník je vyhodnocování aritmetických výrazů v Postfixové notaci: Pro zápis aritmetických.
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
program TextovySoubor;
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Algoritmizace a datové struktury (14ASD)
AVL a B-stromy cvičení Radek Mařík.
Vyhodnocování aritmetického výrazu (1)
Transkript prezentace:

STROMY Datová struktura sestávající z uzlů Uzel – má jednoho předchůdce a N následníků Kořen – uzel, který nemá předchůdce List – uzel, který nemá následníky Pro N=2 hovoříme o binárních stromech

BINÁRNÍ STROMY Každý uzel má nejvýše dva potomky Jednoduchý , acyklický souvislý graf Hierarchická nelineární struktura Úplný BS – každý uzel má právě dva potomky, nebo je listem Úroveň k BS; každá úroveň má až 2k uzlů Vyvážený BS Binární vyhledávací strom

BINÁRNÍ STROM 0. úroveň 1. úroveň 2. úroveň 3. úroveň 4. úroveň KOREN nil nil nil 2. úroveň nil nil nil nil 3. úroveň nil nil nil 4. úroveň

USPOŘÁDANÝ STROM Často jsou stromy aplikovány v řadicích a vyhledávacích algoritmech Uspořádání uzlů je podle datových položek – klíče Uspořádání: Klíč (hodnota) každého uzlu je větší než hodnoty (klíče) všech uzlů jeho levého podstromu a menší než klíče všech uzlů jeho pravého podstromu – binární vyhledávací strom (BVS)

BINÁRNÍ STROM (s hodnotami) KOREN 10 0. úroveň 8 19 1. úroveň 2 nil 9 nil 16 20 nil 2. úroveň 4 nil 13 nil 18 nil 25 nil 3. úroveň 5 nil 12 nil 23 nil 4. úroveň

POUŽITÍ STROMŮ Hledání duplicitních výskytů Řazení pomocí binárního stromu Prohlížení stromu a tisk hodnot (klíčů) type SPOJ = ^UZEL UZEL = record HODN: byte {string[14],...} LU, PU: SPOJ end; var KOREN: SPOJ;

TVORBA BINÁRNÍHO STROMU procedure VLOZ(var KAM: SPOJ; CO: byte); begin if KAM = nil then begin new (KAM); KAM^.HODN := CO; KAM^.LU := nil; KAM^.PU := nil; end else if CO < KAM^.HODN then VLOZ(KAM^.LU, CO) {vlevo} else VLOZ(KAM^.PU, CO) {vpravo}

Vlastní strom vytvoříme např. algoritmem Procedure VYTVOR(var BS:SPOJ); var KAM:SPOJ; CO:byte; {nebo integer, string apod.} begin BS:=nil; Write(‘Napis koren: ’); Readln(CO); if CO<>0 then VLOZ(BS,CO); {konec pri CO=0} while CO<>0 do begin Write(‘Dalsi uzel: ‘); Readln(CO); if CO<>0 then begin KAM:=BS; VLOZ(KAM,CO) end

PRŮCHOD STROMEM V podstatě existují tři možnosti průchodů stromem: PREORDER navštiv kořen projdi levý podstrom PREORDER projdi pravý podstrom PREORDER

procedure PREORDER(H: SPOJ); begin if H <> nil then begin writeln(H^.HODN); PREORDER(H^.LU); PREORDER(H^.PU) end Uskuteční se postupně tisk uzlů: 10 8 2 4 5 9 19 16 13 12 18 20 25 23

INORDER projdi levý podstrom INORDER navštiv kořen projdi pravý podstrom INORDER

procedure INORDER(H: SPOJ); begin if H <> nil then begin INORDER(H^.LU); writeln(H^.HODN); INORDER(H^.PU) end Uskuteční se postupně tisk uzlů: 2 4 5 8 9 10 12 13 16 18 19 20 23 25 Tímto způsobem dostáváme vzestupně seřazené hodnoty. Vzájemnou výměnou obou příkazů procedury INORDER bychom tiskli hodnoty seřazené sestupně.

POSTORDER projdi levý podstrom POSTORDER projdi pravý podstrom POSTORDER navštiv kořen

procedure POSTORDER(H: SPOJ); begin if H <> nil then begin POSTORDER(H^.LU); POSTORDER(H^.PU); writeln(H^.HODN) end Uskuteční se postupně tisk uzlů: 5 4 2 9 8 12 13 18 16 23 25 20 19 10 Tento přístup využijeme při rušení stromů, postupně uvolňujeme (dispose) listy počínaje vždy nejlevějším listem.

Vypíšeme-li hodnoty z binárního stromu metodou (procedura) INORDER, získáme neklesající posloupnost hodnot: procedure TISK(PS: SPOJ); begin if PS <> nil then begin TISK(PS^.LU); writeln(PS^.HODN); TISK(PS^.PU) end

Procedura TISK je totožná s procedurou INORDER; spojíme-li však tisk hodnot s uvolněním příslušných uzlů, je pak zřejmé, že uvolňování uzlů provedeme metodou (procedurou) POSTORDER: procedure TISK(PS: SPOJ); begin if PS <> nil then begin TISK(PS^.LU); writeln(PS^.HODN); TISK(PS^.PU); dispose(PS) end

Reprezentace aritmetického výrazu binárním stromem Aritmetický výraz tvořený operandy a binárními operátory Kořen stromu obsahuje operátor, jeho levý či pravý podstrom tvoří buď výraz, který má opět levý a pravý podstrom operandy; operand je listem (nemá podstromy)

Reprezentace výrazu A+B*C Reprezentace výrazu (A+B)*C KOREN KOREN + * A nil * + C nil B nil C nil A nil B nil Reprezentace výrazu A+B*C Reprezentace výrazu (A+B)*C

Reprezentace výrazu (A+B*C)/((A+B)*C) KOREN / + * A nil * + C nil B nil C nil A nil B nil Reprezentace výrazu (A+B*C)/((A+B)*C)

Při průchodu jednotlivých stromů I)-III) metodou PREORDER navštěvujeme uzly v pořadí ad I) +A*BC ad II) *+ABC ad III) /+A*BC*+ABC Dostáváme tzv. prefixovou formu zápisu výrazu.

Při průchodu jednotlivých stromů I)-III) metodou POSTORDER navštěvujeme uzly v pořadí ad I) ABC*+ ad II) AB+C* ad III) ABC*+AB+C*/ Dostáváme tzv. postfixovou formu zápisu výrazu. Obě uvedené formy, zejména pak tato postfixová, (na rozdíl od infixové formy) se uplatňují např. při tvorbě analyzátorů jako součásti překladačů.

Při průchodu jednotlivých stromů I)-III) metodou INORDER navštěvujeme uzly v pořadí ad I) A+B*C ad II) A+B*C ad III) A+B*C/A+B*C Dostáváme vcelku nepoužitelnou (nejedno-značnou) infixovou formu zápisu výrazu. Infixová forma zápisu výrazu vyžaduje použití závorek k vyznačení priority prováděných operací