Anotace. Spojové seznamy, haldy. AVL-stromy, A-B stromy. Martin Pergel,

Podobné dokumenty
Anotace. Pointery. Martin Pergel,

Datové struktury 1: Základní datové struktury

Dynamické datové struktury IV.

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

Lineární datové struktury

Lineární datové struktury

Anotace. Dynamické programování, diskrétní simulace.

Abstraktní datové typy FRONTA

TÉMATICKÝ OKRUH TZD, DIS a TIS

Maturitní téma: Programovací jazyk JAVA

Anotace. Objekt self, Zapouzdření, polymorfismus,

Dynamické datové typy a struktury

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Stromy, haldy, prioritní fronty

Dynamické datové struktury III.

Základní datové struktury III: Stromy, haldy

Dynamické datové struktury I.

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

TGH07 - Chytré stromové datové struktury

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) b)

Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.

TGH07 - Chytré stromové datové struktury

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

Binární vyhledávací stromy

Časová a prostorová složitost algoritmů

Základní datové struktury

Anotace. Pointery, dynamické proměnné

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Programování v C++ 1, 16. cvičení

Konstruktory a destruktory

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.

Anotace. Dámy na šachovnici dominance a nezávislost. Aritmetické výrazy, notace a převody mezi nimi, nejdelší rostoucí podposloupnost.

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2013/2014 Radim Farana. Obsah. Strom

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Algoritmizace prostorových úloh

Datové typy a struktury

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Programování v C++ 2, 7. cvičení

NPRG030 Programování I, 2018/19 1 / :03:07

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Sada 1 - Základy programování

Algoritmizace prostorových úloh

Spojová implementace lineárních datových struktur

Anotace. zpět k rekurzi: teorie her. Martin Pergel,

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Lineární spojový seznam (úvod do dynamických datových struktur)

Abstraktní datové typy

Programování v C++ 2, 4. cvičení

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

IB111 Úvod do programování skrze Python Přednáška 7

NMIN102 Programování /2 Z, Zk

Algoritmy II. Otázky k průběžnému testu znalostí

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í

ABSTRAKTNÍ DATOVÉ TYPY

Implementace binárního stromu směrníky

Stromy. Jan Hnilica Počítačové modelování 14

Prioritní fronta, halda

Programování v C++ 1, 17. cvičení

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Da D to t v o é v ty t py IB111: Datové typy

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Šablony, kontejnery a iterátory

Předmět: Algoritmizace praktické aplikace

Anotace. Dijkstrův algoritmus,

Datové struktury. alg12 1

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

Algoritmy na ohodnoceném grafu

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Implementace slovníku bitovým vektorem

Radek Mařík

2. Mřížky / Záplavové vyplňování

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Dynamické datové struktury II.

Texty k Programování na VŠFS. Petr Kučera () Texty k Programování na VŠFS 29. května / 117

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Digitální učební materiál

OZD. Organizace a zpracování dat. učební text

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

Anotace. pointery (pars prima). Martin Pergel,

Dynamicky vázané metody. Pozdní vazba, virtuální metody

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

Spojový seznam. Jan Kybic.

Implementace LL(1) překladů

