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.

Slides:



Advertisements
Podobné prezentace
10. Dynamické datové struktury
Advertisements

STROMY Datová struktura sestávající z uzlů
Programování 4. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015.
Kuchařka na práci s mnohočleny Matematika pro ZŠ Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je David Salač. Dostupné z Metodického portálu.
Školení MS Word 2007 pro začátečníky RNDr. Milan Zmátlo MěÚ Třebíč, říjen 2011 Vzdělávání v eGON centru Třebíč Tento.
Strategické otázky výzkumníka 1.Jaký typ výzkumu zvolit? 2.Na jakém vzorku bude výzkum probíhat? 3.Jaké výzkumné metody a techniky uplatnit?
  Pevný disk (HDD – Hard Disk Drive)  Používá se k dočasnému nebo trvalému uchovávání dat pomocí magnetické indukce.  Jeho předchůdci byli magnetická.
Programovací jazyky OB21-OP-EL-KON-DOL-M Orbis pictus 21. století.
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
Tercie Rovnice Rovnice – lineární rovnice postup na konkrétním příkladu.
Hromadná korespondence 1 Word Předmět: Informační a komunikační technologie Autor: Milan Franek.
Inf Tabulkový procesor - funkce. Výukový materiál Číslo projektu: CZ.1.07/1.5.00/ Šablona: III/2 Inovace a zkvalitnění výuky prostřednictvím ICT.
Název školyZákladní škola praktická Rožnov pod Radhoštěm Číslo projektuCZ / / Číslo materiáluVY_32_INOVACE_225 AutorMgr. Romana Rybiařová.
ZAL – 5. cvičení Martin Tomášek Pole - opakování Základní datový typ. V poli držíme více elementů (jednoho typu) S elementy v poli můžeme manipulovat.
Název:VY_32_INOVACE_ICT_6A_8B Škola:Základní škola Nové Město nad Metují, Školní 1000, okres Náchod Autor:Mgr. Milena Vacková Ročník:6. Tematický okruh,
Řetězce v jazyce C ● řetězec je posloupnost znaků ● řetězcové konstanty se v C vkládají mezi uvozovky, např. "Ahoj Hugo!" ● v paměti je řetězec uložen.
Název školy ZÁKLADNÍ ŠKOLA, JIČÍN, HUSOVA 170 Číslo projektu CZ.1.07/1.4.00/ Číslo a název klíčové aktivity 3.2 Inovace a zkvalitnění výuky prostřednictvím.
Výukový materiál zpracovaný v rámci projektu Číslo projektuCZ.1.07/1.4.00/ Šablona klíčové aktivityIII/2 SadaMatematika 6 NázevDesetinná čísla_8.
Úvod do databází MS Access (1).
16.1 Dokument v digitální podobě
Microsoft Excel verze 2010 Mgr. Přemysl Kejzlar.
Senzory pro EZS.
Výška stromu - algoritmus
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o, Orlová Lutyně
ORGANIZACE DAT V POČÍTAČI
Obrázky Ram Rom Nástupci ROM Počítačová pamět Obrázky Paměti Ram rom
Kurz algoritmizace a programování v jazyce C
Základy elektrotechniky Výkony ve střídavém obvodu
Programování v jazyce C++
Abstraktní datové typy
Struktury.
Digitální učební materiál zpracovaný v rámci projektu
Binární vyhledávání v poli metodou půlení intervalu
Překladače Lexikální analýza
VY_32_INOVACE_
Výukový materiál zpracován v rámci projektu
Orbis pictus 21. století Mikropočítač
Databáze MS ACCESS 2010.
Algoritmizace a programování
Název: Práce s tabulátory Autor: Hokr Jan
Početní výkony se závorkami
Lexikální atomy jazyka C
Příkazy IF a SELECT CASE
4.1 – 4.3 Lineární nerovnice i jednoduchý podílový tvar
Překladače 6. Sémantická analýza
Paralelní a sériový obvod
ZAL – 8. cvičení 2016.
MATEMATIKA – GEOMETRIE 7
Programování (14PRG) 1. cvičení.
Stavební fakulta ČVUT, B407
Výukový materiál zpracován v rámci projektu
Číslicové měřící přístroje
NÁZEV ŠKOLY: Základní škola Josefa Bublíka, Bánov
Optimální pořadí násobení matic
MU002 Informatika II Základy algoritmizace 1/13
Juliovy množiny 1.
Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Fronta (1) Dynamická datová struktura typu FIFO (First In First Out)
Algoritmizace a datové struktury (14ASD)
Logické funkce a obvody
Dynamické programování Úloha batohu neomezená
Dynamické programování Optimální binární vyhledávací strom
Algoritmizace a datové struktury (14ASD)
MATEMATIKA – ARITMETIKA 7
Seminář o stavebním spoření
Algoritmizace a datové struktury (14ASD)
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Union neboli sjednocení Bitová pole
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Základní ovládání „Windows“
Transkript prezentace:

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 výrazů se používají tři druhy zápisu: infix: (5+9)*2+6 prefix: +*+5926 postfix: 59+2*6+ Prefixová notace se používá od roku 1920. Jejím průkopníkem byl polský matematik Jan Lukasiewicz. Postfixu se říká také „obrácená polská notace“. Výhoda postfixu i prefixu spočívá v tom, že nevyžadují použití závorek. Postfix lze pak vyhodnocovat velmi jednoduše pomocí zásobníkového algoritmu. Např. výše uvedený příklad se vyhodnotí takto: 5 9 5 14 2 14 28 6 28 34 5 9 + 2 * 6 +

