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

Podobné dokumenty
Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

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

Algoritmy a datové struktury

Dynamické datové struktury IV.

ADT STROM Lukáš Foldýna

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í

Základní datové struktury

Dynamické datové struktury I.

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

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

Stromy, haldy, prioritní fronty

Dynamické datové struktury III.

TÉMATICKÝ OKRUH TZD, DIS a TIS

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

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

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

ABSTRAKTNÍ DATOVÉ TYPY

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

Datové struktury Úvod

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

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

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

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

Datové typy a struktury

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

Reprezentace dat v informačních systémech. Jaroslav Šmarda

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

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

Prioritní fronta, halda

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

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

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

Grafové algoritmy. Programovací techniky

Grafové algoritmy. Programovací techniky

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:

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

TGH07 - Chytré stromové datové struktury

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Dynamické datové typy a struktury

Datové struktury 2: Rozptylovací tabulky

Lineární datové struktury

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

Rozhraní pro práci s XML dokumenty. Roman Malo

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

Binární vyhledávací stromy II

Rekurzivní algoritmy

Prohledávání do šířky = algoritmus vlny

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

Algoritmizace prostorových úloh

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

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Úvod do teorie grafů

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Binární vyhledávací stromy pokročilé partie

Binární Vyhledávací Stromy, u kterých je. složitost operací v nejhorším. rovná O(log n)

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

TGH07 - Chytré stromové datové struktury

07 Základní pojmy teorie grafů

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Algoritmizace prostorových úloh

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

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

Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace

Návrh Designu: Radek Mařík

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

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Dynamické programování

Kolekce, cyklus foreach

TÉMATICKÝ OKRUH Počítače, sítě a operační systémy

Algoritmizace prostorových úloh

a) b) c) Radek Mařík

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

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

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

Přijímací zkouška - informatika

bfs, dfs, fronta, zásobník

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

Dynamické datové struktury II.

Binární soubory (datové, typované)

Semestrální práce 2 znakový strom

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

Spojové struktury. Spojová struktura (linked structure):

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.

Základy umělé inteligence

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

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

Obsah prezentace. Základní pojmy v teorii o grafech Úlohy a prohledávání grafů Hledání nejkratších cest

Časová a prostorová složitost algoritmů

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Výroková a predikátová logika - III

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

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

Maturitní témata Školní rok: 2015/2016

Výčtový typ strana 67

ADT/ADS = abstraktní datové typy / struktury

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Transkript:

Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod Pokud chceme uložit větší množství dat, použijeme pole. V tomto případě je ale nevýhoda to, že musíme dopředu znát rozsah pole a vymezit pro něj rozsah v paměti. Pokud špatně odhadneme rozsah a pole je větší, než jsme předpokládali, program v běhu zkolabuje. Naopak pro menší pole, než byl původní odhad, zbytečně rezervujeme paměť. Tedy například program pro zpracování dat pro skupinu lidí, jejíž velikost se mění, může být problematický. A pokud budeme potřebovat u těchto lidí zaznamenat jejich potomky, tak problém je ještě komplikovanější. Řešením jsou lineární seznamy a stromy. Lineární seznam Lineární seznam je v podstatě řetěz struktur, které jsou spolu propojeny vždy na další strukturu. Propojení může být buď jednosměrné (jednosměrný lineární seznam) či obousměrné. V případě obousměrného lineárního seznamu existuje ve struktuře vazba jak na následující strukturu, tak i na předcházející strukturu. Dále může existovat i kruhový seznam, kdy poslední prvek je napojen na první. Jednosměrný lineární seznam

Důležitou operací je vložení dalšího prvku. Je potřeba utvořit novou vazbu k novému prvku, aniž by jsme ztratily ztratili adresu na kterou jsme ukazovaly, protože tam budeme ukazovat z nového vloženého prvku. Vložení dalšího prvku do seznamu Při práci s jednosměrným lineárním seznamem je nutno zvládnout následující operace: vytvoření prvku spojového seznamu přidání prvku do seznamu na jeho konec vložení prvku dovnitř seznamu vyjmutí prvku ze seznamu nalezení určitého prvku v seznamu nalezení následujícího prvku v seznamu zjištění délky seznamu Další speciální varianty lineárního seznamu jako například: Zásobník - jedná se o jednosměrný lineární seznam u kterého jsou uzpůsobeny některé operace práci s tímto seznamem, tak aby se tato datová struktura chovala jako paměť typu LIFO(vkládání nakonec,výběr z konce). Fronta - jedná se o jednosměrný lineární seznam u kterého jsou uzpůsobeny některé operace práci s tímto seznamem, tak aby se tato datová struktura chovala jako paměť typu FIFO(vkládání nakonec,výběr ze začátku). V objektových jazycích máme metody, které nám velmi ulehčují programování. Obyčejný seznam v Java Je reprezentován třídou JList a jako model používá rozhraní ListModel. Rozhraní modelu má pouze 4 metody, pro přidání/odebrání odběratele událostí, pro zjištění délky seznamu a pro získání určitého prvku seznamu. Text prvku se získává pomocí metody tostring() příslušného prvku, v seznamu mohou bez problémů být i prvky různých typů.

