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

Podobné dokumenty
Abstraktní datové typy

Datové struktury 2: Rozptylovací tabulky

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

Lineární datové struktury

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

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

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

Lineární datové struktury

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Základní datové struktury

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

Stromy, haldy, prioritní fronty

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

Algoritmy výpočetní geometrie

Šablony, kontejnery a iterátory

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

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

Abstraktní datové typy

Dynamické programování

Šablony, kontejnery a iterátory

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

Datové struktury. alg12 1

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

Dynamické datové struktury I.

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

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

ADT/ADS = abstraktní datové typy / struktury

Konstruktory a destruktory

Dynamické datové struktury IV.

Rekurzivní algoritmy

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

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

Abstraktní datové typy: zásobník

Kolekce, cyklus foreach

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

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

Maturitní téma: Programovací jazyk JAVA

Prioritní fronta, halda

součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

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

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

Další příklady. Katedra softwarového inženýrství. Katedra teoretické informatiky, Fakulta informačních technologii, ČVUT v Praze. Karel Müller, 2011

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

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

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

Abstraktní třídy, polymorfní struktury

TGH07 - Chytré stromové datové struktury

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

Dynamické datové struktury III.

bfs, dfs, fronta, zásobník

I. Dalšívnitřní paměti

Datové struktury Úvod

ABSTRAKTNÍ DATOVÉ TYPY (ADT)

Abstraktní datový typ

Sdílení dat mezi podprogramy

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Abstraktní datové typy

Algoritmy na ohodnoceném grafu

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

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

prof. RNDr. Čestmír Burdík DrCs. prof. Ing. Edita Pelantová CSc. BI-ZMA ZS 2009/2010

ABSTRAKTNÍ DATOVÉ TYPY

PB161 Programování v jazyce C++ Přednáška 3

ALG 04. Zásobník Fronta Operace Enqueue, Dequeue, Front, Empty... Cyklická implementace fronty. Průchod stromem do šířky

TGH07 - Chytré stromové datové struktury

Časová a prostorová složitost algoritmů

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

4. Rekurze. BI-EP1 Efektivní programování Martin Kačer

Struktura a architektura počítačů (BI-SAP) 10

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

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Jazyk C++ II. STL knihovna kontejnery část 2

Programování v Pythonu

PROHLEDÁVÁNÍ GRAFŮ. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

Základy algoritmizace. Hašování

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

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Abstraktní datový typ

Část I. Část 1 Abstraktní datový typ. Přehled témat. Abstraktní datový typ. Zdroje

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

prohled av an ı graf u Karel Hor ak, Petr Ryˇsav y 16. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Dynamické struktury a Abstraktní Datový Typy (ADT)

5. Vyhledávání a řazení 1

Dynamické datové typy a struktury

Spojový seznam. Jan Kybic.

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

a) b) c) Radek Mařík

Pole, množina, tabulka

Základy algebraických specifikací

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

5 Rekurze a zásobník. Rekurzivní volání metody

Bakalářská práce Výukový program pro předmět KIV/PT Programovací techniky

Jednoduché specifikace

PB161 Programování v jazyce C++ Přednáška 3

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Transkript:

Datové struktury 1: Základní datové struktury 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 2010/11, Přednáška 1 Evropský sociální fond. Praha & EU: Investujeme do vaší budoucnosti prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 1 / 16

Srovnání ADT a datové struktury Srovnání ADT a datové struktury Abstraktní datový typ Implementačně nezávislý abstraktní model složitějšího datového typu, množina operací, které jsou přesně specifikovány nezávisle na konkrétní implementaci. Datová struktura Konkrétní implementace ADT v daném programovacím jazyce, zahrnující reprezentaci druhů dat obsažených v ADT a algoritmy, které implementují operace ADT. prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 2 / 16

Dynamické množiny Dynamické množiny Dynamická množina je ADT podporující operace inicializující: init/build, reset/clear. modifikující: insert, delete, případně union/concatenation, difference, intersection. dotazující: size/length, search/iselem, isequal, issubset. Uspořádaná dynamická množina podporuje navíc operace modifikující: extractmin, extractmax. dotazující: getmin, getmax, succ, pred. prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 3 / 16

Taxonomie neuspořádaných ADT Taxonomie neuspořádaných ADT Sekvenční přístup: Operace insert a delete působí v sekvenčně předdefinovaném místě. Změna přístupového místa dvou po sobě jdoucích přístupů je možná pouze operací inkrementace/dekrementace. Nepodporují žádné další operace (search/iselem, getmin, union, atd). Příklady: zásobník (stack, LIFO): insert(push), delete(pop), top, žádný search!!! fronta (queue, FIFO): insert(enqueue), delete(dequeue), front, žádný search!!! seznam (list): insert, delete, tonext, toprev, tobegin, toend, isend, isbegin, žádný search!!! prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 4 / 16

