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