ADT zásobník - příklad Postfixový zápis je ale pro většinu uživatelů nestravitelný, proto algoritmus INFIX vyhodnocování výrazů musí převést infix do Postfixu a teprve ten vyhodnotit. Základní algoritmus pro výrazy bez závorek: While not eof(vstup)      read(znak)          If znak je operand then write(znak)          If znak je operator then              while Precedence(znak) <= Top(Stack)                      write(Pop(Stack))              end loop              Push(znak, Stack)  end while  popAndWrite(Stack)  {vyzvedni a vypis ze zasobniku vse...} Příklad: 2+3*5-6 Výstup: 2 3 5 * 6 - + + * + - + Stack: * -

Infix2Postfix Ošetření závorek v infix2postfix: Operandy považuj za operátor s nejvyšší prioritou. Závorky považuje za operátor s nejnižší prioritou Operátory si ukládejte na zásobník takto: Pokud je na vstupu levá závorka, vždy ji vložte na zásobník pokud je vstup = pravá závorka, vyprázdni a vypiš všechny operátory na zásobníku až po levou závorku pokud je na vstupu operátor a jeho priorita < priorita znaku na zásobníku, vyprázdni (a vypiš) zásobník až po levou závorku. Pokud je priorita operátoru > znak na zásobníku, ulož operátor na zásobník. Na začátku si na zásobník vložte startovací levou závorku

ADT Fronta 7 6 5 4 3 2 1 začátek konec (obsluha) Abstrakce fronty je lidskému životu nejbližší – v nějaké frontě stojíme každý den alespoň jednou Fronta se v programech používá všude tam, kde je rychlost příchodu požadavků je nárazově nebo i trvale větší než rychlost jejich zpracování Fronta má většinou konstantní velikost – nejčastější implementace = dynamicky alokované pole. Pokud potřebujeme dynamicky rostoucí frontu, lze ji implementovat lineárním seznamem Fronta může implementovat různé politiky průchodu prvků – nejčastější je FIFO, ale často nacházíme také FIFO s prioritami atd.. U fronty stačí 2 operace: enque(…) – zařadí na konec fronty nový prvek Deque(…) – vyřadí prvek ze začátku fronty Doplńující operace: size(…) – vrací počet prvků ve frontě, empty(..) – true pokud je fronta prázdná… konec začátek 7 6 5 4 3 2 1 (obsluha)

ADT Binární strom Binární strom je dynamická datová struktura, která umožňuje ukládat data zároveň se jejich setříděním tak, že operace vložení i vyhledávání trvá (v ideálním případě) log2(N) kroků, kde N je počet položek uložených ve stromu. Tzn. maximálně efektivně! jedná se o poměrně jednoduchou strukturu, jejíž každý prvek obsahuje data a 2 ukazatele - ukazatel na levého následníka, což je opět strom ve kterém jsou uloženy prvky s menší hodnotou, než má aktuální prvek, a ukazatel na pravého následníka, což je strom, ve kterém jsou uloženy prvky s větší hodnotou než má aktuální prvek Protože je tato definice rekurzivní (podstrom prvku je opět strom), při práci se stromem najdou uplatnění rekurzivní techniky (viz dále).

ADT Binární strom

ADT Binární strom v Pascalu Type tUkUzel=^tUzelStromu; tUzelStromu = record ukLevy, ukPravy: tUkUzel; Data:tData; End; procedure BSTInsert (var RootPtr:tUkUzel; d:tData); begin if RootPtr<>Nil then with RootPtr^ do if d.key<data.key then BSTInsert(ukLevy,d) else if d.key>data.key then BSTInsert(ukPravy,d) else data:=d else begin New(RootPtr); {vytvoření nového uzlu} ukLevy:=Nil; {a jeho naplnění správnými hodnotami} ukPravy:=Nil; data:=d; end;

Prohledávání stromu function BSTSearch (RootPtr:tukUzel; d:tdata) : tUkUzel; begin if RootPtr<>nil then with RootPtr^ do if d.Key<data.Key then BSTSearch:=BSTSearch(ukLevy, d) else if d.Key>data.Key then BSTSearch:=BSTSearch(ukPravy,d) else BSTSearch:=RootPtr; end else BSTSearch:=False; end;

Průchody stromem Procedure preorder(uzel: tUkUzel); begin if uzel <> nil then with uzel^ do begin writedata(data); preorder( ukLevy ); preorder( ukPravy ); end; End;

Průchody stromem Procedure inorder(uzel: tUkUzel); begin if uzel <> nil then with uzel^ do begin inorder( ukLevy ); writedata(data); inorder( ukPravy ); end

Průchody stromem Procedure postorder(uzel: tUkUzel); begin if uzel <> nil then with uzel^ do begin postorder( ukLevy ); postorder( ukPravy ); writedata(data); end

Degradace stromu Pokud budeme do stromu vkládat již seřazené hodnoty – např. 10, 5, 3, 2 , vznikne strom degradovaný na lineární seznam Aby se to nestalo, je potřeba algoritmus vkládání obohatit o algoritmus AVL nebo Red-Black