Taxonomie neuspořádaných ADT Taxonomie neuspořádaných ADT Přímý přístup: Podporují triviálně operace insert, delete. Změna přístupového místa je neomezená Příklady: n-rozměrné pole: hodnoty prvků jsou libovolné. search, concatenation, isequal lze realizovat, existují algoritmy. insert/delete má adresu (index) přístupového místa jako parametr. množina: každá hodnota se vyskytuje nejvýše 1x. Podporované operace iselem, union, intersection, difference, isequal, issubset. Adresa přístupového místa je implicitně daná hodnotou prvku. Asociativní přístup: data obsahují/jsou povinně svázána s klíčem, operace se realizují přes klíč. tabulka: insert, delete, search (klíč je parametr), iselem. Stromy: Obecné stromy nejsou ADT, neboť neumožňují přesnou implementačně nezávislou definici operací. Haldy (přednášky 5 a 6). Vyhledávací stromy (přednášky 7 a 8). prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 5 / 16

ADT Zásobník (opakování) Signatura ADT Zásobník Signatura ADT Zásobník textově Stack init() vrací nově vytvořený prázdný zásobník. Stack push(stack s, Elem x) na vrchol zásobníku přidá nový prvek a vrací upravený zásobník. Stack pop(stack s) smaže prvek z vrcholu zásobníku a vrací upravený zásobník. Elem top(stack s) vrací prvek z vrcholu zásobníku, zásobník nemění. Bool isempty(stack s) test na prázdnost. Bool isfull(stack s) test na plnost. prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 6 / 16

ADT Zásobník (opakování) Signatura ADT Zásobník Signatura ADT Zásobník graficky init isempty isfull Stack Elem Bool pop push top prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 7 / 16

ADT Zásobník (opakování) Složitost operací nad zásobníkem Složitost operací nad zásobníkem A pole s vrcholem na začátku, B pole s dnem na začátku, C jednosměrný spojový seznam, operace složitost při implementaci pomocí A B C init O(1) O(1) O(1) push O(n) O(1) O(1) pop O(n) O(1) O(1) top O(1) O(1) O(1) isempty O(1) O(1) O(1) isfull O(1) O(1) O(1) prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 8 / 16

ADT Fronta (opakování) Signatura ADT Fronta Signatura ADT Fronta init isempty isfull Queue Elem Bool dequeue enqueue front prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 9 / 16

ADT Fronta (opakování) Složitosti operací nad frontou Složitosti operací nad frontou A paměťové pole, B kruhové pole, C jednosměrný spojový seznam. operace složitost při implementaci pomocí A B C init O(1) O(1) O(1) enqueue O(1) O(1) O(1) dequeue O(n) O(1) O(1) front O(1) O(1) O(1) isempty O(1) O(1) O(1) isfull O(1) O(1) O(1) prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 10 / 16

ADT Seznam (opakování) Signatura ADT Seznam Signatura ADT Seznam isempty isfull atbegin atend init List length Nat Elem Bool delete toprev tonext tobegin toend insert read prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 11 / 16

ADT Seznam (opakování) Složitosti operací nad seznamem Složitosti operací nad seznamem operace složitost při implementaci pomocí pole jednosm. spoj. sez. obousm. spoj. sez. init O(1) O(1) O(1) insert O(n) O(1) O(1) delete O(n) O(1) O(1) read O(1) O(1) O(1) isempty, isfull O(1) O(1) O(1) atbegin, atend O(1) O(1) O(1) tobegin, toend O(1) O(1) O(1) toprev O(1) O(n) O(1) tonext O(1) O(1) O(1) length O(1) O(1) O(1) prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 12 / 16

ADT d-rozměrné pole (opakování) Signatura ADT d-rozměrné pole Signatura ADT d-rozměrné pole delete init Array search Nat d insert iselem Bool Elem prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 13 / 16

ADT d-rozměrné pole (opakování) Složitosti operací nad polem Složitosti operací nad polem operace init insert delete iselem search složitost O(N) O(1) O(1) O(N) O(N) kde N = Π d i=1 n i pro pole A[1... n 1 ][1... n 2 ]... [1... n d ]. prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 14 / 16

ADT Množina (opakování) Signatura ADT Množina Nat union intersection size isequal issubset Bool init Set iselem delete insert Elem prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 15 / 16

ADT Množina (opakování) Složitosti operací nad množinou Složitosti operací nad množinou operace složitost při implementaci pomocí bit. pole neuspoř.pole/spoj. sezn. uspoř. pole uspoř. spoj. sez. init O( U ) O(1) O(1) O(1) insert O(1) O(n) O(n) O(n) delete O(1) O(n) O(n) O(n) iselem O(1) O(n) O(log n) O(n) size O(1) O(1) O(1) O(1) union O( U ) O(m n) O(m + n) O(m + n) intersection O( U ) O(m n) O(m + n) O(m + n) issubset O( U ) O(m n) O(m + n) O(m + n) isequal O( U ) O(m n) O(m + n) O(m + n) kde: U je velikost univerza U množiny, n a m jsou velikosti množin. prof. Pavel Tvrdík (FIT ČVUT) Základní datové struktury BI-EFA, 2010, Předn. 1 16 / 16