Co se týká samotného vykreslování, seznam nemá vlastní posuvníky (je to podobné jako např. u JTextArea). Proto ho téměř vždy umísťujeme do komponenty JScrollPane, která posuvníky poskytne. Třída seznamu disponuje obrovským množstvím metod (což dokazuje, jak velké pole působnosti zde máme) - z prostorových důvodů se ovšem podíváme jen na několik málo z nich. Zde je krátký příklad, jak se seznamem pracovat: DefaultListModel m = new DefaultListModel(); m.addelement("prvek 1"); m.addelement("prvek 2"); m.addelement("prvek 3"); JList list = new JList(m); list.setselectionmode(listselectionmodel.single_selection); JScrollPane sp = new JScrollPane(list, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);... Object o = list.getselectedvalue();[2] Stromy Strom je nelineární datová struktura, na rozdíl od všech předchozích datových struktur (zásobník, fronta, seznam), které jsou lineární. To znamená, že ve frontě, zásobníku, či seznamu existuje maximálně jeden předchozí a jeden následující prvek. Naproti tomu ve stromě může sice také být nejvýše jeden prvek předcházející, ale prvků následujících může být obecně více. Tato vlastnost stromu jej předurčuje pro reprezentaci částečného uspořádání, zatímco lineární struktury slouží pro reprezentaci uspořádání úplného. V nejjednodušším případě mohou být ve stromě nejvýše dva následníci - takovým stromům říkáme binární stromy. ky v binárním stromě budeme rozlišovat jako levý a pravý následník. Reprezentace binárního stromu se tedy skládá z reprezentace jednotlivých informačních uzlů stromu, které obsahují tři položky - vlastní informaci a odkaz na levého a pravého následníka. Uzlu, který nemá žádného předchůdce, říkáme kořen stromu. Uzlům, které nemají žádné následníky říkáme listy stromu.[3]

1 2 3 4 5 6 7 8 9 Orientovaný strom Vlastnosti stromů: N-arita - Kolik smí mít každý uzel maximálně potomků, z tohoto hlediska patří mezi neoblíbenější binární stromy (každý uzel má 0, 1 nebo 2 potomky). Hloubka - Hloubkou rozumíme maximální hloubku libovolného uzlu (kořen je v hloubce 0, potomci v hloubce 1, vnuci v hloubce 2...). Pravidelnost - N-ární strom je pravidelný, pokud má každý uzel 0 nebo N potomků. Vyváženost - N-ární strom je vyvážený, pokud pro všechny listy platí, že jsou nejsou o nic více hlouběji, než kterýkoliv jiný list. Definice o nic více hlouběji se liší v závislosti na konkrétní implementaci. Úplná pravidelnost - Úplným N-árním pravidelným stromem hloubky k je strom, jehož každý uzel má 0 nebo N potomků a všechny uzly jsou ve hloubce k.[1] K procházení stromů je velmi vhodný algoritmus rekurze. Procházení stromů: Do šířky procházíme graf jakoby po patrech(všechny první následníky, všechny druhé následníky atd ) Do hloubky jdeme po jedné větvi až do posledního uzlu Heuristicky k procházení stromu užíváme váhy, kde každý uzel má svou hodnotu(např. nižší hodnota = výhodnější). Operace na stromech: Počet všech prvků Hledání prvků Přidání nového prvku na určitou pozici ve stromu Smazání prvku Vyjmutí celé části stromu prožezávání (anglicky pruning ) Přidání celé části do stromu roubování (anglicky grafting ) Hledání kořene pro každý uzel Výška (hloubka) stromu

Shrnutí: Lineární seznam je dynamická datová struktura která se na první pohled podobá poli, avšak data v této struktuře se uchovají poněkud jiným způsobem. Stromy, a zejména jejich některé konkrétní vyhledávací varianty, nacházejí široké uplatnění v oblastech, kde je třeba řešit ukládání a vyhledávání dat, zejména tam, kde je kritickou omezující podmínkou vyhledání dat s co nejmenší úrovní složitostí a při co nejméně přístupy čtení.. Literatura: [1] www.algoritmy.net; http://www.algoritmy.net/article/104/strom; 6.11.2010 [2] www.linuxsoft.cz; http://www.linuxsoft.cz/article.php?id_article=1305; 6.11.2010 [3] wikipedia.org; http://cs.wikipedia.org/wiki/strom_%28datov%c3%a1_struktura%29; 6.11.2010