Vyhledávací stromy. stromy (např.): složitost (kdybychom hledali podle degenerovaného stromu z pravého

Šablony, kontejnery a iterátory

Část 1 Spojové struktury (stromy) Dynamické struktury a Abstraktní Datový Typy (ADT) Část 2 Abstraktní datový typ. Část 3 Příklad ADT Prioritní fronta

ADT/ADS = abstraktní datové typy / struktury

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

6. Fyzická (interní) úroveň databázového systému

prioritu a vždy je třeba začít pracovat na úkolu, který ma v daný okamžik

Transkript:

Anotace Spojové seznamy, fronta a zásobník. Vyvážené binární stromy, AVL-stromy, červeno-černé stromy, A-B stromy. Hashování, haldy.

Typologie spojových seznamů jednosměrný a obousměrný prvek ukazuje jen na následníka, nebo na předka i následníka, s hlavou, bez hlavy, s ocasem, bez ocasu hlava je první (prázdný) prvek, ocas je poslední (prázdný prvek). Vždy máme aspoň nějaký prvek seznamu. cyklický poslední prvek si jako na následníka ukazuje na začátek seznamu.

Fronta a zásobník Fronta je datová struktura organizující prvky způsobem FIFO. Je osazena funkcemi enqueue a dequeue. Zásobník organizuje prvky způsobem LIFO. Je vybaven funkcemi push a pop. Jak je implementovat pomocí spojových seznamů?

Zásobník Implementace type pzas=^zas; zas=record hod:integer; next:pzas; var hlava:pzas; procedure init; begin hlava:=nil;

Zásobník Implementace type pzas=^zas; zas=record hod:integer; next:pzas; var hlava:pzas; procedure push(co:integer); var pom:pzas; begin new(pom); pom^.hod:=co; pom^.next:=hlava; hlava:=pom;

Zásobník Implementace function pop:integer; var pom:pzas; begin pom:=hlava; if hlava<>nil then begin pop:=hlava^.hod; hlava:=pom^.next; dispose(pom); end else begin writeln("chyba!"); pop:=-1;

Fronta Implementace type pfr=^fronta; fronta=record hod:integer; next:pfr; var hlava,ocas:pfr; procedure init; begin hlava:=nil; ocas:=nil;

procedure enqueue(co:integer); var pom:pfr; begin if hlava=nil then begin new(hlava); ocas:=hlava; hlava^.next:=nil; hlava^.hod:=co; end else begin new(pom); pom^.next:=nil; pom^.hod:=co; hlava^.next:=pom; hlava:=pom;

function dequeue:integer; var pom:pfr; begin if hlava=nil then begin dequeue:=-1; end else begin if hlava=ocas then begin dequeue:=ocas^.hod; dispose(ocas); hlava:=nil; ocas:=nil; end else begin dequeue:=ocas^.hod; pom:=ocas; ocas:=ocas^.next; dispose(pom);

Prohození prvků ve spojovém seznamu Prohod prvek s jeho následníkem v seznamu procedure prohod(var hlava:seznam;co:seznam); var pom:seznam; begin pom:=hlava; if hlava=co then begin hlava:=hlava^.next; pom^.next:=hlava^.next; hlava^.next:=pom; end else begin while(pom^.next<>co) do pom:=pom^.next; pom^.next:=co^.next; co^.next:=pom^.next^.next; pom^.next^.next:=co;

Dynamické datové struktury V příkladu je kvůli místu zanedbáno ošetření singulárních případů (prázdný seznam, prvek chybějící v seznamu, jednoprvkový seznam, prohazování posledního prvku a podobně). Vše je ale jen testování pointerů na nil. Cvičení na prohazování prvků ve spojovém seznamu: Bubblesort Organizace setříděného spojového seznamu (funkce insert, delete a member, které vkládají do setříděného spojového seznamu, mažou z něj a zjišt ují, zda je hodnota ve spojovém seznamu.

Uspořádaný spojový seznam Spojový seznam, ve kterém jsou prvky uspořádány v (BÚNO) neklesajícím pořadí. Nad spojovými seznamy typicky implementujeme funkce: member zjistí, zda je prvek s příslušným kĺıčem přítomen, insert přidá prvek s příslušným kĺıčem, delete smaže prvek s příslušným kĺıčem.

Další datové struktury Samoopravující seznamy: Move-front rule, transposition rule: Pokud přistupujeme k prvku v seznamu, dotyčný prvek vytáhneme na začátek, resp. prohodíme s předchůdcem (myšlenka: pokud přistupujeme k prvku, zpravidla to děláme vícekrát za sebou). Má-li prvek více pointerů, vznikají stromové datové struktury. Binární vyhledávací strom (pokud možno co nejlépe vyvážený), Vyváženost se těžko vynucuje, proto AVL-stromy či červeno-černé stromy, kde se vyváženost vynucuje pomocí rotací.