Datové struktury I NTIN066
|
|
- Marcela Fišerová
- před 6 lety
- Počet zobrazení:
Transkript
1 Datové struktury I NTIN066 Jirka Fink fink/ Katedra teoretické informatiky a matematické logiky Matematicko-fyzikální fakulta Univerzita Karlova v Praze Zimní semestr 2018/19 Poslední změna 30. listopadu 2018 Licence: Creative Commons BY-NC-SA 4.0 Jirka Fink Datové struktury I 1
2 Základní informace Kontant Homepage fink/ Konzultace Individuální domluva Cíle předmětu Naučit se navrhovat a analyzovat netriviální datové struktury Porozumět jejich chování jak asymptoticky, tak na reálném počítači Zajímá nás nejen chování v nejhorším případě, ale i průměrně/amortizovaně Nebudujeme obecnou teorii všech DS ani neprobíráme všechny varianty DS, ale ukazujeme na příkladech různé postupy a principy Jirka Fink Datové struktury I 2
3 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 3
4 Zápočet: Domácí úkoly Podmínky Bude zadáno pět domácích úkolů po 110 bodech K získání zápočtu je nutné získat alespoň 320 bodů Úkol = implementace DS + měření + grafy + zdůvodnění výsledků Úkol musí být odevzdán včas a DS musí být funkční Důrazně doporučujeme používat C/C++, i když povolujeme i Javu a C# Nepoužívejte cizí kód ani knihovny třetích stran K implementaci DS nepoužívejte ani standardní knihovny (ani std::list, std::vector, etc.) Úkoly jsou zadávány centrálně, ale opravuje je vyučující, u kterého jste registrováni na SISu Při odevzdání v předtermínu můžete navíc získat 10 bodů nebo poslat opravené řešení Přesná pravidla a vzorový příklad jsou na webu přednášky Jirka Fink Datové struktury I 4
5 Nové předměty Motivace Na cvičeních se především rozebírají domácí úkoly Nezbývá mnoho času na procvičení Řada studentů neumí implementovat datové struktury v rozumném čase bez zdlouhavého hledání chyb Analýza datových struktur (NTIN105) Návrh a analýza datových struktur, které zazněly na přednášce, ale na jejich zkoumání není na klasickém cvičení čas Vyučující: Martin Mareš Rozvrh bude umluvem po u (mares+ds@kam.mff.cuni.cz) Jirka Fink Datové struktury I 5
6 Nové předměty Implementace datových struktur (NTIN106) Obsah Naučit studenty efektivně implementovat datové struktury v rozumném čase bez únavného hledání chyb Vyučující: Jirka Fink Rozvrh: středa, 17:20, S4 Návrh implementace datových struktur Application programming interface Unit a integrity testy Implementace bez rekurze (a zásobníku) Spojový seznam, stromy,... Správa paměti Paralelní programování bez zámků Implementace nástrojů vyšších programovacích jazyků v C/RAM Diskuze různých implementací domácích úkolů, testování a zkušeností Zápočet: recenze řešení domácích úkolů ostatních studentů (code review) Jirka Fink Datové struktury I 6
7 Literatura A. Koubková, V. Koubek: Datové struktury I. MATFYZPRESS, Praha T. H. Cormen, C.E. Leiserson, R. L. Rivest, C. Stein: Introduction to Algorithms. MIT Press, 2009 K. Mehlhorn: Data Structures and Algorithms I: Sorting and Searching. Springer-Verlag, Berlin, 1984 D. P. Mehta, S. Sahni eds.: Handbook of Data Structures and Applications. Chapman & Hall/CRC, Computer and Information Series, 2005 E. Demaine: Cache-Oblivious Algorithms and Data Structures R. Pagh: Cuckoo Hashing for Undergraduates. Lecture note, M. Thorup: High Speed Hashing for Integers and Strings. Lecture notes, M. Thorup: String hashing for linear probing (Sections ). In Proc. 20th SODA, , Jirka Fink Datové struktury I 7
8 Obsah 1 Amortizovaná analýza Inkrementace binárního čítače Dynamické pole 2 Vyhledávací stromy 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 8
9 Amortizovaná analýza Motivace Uvažujme datovou struktury, která zvládá nějakou operaci většinou velmi rychle. Ale občas potřebuje reorganizovat svoji vnitřní struktury, což operaci v těchto výjimečných případech značně zpomaluje. Tudíž je časová složitost v nejhorším případě velmi špatná. Představme si, že naše datová struktura je použita v nějakém algoritmu, který operaci zavolá mnohokrát. V této situaci složitost algoritmu ovlivňuje celkový čas mnoha operací, nikoliv složitost operace v nejhorším případě. Cíl: Chceme zjistit průměrnou hodnotu časových složitostí posloupnosti operací, případně celkovou složitost posloupnosti operací. Metody výpočtu amortizované složitosti Agregovaná analýza Účetní metoda Potenciální metoda Jirka Fink Datové struktury I 9
10 Obsah 1 Amortizovaná analýza Inkrementace binárního čítače Dynamické pole 2 Vyhledávací stromy 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 10
11 Inkrementace binárního čítače: Agregovaná analýza Binární čítač Máme n-bitový čítač inicializovaný libovolnou hodnotou Při operaci INCREMENT se poslední nulový bit změní na 1 a všechny následující jedničkové bity se změní na 0 Počet změněných bitů v nejhorším případě je n Kolik bitů se změní při k operacích INCREMENT? Agregovaná analýza Poslední bit se změní při každé operaci tedy k-krát Předposlední bit se změní při každé druhé operaci nejvýše k/2 -krát i-tý bit od konce se změní každých 2 i operací nejvýše k/2 i -krát Celkový počet změn bitů je nejvýše n 1 i=0 k/2 i n 1 i=0 (1 + k/2i ) n + k n 1 i=0 1/2i n + 2k Časová složitost k operací INCREMENT nad n-bitovým čítačem je O(n + k) Jestliže k = Ω(n), pak amortizovaná složitost na jednu operace je O(1) Jirka Fink Datové struktury I 11
12 Inkrementace binárního čítače: Účetní metoda Účetní metoda Změna jednoho bitu stojí jeden žeton a na každou operaci dostaneme dva žetony Invariant: U každého jedničkového bitu si uschováme jeden žeton Při inkrementu máme vynulování jedničkových bitů předplaceno Oba žetony poskytnuté k vykonání operace využijeme na jedinou změnu nulového bitu na jedničku a předplacení jeho vynulování Na začátku potřebujeme dostat nejvýše n žetonů Celkově dostaneme na k operací n + 2k žetonů Amortizovaný počet změněných bitů při jedné operaci je O(1) za předpokladu k = Ω(n) Jirka Fink Datové struktury I 12
13 Inkrementace binárního čítače: Potenciální metoda Potenciální metoda Potenciál nulového bitu je 0 a potenciál jedničkového bitu je 1 Potenciál čítače je součet potenciálů všech bitů 1 Potenciál po provedení j-té operace označme Φ j skutečný počet změněných bitů při j-té operaci označme T j 2 Chceme spočítat amortizovaný počet změněných bitů, který označíme A Pro každou operaci j musí platit T j A + (Φ j 1 Φ j ) pro libovolnou operaci j 3 Podobně jako v účetní metodě dostáváme A T j + (Φ j Φ j 1 ) 2 Celkový počet změněných bitů při k operacích je k T j j=1 k (2 + Φ j 1 Φ j ) 2k + Φ 0 Φ k 2k + n, j=1 protože 0 Φ j n 4 Jirka Fink Datové struktury I 13
14 1 V tomto triviálním příkladu je potenciál přesně počet žetonů v účetní metodě. 2 Φ 0 je potenciál před provedení první operace a Φ k je potenciál po poslední operaci. 3 Toto je zásadní fakt amortizované analýzy. Potenciál je jako banka, do které můžeme uložit peníze (čas), jestliže operace byla levná (rychle provedená). Při drahých (dlouho trvajících) operacích musíme naopak z banky vybrat (snížit potenciál), abychom operaci zaplatili (stihli provést v amortizovaném čase). V amortizované analýze je cílem najít takovou potenciální funkci, že při rychle provedené operaci potenciál dostatečně vzroste a naopak při dlouho trvajících operací potenciál neklesne příliš moc. 4 Součtu k j=1 (Φ j 1 Φ j ) = Φ 0 Φ k se říká teleskopická suma a tento nástroj budeme často používat. Jirka Fink Datové struktury I 13
15 Potenciální metoda Definice Potenciál Φ je funkce, která každý stav datové struktury ohodnotí nezáporným reálným číslem. Operace nad datovou strukturou má amortizovanou složitost A, jestliže libovolné vykonání operace splňuje T A + ( Φ(S) Φ(S ) ), kde T je skutečný čas nutný k vykonání operace, S je stav před jejím vykonáním a S je stav po vykonání operace. Příklad: Inkrementace binárního čítače Potenciál Φ je definován jako počet jedničkových bitů v čítači Skutečný čas T je počet změněných bitů při jedné operaci INCREMENT Amortizovaný čas je 2 Platí T A + (Φ(S) Φ(S )) Jirka Fink Datové struktury I 14
16 Obsah 1 Amortizovaná analýza Inkrementace binárního čítače Dynamické pole 2 Vyhledávací stromy 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 15
17 Dynamické pole Dynamické pole Máme pole, do kterého přidáváme i mažeme prvky Počet prvků označíme n a velikost pole p Jestliže p = n a máme přidat další prvek, tak velikost pole zdvojnásobíme Jestliže p = 4n a máme smazat prvek, tak velikost pole zmenšíme na polovinu 1 Intuitivní přístup 2 Zkopírování celého pole trvá O(n) Jestliže po realokaci pole máme n prvků, pak další realokace nastane nejdříve po n/2 operacích INSERT nebo DELETE 3 Amortizovaná složitost je O(1) Agregovaná analýza: Celkový čas Necht k i je počet operací mezi (i 1) a i-tou realokací i k i = k Při první realokaci se kopíruje nejvýše n 0 + k 1 prvků, kde n 0 je počáteční počet Při i-té realokaci se kopíruje nejvýše 2k i prvků, kde i 2 4 Celkový počet zkopírovaných prvků je nejvýše n 0 + k 1 + i 2 2k i n 0 + 2k Jirka Fink Datové struktury I 16
18 1 Přesněji: Uvažujeme přidávání a mazání prvků ze zásobníku. 2 V analýze počítáme pouze čas na realokaci pole. Všechny ostatní činnost při operacích INSERT i DELETE trvají O(1) v nejhorším čase. Zajímá nás počet zkopírovaných prvků při realokaci, protože předpokládáme, že kopírování jednoho prvku trvá O(1). 3 Po realokaci a zkopírování je nové pole z poloviny plné. Musíme tedy přidat n prvků nebo smazat n/2 prvků, aby došlo k další realokaci. 4 Nejhorším případem je posloupnost INSERT, kdy zdvojnásobíme počet prvků, které poté musíme realokovat. Jirka Fink Datové struktury I 16
19 Dynamické pole Potenciální metoda Uvažujme potenciál 0 pokud p = 2n Φ = n pokud p = n n pokud p = 4n a tyto tři body rozšíříme po částech lineární funkcí Explicitně Φ = { 2n p pokud p 2n p/2 n pokud p 2n Změna potenciálu při jedné operaci bez realokace je Φ Φ 2 1 Skutečný počet zkopírovaných prvků T vždy splňuje T + (Φ Φ) 2 Celkový počet zkopírovaných prvků při k operacích je nejvýše 2k + Φ 0 Φ k 2k + n 0 Celkový čas k operací je O(n 0 + k) Amortizovaný čas jedné operace je O(1) Jirka Fink Datové struktury I 17
20 1 2 pokud přidáváme a p 2n Φ 2 pokud mažeme a p 2n Φ = 1 pokud přidáváme a p 2n 1 pokud mažeme a p 2n Jirka Fink Datové struktury I 17
21 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy BB[α]-strom Splay stromy (a,b)-stromy Červeno-černý strom 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 18
22 Binární vyhledávací strom Vlastnosti Příklad Binární strom (každý vrchol obsahuje nejvýše dva syny) Klíč v každém vnitřním vrcholu je větší než všechny klíče v levém podstromu a menší než všechny klíče v pravém podstromu Prvky mohou být uloženy pouze v listech nebo též ve vnitřních vrcholech (u každého klíče je uložena i hodnota) Složitost Pamět : O(n) Časová složitost operace Find je lineární ve výšce stromu Výška stromu může být až n 1 Jirka Fink Datové struktury I 19
23 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy BB[α]-strom Splay stromy (a,b)-stromy Červeno-černý strom 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 20
24 Váhově vyvážené stromy: BB[α]-strom BB[α]-strom (Nievergelt, Reingold [15]) Binární vyhledávací strom Počet vrcholů v podstromu vrcholu u označme s 1 u Pro každý vrchol u platí, že podstromy obou synů u musí mít nejvýše αs u vrcholů 2 Zřejmě musí platit 1 < α < Výška BB[α]-stromu Podstromy všech vnuků kořene mají nejvýše α 2 n vrcholů Podstromy všech vrcholů v i-té vrstvě mají nejvýše α i n vrcholů α i n 1 jen pro i log 1 (n) α Výška BB[α]-stromu je Θ(log n) Operace BUILD: Vytvoření BB[α]-stromu ze setříděného pole Prostřední prvek dáme do kořene Rekurzivně vytvoříme oba podstromy Časová složitost je O(n) Jirka Fink Datové struktury I 21
25 1 Do s u započítáváme i vrchol u. 2 V literatuře můžeme najít různé varianty této podmínky. Podstatné je, aby oba postromy každého vrcholu měli zhruba stejný počet vrcholů. 3 Pro α = 1 lze BB[α]-strom sestrojit, ale operace INSERT a DELETE by byly časově 2 náročné. Pro α = 1 by výška BB[α]-strom mohla být lineární. Jirka Fink Datové struktury I 21
26 BB[α]-strom: Operace INSERT a DELETE Operace INSERT (DELETE je analogický) Najít list pro nový prvek a uložit do něho nový prvek (složitost: O(log n)) Jestliže některý vrchol porušuje vyvažovací podmínku, tak celý jeho podstrom znovu vytvoříme operací BUILD (složitost: amortizovaná analýza) 1 2 Amortizovaná časová složitost operací INSERT a DELETE: Agregovaná metoda Jestliže podstrom vrcholu u po provedení operace BUILD má s u vrcholů, pak další porušení vyvažovací podmínky pro vrchol u nastane nejdříve po Ω(s u) přidání/smazání prvků v podstromu vrcholu u (cvičení) Rebuild podstromu vrcholu u trvá O(s u) Amortizovaný čas vyvažovaní jednoho vrcholu je O(1) 3 Při jedné operaci INSERT/DELETE se prvek přidá/smaže v Θ(log n) podstromech Amortizovaný čas vyvažovaní při jedné operaci INSERT nebo DELETE je O(log n) Jaký je celkový čas k operací? 4 Jirka Fink Datové struktury I 22
27 1 Při hledání listu pro nový vrchol stačí na cestě od kořene k listu kontrolovat, zda se přidáním vrcholu do podstromu syna neporuší vyvažovací podmínka. Pokud se v nějakém vrcholu podmínka poruší, tak se hledání ukončí a celý podstrom včetně nového prvku znovu vybuduje. 2 Existují pravidla pro rotování BB[α]-stromů, ale ta se nám dnes nehodí. 3 Operace BUILD podstromu vrcholu u trvá O(s u) a mezi dvěmi operacemi BUILD podstromu u je Ω(s u) operací INSERT nebo DELETE do postromu u. Všimněte si analogie a dynamickým polem. 4 Intuitivně bychom mohli říct, že v nejhorším případě BB[α]-strom nejprve vyvážíme v čase O(n) a poté provádíme jednotlivé operace, a proto celkový čas je O(n + k log n), ale není to pravda. Proč? Jirka Fink Datové struktury I 22
28 BB[α]-strom: Operace INSERT a DELETE Amortizovaná časová složitost operací INSERT a DELETE: Potenciální metoda V této analýze uvažujeme jen čas na postavení podstromu, zbytek trvá O(log n) Potenciál vrcholu u definován { 0 pokud s l(u) s r(u) 1 Φ(u) = s l(u) s r(u) jinak, kde l(u) a r(u) jsou levý a pravý synové u. Potenciál BB[α]-stromu Φ je součet potenciálů vrcholů Při vložení/smazání prvku se potenciál Φ(u) jednoho vrcholu zvýší nejvýše o 2 1 Pokud nenastane Rebuild, pak se potenciál stromu zvýší nejvýše o O(log(n)) 2 Pokud nastane Rebuild vrcholu u, pak Φ(u) αs u (1 α)s u (2α 1)s u Po rekonstrukci mají všechny vrcholy v podstromu u nulový potenciál 3 Při rekonstrukci poklesne potenciál Φ alespoň o Ω(s u), což zaplatí čas na rekonstrukci Dále platí 0 Φ hn = O(n log n), kde h je výška stromu 4 Celkový čas na k operací INSERT nebo DELETE je O((k + n) log n) Jirka Fink Datové struktury I 23
29 1 Potenciál se změní právě o 2, jestli rozdíl velikostí podstromů se změní z 1 na 2 nebo opačně. Jinak se potenciál změní právě o 1. 2 Potenciál se může změnit pouze vrcholům na cestě z kořene do nového/smazaného vrcholu a těch je O(log n). 3 Právě zde potřebujeme, aby potenciál vrcholu byl nulový, i když se velikosti podstromů jeho synů liší o jedna. 4 Součet potenciálů všech vrcholů v jedné libovolné vrstvě je nejvýše n, protože každý vrchol patří do nejvýše jednoho podstromu vrcholu z dané vrstvy. Tudíž potenciál stromu Φ je vždy nejvýše nh. Též lze nahlédnout, že každý vrchol je započítán v nejvýše h potenciálech vrcholů. Jirka Fink Datové struktury I 23
30 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy BB[α]-strom Splay stromy (a,b)-stromy Červeno-černý strom 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 24
31 Staticky optimální strom Cíl Pro danou posloupnost operací FIND najít binární vyhledávací strom minimalizující celkovou dobu vyhledávání. Formálně Máme prvky x 1,..., x n s váhami w 1,..., w n. Cena stromu je n i=1 w ih i, kde h i je hloubka prvku x i. Staticky optimální strom je binární vyhledávací strom s minimální cenou. Konstrukce (cvičení) O ( n 3) triviálně dynamickým programováním O ( n 2) vylepšené dynamické programování (Knuth [12]) Jak postupovat, když neznáme váhy předem? Pomocí rotací bude udržovat často vyhledávané prvky blízko kořene Operací SPLAY rotujeme zadaný prvek až do kořene Operace FIND vždy volá SPLAY na hledaný prvek Jirka Fink Datové struktury I 25
32 Splay strom (Sleator, Tarjan [17]): Operace SPLAY prvku x Zig rotace: Otec p prvku x je kořen p x A B C x A p B C Zig-zig rotace: x a p jsou oba pravými nebo oba levými syny g p x A B C D x A p B g C D Zig-zag rotace: x je pravý syn a p je levý syn nebo opačně g p A x B C D x p A B g C D Jirka Fink Datové struktury I 26
33 Uvažujeme buttom-up verzi, tj. prvek x nejprve najdeme a poté jej postupně rotujeme nahoru, což znamená, že x vždy značí stejný vrchol postupně se přesouvající ke kořeni a ostatní vrcholy stromu jsou sousedé odpovídající dané rotaci. Existuje též top-down verze [13], která vždy rotuje vnuka kořene, jehož podstrom obsahuje prvek x. Tato verze je sice v praxi rychlejší, ale postup a analýza jsou složitější. Jirka Fink Datové struktury I 26
34 Splay strom: Operace SPLAY prvku x Zig-zag rotace jsou pouze dvě jednoduché rotace prvku x s aktuálním otcem g p A x B C D g x p A B C D x p A B g C D Zig-zig rotace jsou taky dvě rotace, g p x A B C D x A p B g C D p x A B g C D ale dvě rotace prvku x s aktuálním otcem by vedli ke špatnému výsledku g p x A B C D g x A p B C D x A g p B C D Jirka Fink Datové struktury I 27
35 Splay strom: Amortizovaná analýza Lemma Pro a, b, c R + splňující a + b c platí log 2 (a) + log 2 (b) 2 log 2 (c) 2. Důkaz Platí 4ab = (a + b) 2 (a b) 2 Z nerovností (a b) 2 0 a a + b c plyne 4ab c 2 Zlogaritmováním dostáváme log 2 (4) + log 2 (a) + log 2 (b) log 2 (c 2 ) Značení Necht velikost s(x) je počet vrcholů v podstromu x (včetně x) Potenciál vrcholu x je Φ(x) = log 2 (s(x)) Potenciál Φ stromu je součet potenciálů všech vrcholů s a Φ jsou velikosti a potenciály po jedné rotaci Předkládáme, že jednoduchou rotaci zvládneme v jednotkovém čase Jirka Fink Datové struktury I 28
36 Lemma můžeme též dokázat pomocí Jensenovy nerovnosti, která tvrdí: Jestliže f je konvexní funkce, x 1,..., x n jsou čísla z definičního oboru f a w 1,..., w n jsou kladné váhy, pak platí nerovnost f ( n i=1 w ix i n i=1 w i ) n i=1 w if (x i ) n i=1 w. i Jelikož funkce log je rostoucí a konkávní, dostáváme ( ) log(a) + log(b) a + b log log(c) 1, 2 2 z čehož plyne znění lemmatu. Jirka Fink Datové struktury I 28
37 Splay strom: Zig rotace p x x C A p A B B C Analýza Φ (x) = Φ(p) Φ (p) < Φ (x) Φ (u) = Φ(u) pro všechny ostatní vrcholy u Φ Φ = (Φ (u) Φ(u)) u = Φ (p) Φ(p) + Φ (x) Φ(x) Φ (x) Φ(x) Jirka Fink Datové struktury I 29
38 Splay strom: Zig-zag rotace g x p D p g A x A B C D B C Analýza 1 Φ (x) = Φ(g) 2 Φ(x) < Φ(p) 3 Φ (p) + Φ (g) 2Φ (x) 2 s (p) + s (g) s (x) Z lemmatu plyne log 2 (s (p)) + log 2 (s (g)) 2 log 2 (s (x)) 2 4 Φ Φ = Φ (g) Φ(g) + Φ (p) Φ(p) + Φ (x) Φ(x) 2(Φ (x) Φ(x)) 2 Jirka Fink Datové struktury I 30
39 Splay strom: Zig-zig rotace g x p D A p x C B g A B C D Analýza Φ (x) = Φ(g) Φ(x) < Φ(p) Φ (p) < Φ (x) s(x) + s (g) s (x) Φ(x) + Φ (g) 2Φ (x) 2 Φ Φ = Φ (g) Φ(g) + Φ (p) Φ(p) + Φ (x) Φ(x) 3(Φ (x) Φ(x)) 2 Jirka Fink Datové struktury I 31
40 Splay strom: Analýza Amortizovaný čas 1 Amortizovaný čas jedné zigzig nebo zigzag rotace: T + Φ Φ 2 + 3(Φ (x) Φ(x)) 2 = 3(Φ (x) Φ(x)) 2 Amortizovaný čas jedné zig rotace: T + Φ Φ 1 + Φ (x) Φ(x) 1 + 3(Φ (x) Φ(x)) Necht Φ i je potenciál po i-té rotaci a T i je skutečný čas i-té rotace Amortizovaný čas (počet jednoduchých rotací) jedné operace SPLAY: (T i + Φ i Φ i 1 ) 1 + 3(Φ i (x) Φ i 1 (x)) i-tá rotace i-tá rotace 1 + 3(Φ konec (x) Φ 0 (x)) log 2 n = O(log n) Amortizovaný čas jedné operace SPLAY je O(log n) Skutečný čas k operací SPLAY Potenciál vždy splňuje 0 Φ n log 2 n Rozdíl mezi konečným a počátečním potenciálem je nejvýše n log 2 n Celkový čas k operací SPLAY je O((n + k) log n) 3 Jirka Fink Datové struktury I 32
41 1 Časy na nalezení prvku a jeho SPLAY jsou stejné, a proto analyzujeme počet rotací při operaci SPLAY. Neúspěšná operace FIND dojde až k vrcholu mající NULL v ukazatelu, na kterém se vyhledávání zastaví. Na tento poslední vrchol je nutné zavolat SPLAY, aby opakovaná neúspěšná vyhledávání měla amortizovanou logaritmickou složitost. 2 T značí skutečný čas rotace, což je počet jednoduchých rotací k provedení rotace zig, zigzig nebo zigzag. 3 Zig rotaci použijeme nejvýše jednou a proto započítáme +1. Rozdíly Φ (x) Φ(x) se teleskopicky odečtou a zůstane nám rozdíl potenciálů vrcholu x na konci a na začátku operace SPLAY. Na počátku je potenciál vrcholu x nezáporný a na konci je x kořenem, a proto jeho potenciál je log 2 (n). Jirka Fink Datové struktury I 32
42 Splay strom: Operace INSERT Vložení prvku x 1 Začneme vyhledáváním klíče x, které skončí ve vrcholu u 1 2 SPLAY(u) 3 Vložit nový vrchol s prvkem x 2 u u L R x R L Amortizovaná složitost Operace FIND a SPLAY: O(log n) Vložením nového vrcholu potenciál Φ vzroste nejvýše o Φ (x) + Φ (u) 2 log 2 n Amortizovaná složitost operace INSERT je O(log n) Jirka Fink Datové struktury I 33
43 1 u obsahuje klíč, který je největší ze všech uložených klíčů menších než x nebo nejmenší ze všech uložených klíčů než x. Pokud je x menší nebo větší než všechny klíče, pak je u určen jednoznačně, jinak máme volbu ze dvou možných vrcholů. Rozmysleme si, že poslední navštívený vrchol při operaci FINDz klasických binárních vyhledávacích stromeů splňuje popsané požadavky na vrchol u. 2 Pokud nechceme mít ve stromu duplicitní klíče a klíč vrcholu u je roven x, pak vložení neprovedeme. Nicméně je stále nutné zavolat SPLAY na vrchol u, jinak by opakované pokusy o vložení prvku x mohli být hodně drahé. Jirka Fink Datové struktury I 33
44 Splay strom: Operace Delete Algoritmus 1 Splay(x) 2 L levý podstrom x 3 if L je prázdný then 4 Smazat vrchol x 5 else 6 Najít největší prvek a v L 7 Splay(a) 8 L levý podstrom a # a nemá pravého syna 9 Sloučit vrcholy x a a Pokud L je neprázdný, tak x x a L R a R L R L Jirka Fink Datové struktury I 34
45 Další vlastnosti splay stromů Věta (vyhledávání prvků v rostoucím pořadí) Jestliže posloupnost vyhledávání S obsahuje prvky v rostoucím pořadí, tak celkový čas na vyhledávání S ve splay stromu je O(n). 1 Věta (statická optimalita) Necht T je statický strom, c T (x) je počet navštívených vrcholů při hledání x a x 1,..., x m je posloupnost obsahující všechny prvky. Pak libovolný splay strom provede O ( m i=1 c T (x i ) ) operací při hledání x 1,..., x m. 2 Hypotéza (dynamická optimalita) Necht T je binární vyhledávací strom, který prvek x hledá od kořene vrcholu obsahující x a přitom provádí libovolné rotace. Cena jednoho vyhledání prvky je počet navštívených vrcholů plus počet rotací a c T (S) je součet cen vyhledání prvků v posloupnosti S. Pak cena vyhledání posloupnosti S v splay stromu je O(n + c T (S)). 3 Jirka Fink Datové struktury I 35
46 1 n je opět počet prvků ve stromu a počáteční splay strom může mít prvky rozmístěné libovolně. 2 Každý prvek uložený ve stromě musíme aspoň jednou najít. Počáteční splay strom může mít prvky rozmístěné libovolně. 3 V dynamické optimalitě může T při vyhledávání provádět rotace, takže může být rychlejší než staticky optimální strom, například když S často po sobě vyhledává stejný prvek. Jirka Fink Datové struktury I 35
47 Splay stromy: Výhody a aplikace Výhody a nevýhody Splay stromů + Nepotřebuje pamět na speciální příznaky 1 + Efektivně využívají procesorové cache (Temporal locality) - Rotace zpomalují vyhledávání - Vyhledávání nelze jednoduše paralelizovat - Výška stromu může být i lineární 2 Aplikace Cache, virtuální pamět, sítě, file system, komprese dat,... Windows, gcc compiler and GNU C++ library, sed string editor, Fore Systems network routers, Unix malloc, Linux loadable kernel modules,... Jirka Fink Datové struktury I 36
48 1 Červeno-černé stromy potřebují v každém vrcholu jeden bit na barvu, AVL stromy jeden bit na rozdíl výšek podstromů synů. 2 Když vyhledáme všechny prvky v rostoucím pořadí, pak strom zdegeneruje na cestu. Proto splay strom není vhodný v real-time systémech. Jirka Fink Datové struktury I 36
49 1. domácí úkol: Splay stromy Stručné zadání Implementujte Splay strom s operacemi SPLAY, FIND, INSERT Implementujte naivní Splay strom, který v operaci SPLAY naivně používá jen jednoduché rotace místo dvojitých Měřte průměrnou hloubku hledaného prvku při operacích FIND Analyzujte závislost průměrné hloubky hledaných prvků na počtu prvků v Splay stromu a velikosti hledané podmnožiny Analyzujte průměrnou hloubku hledaných prvků v několika testech Napište program, který spočítá průměrnou hloubek prvků ve staticky optimálním stromu pro danou posloupnost vyhledávání Srovnejte průměrné hloubky hledaných prvků ve Splay stromu a ve staticky optimálním stromu Termín odevzdání: , předtermín Generátor dat a další podrobnosti: fink/ Jirka Fink Datové struktury I 37
50 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy BB[α]-strom Splay stromy (a,b)-stromy Červeno-černý strom 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 38
51 Vyhledávací strom Vlastnosti Vnitřní vrcholy mají libovolný počet synů (typicky alespoň dva) Vnitřní vrchol s k syny má k 1 setříděných klíčů V každém vnitřním vrcholu je i-tý klíč větší než všechny klíče v i-tém podstromu a menší než všechny klíče v (i + 1) podstromu pro všechny klíče i Prvky mohou být uloženy pouze v listech nebo též ve vnitřních vrcholech (u každého klíče je uložena i hodnota) Příklad Jirka Fink Datové struktury I 39
52 (a,b)-strom (Bayer, McCreight [1]) Vlastnosti a, b jsou celá čísla splňující a 2 a b 2a 1 (a,b)-strom je vyhledávací strom Všechny vnitřní vrcholy kromě kořene mají alespoň a synů a nejvýše b synů Kořen má nejvýše b synů Všechny listy jsou ve stejné výšce Pro zjednodušení uvažujeme, že prvky jsou jen v listech Příklad: (2,4)-strom Jirka Fink Datové struktury I 40
53 (a,b)-strom: Operace Insert Vložte prvek s klíčem 4 do následujícího (2,4)-stromu Nejprve najdeme správného otce, jemuž přidáme nový list Opakovaně rozdělujeme vrchol na dva Jirka Fink Datové struktury I 41
54 (a,b)-strom: Operace Insert Algoritmus 1 Najít otce v, kterému nový prvek patří 2 Přidat nový list do v 3 while deg(v) > b do # Najdeme otce u vrcholu v 4 if v je kořen then 5 Vytvořit nový kořen u s jediným synem v 6 else 7 u otec v # Rozdělíme vrchol v na v and v 8 Vytvořit nového syna v utci u a umístit jej vpravo vedle v 9 Přesunout nejpravějších (b + 1)/2 synů vrcholu v do v 0 Přesunout nejpravějších (b + 1)/2 1 klíčů vrcholu v do v 1 Přesunout poslední klíč vrcholu v do u 2 v u Časová složitost Lineární ve výšce stromu (předpokládáme, že a, b jsou pevné parametry) Jirka Fink Datové struktury I 42
55 Musíme ještě dokázat, že po provedení všech operací doopravdy dostaneme (a,b)-strom. Ověříme, že rozdělené vrcholy mají alespoň a synů (ostatní požadavky jsou triviální). Rozdělovaný vrchol má na počátku právě b + 1 synů a počet synů po rozdělení je b+1 a b+1. Protože b 2a 1, počet synů po rozdělení je alespoň b a = a = a. Jirka Fink Datové struktury I 42
56 (a,b)-strom: Operace Delete Smažte prvek s klíčem 4 z následujícího (2,4)-stromu Nalezneme a smažeme list Přesuneme jedno syna od bratra nebo spojíme vrchol s bratrem Jirka Fink Datové struktury I 43
57 (a,b)-strom: Operace Delete Algoritmus 1 Najít list l obsahující prvek s daným klíčem 2 v otec l 3 Smazat l 4 while deg(v) < a & v není kořen do 5 u sousední bratr v 6 if deg(u) > a then 7 Přesunout správného syna u pod v 1 8 else 9 Přesunout všechny syny u pod v 2 0 Smazat u 1 if v nemá žádného bratra then 2 Smazat kořen (otec v) a nastavit v jako kořen 3 else 4 v otec v Jirka Fink Datové struktury I 44
58 1 Při přesunu je nutné upravit klíče ve vrcholech u, v a jejich otci. 2 Vrchol u měl a, vrchol v měl a 1 synů. Po jejich sjednocení máme vrchol s 2a 1 b syny. Jirka Fink Datové struktury I 44
59 (a,b)-strom: Analýza Výška (a,b)-strom výšky d má alespoň a d 1 a nejvýše b d listů. Výška (a,b)-stromu splňuje log b n d 1 + log a n. Složitost Časová složitost operací Find, Insert and Delete je O(log n). Počet modifikovaných vrcholů při vytvoření stromu operací Insert Vytváříme (a,b)-strom pomocí operace Insert Zajímá nás celkový počet vyvažovacích operací 1 Při každém štěpení vrcholu vytvoříme nový vnitřní vrchol Po vytvoření má strom nejvýše n vnitřních vrcholů Celkový počet štěpení je nejvýše n a počet modifikací vrcholů je O(n) Amortizovaný počet modifikovaných vrcholů na jednu operaci Insert je O(1) Jirka Fink Datové struktury I 45
60 1 Při jedné vyvažovací operaci (štěpení vrcholu) je počet modifikovaných vrcholů omezený konstantou (štěpený vrchol, otec a synové). Asymptoticky jsou počty modifikovaných vrcholů a vyvažovacích operací stejné. Jirka Fink Datové struktury I 45
61 (a,b)-strom: Paralelní přístup Cíl Umožnit efektní paralelizaci operací Find, Insert a Delete (předpoklad: b 2a). Operace Insert Preventivně rozdělit každý vrchol na cestě od kořene k hledanému listu s b syny na dva vrcholu. Operace Delete Preventivně sloučit každý vrchol na cestě od kořene k hledanému listu s a syny s bratrem nebo přesunout synovce. Jirka Fink Datové struktury I 46
62 (a,b)-strom: Paralelní přístup: Příklad Vložte prvek s klíčem 6 do následujícího (2,4)-stromu Nejprve rozdělíme kořen Pak pokračujeme do levého syna, který taky rozdělíme Vrchol s klíčem 8 není třeba rozdělovat a nový klíč můžeme vložit Jirka Fink Datové struktury I 47
63 A-sort (Guibas, McCreight, Plass, Roberts [8]) Cíl Setřídit skoro setříděné pole Modifikace (a,b)-stromu Máme uložený ukazatel na vrchol s nejmenším klíčem Příklad: Vložte klíč s hodnotou x i = 16 Začmene od vrcholu s nejmenším klíčem a postupujeme ke kořeni, dokud x i nepatří podstromu aktuálního vrcholu V rámci tohoto podstromu spustíme operaci Insert Výška podstromu je Θ(log f i ), kde f i je počet klíčů menších než x i Prvek x i = 16 patří do tohoto podstromu Nejmenší klíč Výška podstromu Jirka Fink Datové struktury I 48
64 A-sort: Algoritmus Input: Posloupnost x 1, x 2,..., x n 1 T prázdný (a,b)-strom 2 for i n to 1 # Prvky procházíme od konce 3 do # Najdeme podstrom, do kterého vložíme x i 4 v list s nejmenším klíčem 5 while v není kořen a x i je větší než nejmenší klíč v otci vrcholu v do 6 v otec v 7 Vložíme x i do podstromu vrcholu v Output: Projdeme celý strom a vypíšeme všechny klíče (in-order traversal) Jirka Fink Datové struktury I 49
65 A-sort: Složitost (Brown, Tarjan [2], Mehlhorn [14]) Nerovnost mezi aritmetickým a geometrickým průměrem Jestliže a 1,..., a n nezáporná reálná čísla, pak platí n i=1 a i n n a i. n Časová složitost 1 Necht f i = {j > i; x j < x i } je počet klíčů menších než x i, které již jsou ve stromu při vkládání x i 2 Necht F = {(i, j); i > j, x i < x j } = n i=1 f i je počet inverzí 3 Složitost nalezení podstromu, do kterého x i patří: O(log f i ) 4 Nalezení těchto podstromů pro všechny podstromy i log f i = log i f i = n log n i f i i n log f i = n log F. 1 n n 5 Rozdělování vrcholů v průběhu všech operací Insert: O(n) 6 Celková složitost: O(n + n log(f/n)) 7 Složitost v nejhorším případě: O(n log n) protože F ( ) n 2 8 Jestliže F n log n, pak složitost je O(n log log n) 2 i=1 Jirka Fink Datové struktury I 50
66 1 Místo AG nerovnosti můžeme použít Jensenovu nerovnost, ze které přímo plyne i log f i n log i f i n. 2 Tento algoritmus je bohužel efektivní jen pro hodně skoro setříděné posloupnosti. Jestliže počet inverzí je n 1+ɛ, pak dostáváme složitost střídění O(n log n), kde ɛ je libovolně malé kladné číslo. Jirka Fink Datové struktury I 50
67 (a,b)-strom: Závěr Počet modifikovaných vrcholů při operací Insert a Delete [10] Předpoklad: b 2a Počet modifikovaných vrcholů při l operacích Insert a k Delete je O(k + l + log n) Amortizovaný počet modifikovaných vrcholů při operacích Insert a Delete je O(1) Podobné datové struktury B-tree, B+ tree, B* tree 2-4-tree, tree, etc. Aplikace File systems např. Ext4, NTFS, HFS+ Databáze Jirka Fink Datové struktury I 51
68 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy BB[α]-strom Splay stromy (a,b)-stromy Červeno-černý strom 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 52
69 Červeno-černé stromy (Guibas, Sedgewick [9]) Definice 1 Binární vyhledávací strom s prvky uloženými ve všech vrcholech 2 Každý vrchol je černý nebo červený 3 Všechny cesty od kořene do listů obsahují stejný počet černých vrcholů 4 Otec červeného vrcholu musí být černý 5 Listy jsou černé 1 Příklad NIL NIL NIL NIL NIL 99 NIL NIL NIL NIL NIL NIL Jirka Fink Datové struktury I 53
70 1 Nepovinná podmínka, která jen zjednodušuje operace. V příkladu uvažujeme, že listy jsou reprezentovány NIL/NULL ukazately, a tedy imaginární vrcholy bez prvků. Někdy se též vyžaduje, aby kořen byl černý, ale tato podmínka není nutná, protože kořen můžeme vždy přebarvit na černo bez porušení ostatních podmínek. Jirka Fink Datové struktury I 53
71 Červeno-černé stromy: Ekvivalence s (2,4)-stromy Vrchol bez červených synů Vrchol s jedním čevneným synem Vrchol s dvěma červenými syny Jirka Fink Datové struktury I 54
72 1 Převod mezi červeno-černými stromy a (2,4)-stromy není jednoznačný, protože vrchol (2,4)-stromu se třemi syny a prvky x < y lze převést na černý vrchol červeno-černého stromu s prvkem x a pravým červeným synem y nebo s prvkem y a levým červeným synem x. Jirka Fink Datové struktury I 54
73 Červeno-černé stromy: Operace Insert Vytvoření nového vrcholu Najít list pro nový prvek n Přidat nový vrchol p p NIL NIL NIL n NIL NIL Pokud otec p je červený, pak je nutné strom vybalancovat Balancování Vrchol n a jeho otec p jsou červené vrcholy a toto je jediná porušená podmínka Děda g vrcholu n je černý Musíme uvažovat tyto případy: Strýc u je černý nebo červený Vrchol n je pravým nebo levým synem p (podobně pro vrchol p) 1 Jirka Fink Datové struktury I 55
74 1 S využitím symetrií lze počet případů snížit. Jirka Fink Datové struktury I 55
75 Červeno-černé stromy: Operace Insert, strýc je černý g p p u n g n u 1 2 n p g u Pořadí prvků v (2,4)-stromu a výsledný červeno-černý strom závisí na tom, zda vrchol n je pravým nebo levým synem p a zda vrchol p je pravým nebo levým synem g. Jirka Fink Datové struktury I 56
76 Červeno-černé stromy: Operace Insert, strýc je červený g g p u p u n n n p g u... g n p u 4 5 Po rozdělení vrchol (2,4)-stromu se prvek g přesouvá do otce, a proto je vrchol g červený. Jirka Fink Datové struktury I 57
77 Červeno-černé stromy: Vlastnosti Důsledky ekvivalence s (2,4)-stromy Výška červeno-černého stromu je Θ(log n) 1 Časová složitost operací Find, Insert a Delete je O(log n) Amortizovaný počet modifikovaných vrcholů při operací Insert a Delete je O(1) Paralelní přístup (top-down balancování) Aplikace Associativní pole např. std::map and std::set v C++, TreeMap v Java The Completely Fair Scheduler in the Linux kernel Computational Geometry Data structures Jirka Fink Datové struktury I 58
78 1 Počet černých vrcholů na cestě ke kořeni je stejný jako výška odpovídajícího (2,4)-stromu, a tedy výška červeno-černého stromu je nejvýše dvojnásobek výšky (2,4)-stromu. Jirka Fink Datové struktury I 58
79 Obsah 1 Amortizovaná analýza 2 Vyhledávací stromy 3 Cache-oblivious algoritmy 4 Haldy 5 Geometrické datové struktury 6 Hešování 7 Literatura Jirka Fink Datové struktury I 59
80 Pamět ová hierarchie Příklad velikostí a rychlostí různých typů pamětí Triviální program size speed L1 cache 32 KB 223 GB/s L2 cache 256 KB 96 GB/s L3 cache 8 MB 62 GB/s RAM 32 GB 23 GB/s SDD 112 GB 448 MB/s HDD 2 TB 112 MB/s # Inicializace pole 32-bitových čísel velikosti n 1 for (i=0; i+d<n; i+=d) do 2 A[i] = i+d # Vezmeme každou d-tou pozici a vytvoříme cyklus 3 A[i]=0, i=0 # Měříme dobu průběhu cyklu v závislosti na parametrech n a d # Počet operací je nezávislý na n a d 4 for (j=0; j< 2 28 ; j++) do 5 i = A[i] # Dokola procházíme cyklus d-tých pozic Jirka Fink Datové struktury I 60
81 Pamět ová hierarchie: Triviální program Čas [s] d=2 11 d= d=2 9 d=2 8 d=2 7 d= d=2 5 d=2 4 d=2 3 5 d= log 2 n Jirka Fink Datové struktury I 61
82 Cache-oblivious (Frigo, Leiserson, Prokop, Ramachandran, 1999 [7]) Zjednodušený model paměti Uvažujme pouze na dvě úrovně paměti: pomalý disk a rychlá cache Pamět je rozdělená na bloky (stránky) velikosti B 1 Velikost cache je M, takže cache má P = M bloků B Procesor může přistupovat pouze k datům uložených v cache Pamět je plně asociativní 2 Data se mezi diskem a cache přesouvají po celých blocích a našim cílem je určit počet bloků načtených do cache Cache-aware algoritmus Algoritmus zná hodnoty M a B a podle nich nastavuje parametry (např. velikost vrcholu B-stromu při ukládání dat na disk). Cache-oblivious algoritmus Algoritmus musí efektivně fungovat bez znalostí hodnot M a B. Důsledky: Není třeba nastavovat parametry programu, který je tak přenositelnější Algoritmus dobře funguje mezi libovolnými úrovněmi paměti (L1 L2 L3 RAM) Jirka Fink Datové struktury I 62
83 1 Pro zjednodušení předpokládáme, že jeden prvek zabírá jednotkový prostor, takže do jednoho bloku se vejde B prvků. 2 Předpokládáme, že každý blok z disku může být uložený na libovolné pozici v cache. Tento předpoklad výrazně zjednodušuje analýzu, i když na reálných počítačích moc neplatí, viz Jirka Fink Datové struktury I 62
84 Cache-oblivious analýza: Scanning Přečtení souvislého pole (výpočet maxima, součtu a podobně) Prvek Blok Pamět n B Minimální možný počet přenesených bloků je n/b. Skutečný počet přenesených bloků je nejvýše n/b + 1. Předpokládáme, že máme k dispozici O(1) registrů k uložení iterátoru a maxima. Obrácení pole Počet přenesených bloků je stejný za předpokladu, že P 2. Jirka Fink Datové struktury I 63
85 Cache-oblivious analýza: Binární halda a vyhledávání Binární halda v poli: Průchod od listu ke kořeni Začátek haldy Čtené prvky Blok 1 Cesta má Θ(log n) vrcholů 2 Posledních Θ(log B) vrcholů leží v nejvýše dvou blocích 3 Ostatní vrcholy jsou uloženy v po dvou různých blocích 4 Θ(log n log B) = Θ(log n ) přenesených bloků 1 B Binární vyhledávání Porovnáváme Θ(log n) prvků s hledaným prvkem 2 Posledních Θ(log B) prvků je uloženo v nejvýše dvou blocích Ostatní prvky jsou uloženy v po dvou různých blocích Θ(log n log B) přenesených bloků Jirka Fink Datové struktury I 64
86 1 Přesněji Θ(max {1, log n log B}). Dále předpokládáme, že n B. 2 Pro jednoduchost uvažujeme neúspěšné vyhledávání. Jirka Fink Datové struktury I 64
87 Cache-oblivious analýza: Mergesort Případ n M/2 Celé pole se vejde do cache, takže přenášíme 2n/B + O(1) bloků. 1 Schéma Délka spojovaných polí n n/2 n/4 z 1 Případ n > M/2.. Výška stromu rekurze log 2 (n/z) log 2 n log 2 z 1 Necht z je maximální velikost pole, která může být setříděná v cache 2 2 Platí z M < 2z 2 3 Slití jedné úrovně vyžaduje 2 n + 2 n + O(1) = O( ) n B z B přenosů. 3 4 Počet přenesených bloků je O ( ) ( ) ( n B 1 + n log2 z = O n log ) n B M. 4 Jirka Fink Datové struktury I 65
88 1 Polovina cache je použita na vstupní pole a druhá polovina na slité pole. 2 Pro jednoduchost předpokládáme, že velikosti polí v jedné úrovni rekurze jsou stejné. z odpovídá velikosti pole v úrovni rekurze takové, že dvě pole velikost z/2 mohou být slity v jedno pole velikost z. 3 Slití všech polí v jedné úrovni do polovičního počtu polí dvojnásobné délky vyžaduje přečtení všech prvků. Navíc je třeba uvažovat nezarovnání polí a bloků, takže hraniční bloky mohou patřit do dvou polí. 4 Funnelsort přenese O ( n log ) n B P B bloků. Jirka Fink Datové struktury I 65
89 Cache-oblivious analýza: Transpozice matic: Triviální přístup Strategie pro výměnu stránek v cache OPT: Optimální off-line algoritmus předpokládající znalost všech přístupů do paměti FIFO: Z cache smažeme stránku, která je ze všech stránek v cachi nejdelší dobu LRU: Z cache smažeme stránku, která je ze všech stránek v cachi nejdéle nepoužitá Triviální algoritmus pro transpozici matice A velikost k k 1 for i 1 to k do 2 for j i + 1 to k do 3 Swap(A ij, A ji ) Předpoklady Uvažujeme pouze případ B < k: Do jednoho bloku cache se nevejde celá řádka matice P < k: Do cache se nevejde celý sloupec matice Jirka Fink Datové struktury I 66
90 Cache-oblivious analýza: Transpozice matic: Triviální přístup Příklad: Representace matice 5 5 v paměti LRU a FIFO strategie Při čtení matice po sloupcích si cache pamatuje posledních P řádků, takže při čtení prvku A 3,2 již prvek A 3,1 není v cache. Počet přenesených bloků je Ω(k 2 ). OPT strategie 1 Transpozice prvního řádku/sloupce vyžaduje alespoň k 1 přenosů. 2 Nejvýše P prvků z druhého sloupce zůstane v cache. 3 Proto transpozice druhého řádku/sloupce vyžaduje alespoň k P 2 přenosů. 4 Transpozice i-tého řádku/sloupce vyžaduje alespoň max {0, k P i} přenosů. 5 Celkový počet přenosu je alespoň k P i=1 k P i = Ω ( (k P) 2). Jirka Fink Datové struktury I 67
91 Cache-oblivious analýza: Transpozice matic: Cache-aware přístup Cache-aware algoritmus pro transpozici matice A velikost k k # Nejprve si rozdělíme danou matici na submatice velikosti z z 1 for (i = 0; i < k; i+ = z) do 2 for (j = i; j < k; j+ = z) do # Transponujeme submatici začínající na pozici (i, j) 3 for (ii = i; ii < min(k, i + z); ii + +) do 4 for (jj = max(j, ii + 1); jj < min(k, j + z); jj + +) do 5 Swap(A ii,jj, A jj,ii ) Hodnocení Optimální hodnota z závisí na konkrétním počítači Využíváme jen jednu úroveň cache Při správně zvolené hodnotě z bývá tento postup nejrychlejší Jirka Fink Datové struktury I 68
92 Cache-oblivious analýza: Transpozice matic: Rekurzivní transpozice Idea Rekurzivně rozdělíme na submatice ( ) ( ) A11 A A = 12 A T A T = 11 A T 21 A 21 A 22 A T 12 A T 22 Matice A 11 a A 22 se transponují podle stejného schématu, ale A 12 a A 21 se prohazují. Jirka Fink Datové struktury I 69
93 Cache-oblivious analýza: Transpozice matic: Rekurzivní transpozice 1 Procedure transpose on diagonal(a) 2 if Matice A je malá then 3 Transponujeme matici A triviálním postupem 4 else 5 A 11, A 12, A 21, A 22 souřadnice submatic 6 transpose on diagonal(a 11 ) 7 transpose on diagonal(a 22 ) 8 transpose and swap(a 12, A 21 ) 9 Procedure transpose and swap(a, B) 0 if Matice A a B jsou malé then 1 Prohodíme a transponujeme matice A a B triviálním postupem 2 else 3 A 11, A 12, A 21, A 22, B 11, B 12, B 21, B 22 souřadnice submatic 4 transpose and swap(a 11, B 11 ) 5 transpose and swap(a 12, B 21 ) 6 transpose and swap(a 21, B 12 ) 7 transpose and swap(a 22, B 22 ) Jirka Fink Datové struktury I 70
94 Všimněme si, že matice A a B musí mít posice symetrické podle hlavní diagonály původní matice, a proto ve skutečnosti funkci transpose and swap() stačí předávat pozice matici A. Ve funkci transpose on diagonal musí být matice A čtvercová a ležet na hlavní diagonále, a proto stačí předávat x-ovou souřadnici a řád matice. Jirka Fink Datové struktury I 70
95 Cache-oblivious analýza: Transpozice matic: Rekurzivní transpozice Analýza počtu přenesených bloků 1 Předpoklad Tall cache : M 4B 2, tj. počet bloků je alespoň 4B 1 2 Necht z je maximální velikost submatice, ve které se jeden řádek vejde do jednoho bloku 2 3 Platí: z B 2z 4 Jedna submatice z z je uložena v nejvýše 2z 2B blocích 5 Dvě submatice z z se vejdou do cache 3 6 Transpozice matice typu z z vyžaduje nejvýše 4z přenosů 7 Máme (k/z) 2 submatic velikosti z ( 8 Celkový počet přenesených bloků je nejvýše k2 4z 8k2 = O z 2 B 9 Tento postup je optimální až na multiplikativní faktor 4 k 2 B ) Jirka Fink Datové struktury I 71
96 1 Stačilo by předpokládat, že počet bloků je alespoň Ω(B). Máme-li alespoň 4B bloků, pak je postup algebraicky jednodušší. 2 Pokud začátek řádky není na začátku bloku, tak je jeden řádek submatice uložen ve dvou blocích. 3 Funkce transpose and swap pracujeme se dvěma submaticemi. 4 Celá matice je uložena v alespoň k2 B blocích paměti. Jirka Fink Datové struktury I 71
97 Cache-oblivious analýza: Reprezentace binárních stromů Cíl Sestrojit reprezentaci binárního stromu efektivně využívající cache. Počítame počet načtených bloků při průchodu cesty z listu do kořene. Binární halda Velmi neefektivní: Počet přenesených bloků je Θ(log n log B) = Θ(log n B ) B-regulární halda, B-strom Výška stromu je log B (n) + Θ(1) 1 Jeden vrchol je uložen v nejvýše dvou blocích Počet načtených bloků je Θ(log B (n)) 2 Nevýhody: cache-aware a chtěli jsme binární strom Převedení na binární strom Každý vrchol B-regulární haldy nahradíme binárním stromem. Jirka Fink Datové struktury I 72
98 1 Platí pro B-regulární haldu. B-strom má výšku Θ(log B (n). 2 Asymptoticky optimální řešení důkaz je založen na Information theory. Jirka Fink Datové struktury I 72
99 Cache-oblivious analýza: Reprezentace binárních stromů a1 a a2 b1 b b2 c1 c c2 d1 d d2 e1 e e2 f1 f f2 g1 g g2... vynecháno... y1 y y2 z1 z z2 a a1 a2 b c d e b1 b2 c1 c2 d1 d2 e1 e2 f1 f f2 g1 g g2... vynecháno... y1 y y2 z1 z z2 a a1 a2 b b1 b2 c c1 c2 d d1 d2 e e1 e2 f f1 f2... z z1 z2 Cesta z kořene do listu f 2 Jirka Fink Datové struktury I 73
100 Cache-oblivious analýza: Reprezentace binárních stromů Rekurzivní bottom-up konstrukce van Emde Boas rozložení van Emde Boas rozložení veb 0 řádu 0 je jeden vrchol veb k obsahuje jednu horní kopii veb k 1 a každému listu horní kopie má dvě dolní kopie veb k 1 V poli jsou nejprve uložena horní kopie a pak následují všechny dolní kopie Pořadí vrcholů v poli podle van Emde Boas rozložení Jirka Fink Datové struktury I 74
101 Cache-oblivious analýza: Reprezentace binárních stromů Rekurzivní top-down konstrukce van Emde Boas rozložení h 2 h... h 2 Výpočet počtu načtených bloků při cestě z kořene do listu Necht h = log 2 n je výška stromu Necht z je maximální výška podstromu, který se vejde do jednoho bloku Platí: z log 2 B 2z Počet podstromů výšky z na cestě z kořene do listu je = 2 log B n h 2 log 2 n z log 2 B Počet načtených bloků je Θ(log B n) Jirka Fink Datové struktury I 75
102 Cache-oblivious analýza: Srovnání OPT a LRU strategií Věta (Sleator, Tarjan [16]) Necht s 1,..., s k je posloupnost přístupů do paměti 1 Necht P OPT a P LRU je počet bloků v cache pro strategie OPT a LRU 2 Necht F OPT a F LRU je počet přenesených bloků 3 P LRU > P OPT Pak F LRU Důsledek P LRU P LRU P OPT F OPT + P OPT Pokud LRU může uložit dvojnásobný počet bloků v cache oproti OPT, pak LRU má nejvýše dvojnásobný počet přenesených bloků oproti OPT (plus P OPT ). 4 Zdvojnásobení velikosti cache nemá většinou vliv na asymptotický počet přenesených bloků Scanning: O(n/B) Mergesort: O ( n log ) n B M Funnelsort: O ( n log ) n B P B The van Emde Boas layout: O(log B n) Jirka Fink Datové struktury I 76
103 1 s i značí blok paměti, se kterým program pracuje, a proto musí být načten do cache. Posloupnost s 1,..., s k je pořadí bloků paměti, ve kterém algoritmus pracuje s daty. Při opakovaném přístupu do stejného bloku se blok posloupnosti opakuje. 2 Představme si, že OPT strategie pustíme na počítači s P OPT bloky v cache a LRU strategie spustíme na počítači s P OPT bloky v cache. 3 Srovnáváme počet přenesených bloků OPT strategie na počítači s P OPT bloky a LRU strategie na počítači s P OPT bloky. 4 Formálně: Jestliže P LRU = 2P OPT, pak F LRU 2F OPT + P OPT. Jirka Fink Datové struktury I 76
104 Cache-oblivious analýza: Srovnání OPT a LRU strategií Důkaz (F LRU P LRU P LRU P OPT F OPT + P OPT ) 1 Pokud LRU má f P LRU přenesených bloků v podposloupnosti s, pak OPT přenese alespoň f P OPT bloků v podposlopnosti s Pokud LRU načte v podposloupnost f různých bloků, tak podposloupnost obsahuje alespoň f různých bloků Pokud LRU načte v podposloupnost jeden blok dvakrát, tak podposloupnost obsahuje alespoň P LRU f různých bloků OPT má před zpracováním podposloupnosti nejvýše P OPT bloků z podposloupnosti v cache a zbylých alespoň f P OPT musí načíst 2 Rozdělíme posloupnost s 1,..., s k na podposlopnosti tak, že LRU přenese P LRU bloků v každé podposloupnosti (kromě poslední) 3 Jestliže F OPT and F LRU jsou počty přenesených bloků při zpracování libovolné podposloupnosti, pak F LRU P LRU F P LRU P OPT OPT (kromě poslední) OPT přenese F OPT P LRU P OPT bloků v každé podposloupnosti Tedy F LRU F OPT P LRU P LRU P OPT 4 V poslední posloupnosti platí F LRU P LRU F P LRU P OPT OPT + P OPT Platí F OPT F LRU P OPT a 1 Tedy F LRU F OPT + P OPT P LRU P LRU P OPT P LRU P LRU P OPT F OPT + P OPT Jirka Fink Datové struktury I 77
105 Srovnání rychlosti čtení a zápisu z paměti Čtení z paměti # Inicializace pole 32-bitových čísel velikosti n 1 for (i=0; i+d<n; i+=d) do 2 A[i] = i+d # Vezmeme každou d-tou pozici a vytvoříme cyklus 3 A[i=0]=0 # Měříme dobu průběhu cyklu v závislosti na parametrech n a d 4 for (j=0; j< 2 28 ; j++) do 5 i = A[i] # Dokola procházíme cyklus d-tých pozic Zápis do paměti # Měříme dobu průběhu cyklu v závislosti na parametrech n a d 1 for (j=0; j< 2 28 ; j++) do 2 A[(j*d) % n] = j # Dokola zapisujeme na d-té pozice Jirka Fink Datové struktury I 78
106 Srovnání rychlosti čtení a zápisu z paměti Čas [s] 2 max=18s max=3.4s Čtení, d=1024 Čtení, d=32 Zápis, d=1024 Zápis, d=32 Čtení, d=1 Zápis, d= log 2 n Jirka Fink Datové struktury I 79
Datové struktury I NTIN066
Datové struktury I NTIN066 Jirka Fink https://ktiml.mff.cuni.cz/ fink/ Katedra teoretické informatiky a matematické logiky Matematicko-fyzikální fakulta Univerzita Karlova v Praze Zimní semestr 2016/17
Binární vyhledávací stromy pokročilé partie
Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald
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
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 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí
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
binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım
Stromy, haldy, prioritní fronty
Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík
Základní datové struktury III: Stromy, haldy
Základní datové struktury III: Stromy, haldy 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í
Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010
Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu
Dynamické programování
Dynamické programování 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)
Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost
Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě
IB111 Úvod do programování skrze Python
Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově
Prioritní fronta, halda
Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje
Časová a prostorová složitost algoritmů
.. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová
Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)
13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací
Algoritmus pro generování normálních magických čtverců
1.1 Úvod Algoritmus pro generování normálních magických čtverců Naprogramoval jsem v Matlabu funkci, která dokáže vypočítat magický čtverec libovolného přípustného rozměru. Za pomocí tří algoritmů, které
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
Vyvažování a rotace v BVS, všude se předpokládá AVL strom
Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce
Datové struktury 2: Rozptylovací tabulky
Datové struktury 2: Rozptylovací tabulky 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
Maturitní téma: Programovací jazyk JAVA
Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek
Dijkstrův algoritmus
Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované
Stromy. Jan Hnilica Počítačové modelování 14
Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A
TGH07 - Chytré stromové datové struktury
TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 5. dubna 2017 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz
Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)
Algoritmy výpočetní geometrie
Algoritmy výpočetní geometrie 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)
Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace
Vektory a matice Aplikovaná matematika I Dana Říhová Mendelu Brno Obsah 1 Vektory Základní pojmy a operace Lineární závislost a nezávislost vektorů 2 Matice Základní pojmy, druhy matic Operace s maticemi
IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)
IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná
Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.
Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel
4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.
4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a
Dynamické datové struktury III.
Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované
Dynamické programování UIN009 Efektivní algoritmy 1
Dynamické programování. 10.3.2005 UIN009 Efektivní algoritmy 1 Srovnání metody rozděl a panuj a dynamického programování Rozděl a panuj: top-down Dynamické programování: bottom-up Rozděl a panuj: překrývání
Výhody a nevýhody jednotlivých reprezentací jsou shrnuty na konci kapitoly.
Kapitola Reprezentace grafu V kapitole?? jsme se dozvěděli, co to jsou grafy a k čemu jsou dobré. rzo budeme chtít napsat nějaký program, který s grafy pracuje. le jak si takový graf uložit do počítače?
V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti
Kapitola 5 Vektorové prostory V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti operací sčítání a násobení
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní. stromový rozklad. Poznamenejme, že je-li k součástí vstupu, pak rozhodnout
Ukážeme si lineární algoritmus, který pro pevné k rozhodne, zda vstupní graf má stromovou šířku nejvýše k, a je-li tomu tak, také vrátí příslušný stromový rozklad. Poznamenejme, že je-li k součástí vstupu,
Základy algoritmizace a programování
Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;
Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto
Kapitola 1 Rozděl a panuj Rozděl a panuj je programovací metoda. Často se označuje latinsky Divide et Empera nebo anglicky Divide and Conquer. Vychází z toho, že umíme zadaný problém rozložit na menší
Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,
Stromové rozklady Zdeněk Dvořák 25. října 2017 Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom, β je funkce přiřazující každému vrcholu T podmnožinu vrcholů v G, pro každé
PQ-stromy a rozpoznávání intervalových grafů v lineárním čase
-stromy a rozpoznávání intervalových grafů v lineárním čase ermutace s předepsanými intervaly Označme [n] množinu {1, 2,..., n}. Mějme permutaci π = π 1, π 2,..., π n množiny [n]. Řekneme, že množina S
Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39
x 2 = a 2 + tv 2 tedy (a 1, a 2 ) T + [(v 1, v 2 )] T A + V Příklad. U = R n neprázdná množina řešení soustavy Ax = b.
1. Afinní podprostory 1.1. Motivace. Uvažujme R 3. Jeho všechny vektorové podprostory jsou počátek, přímky a roviny procházející počátkem a celé R 3. Chceme-li v R 3 dělat geometrii potřebujeme i jiné
Systém adresace paměti
Systém adresace paměti Základní pojmy Adresa fyzická - adresa, která je přenesena na adresní sběrnici a fyzicky adresuje hlavní paměť logická - adresa, kterou má k dispozici proces k adresaci přiděleného
ADT STROM Lukáš Foldýna
ADT STROM Lukáš Foldýna 26. 05. 2006 Stromy mají široké uplatnění jako datové struktury pro různé algoritmy. Jsou to matematické abstrakce množin, kterou v běžném životě používáme velice často. Příkladem
DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3
DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),
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
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 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského
Algoritmy na ohodnoceném grafu
Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův algoritmus
Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.
Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky
Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit
Jednoduché stránkování Operační systémy Přednáška 8: Správa paměti II Hlavní paměť rozdělená na malé úseky stejné velikosti (např. 4kB) nazývané rámce (frames). Program rozdělen na malé úseky stejné velikosti
Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy
Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Algoritmy I, složitost
A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??
k-dimenzionálním prostoru. problém: Zkonstruovat strom, který rozděluje prostor polorovinami
kd-stromy (kd-trees) k čemu to je: ukládání vícerozměrných dat (k-dimenzionální data) vstup: Množina bodů (nebo složitějších geometrických objektů) v k-dimenzionálním prostoru. problém: Zkonstruovat strom,
Kapitola 1. Úvod. 1.1 Značení. 1.2 Výroky - opakování. N... přirozená čísla (1, 2, 3,...). Q... racionální čísla ( p, kde p Z a q N) R...
Kapitola 1 Úvod 1.1 Značení N... přirozená čísla (1, 2, 3,...). Z... celá čísla ( 3, 2, 1, 0, 1, 2,...). Q... racionální čísla ( p, kde p Z a q N) q R... reálná čísla C... komplexní čísla 1.2 Výroky -
Jarníkův algoritmus. Obsah. Popis
1 z 6 28/05/2015 11:44 Jarníkův algoritmus Z Wikipedie, otevřené encyklopedie Jarníkův algoritmus (v zahraničí známý jako Primův algoritmus) je v teorii grafů algoritmus hledající minimální kostru ohodnoceného
3 Algoritmy řazení. prvku a 1 je rovněž seřazená.
Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A ... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka()
V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2
Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných
Prohledávání do šířky = algoritmus vlny
Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé
Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie
Obsah Počítání modulo n a jeho časová složitost 3. a 4. přednáška z kryptografie 1 Počítání modulo n - dokončení Umocňování v Zn 2 Časová složitost výpočtů modulo n Asymptotická notace Základní aritmetické
Red Black strom (Red Black Tree) Úvod do programování. Rotace. Red Black strom. Rotace. Rotace
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Red Black strom je binární strom s jedním dvouhodnotovým příznakem
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í
Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární 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
Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika
amortizovaná složitost, Fibonacciho halda, počítačová aritmetika Jiří Vyskočil, Marko Genyg-Berezovskyj 2009 Amortizovaná složitost Asymptotická složitost často dostatečně nevypovídá o složitosti algoritmů,
Algoritmy a datové struktury
Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu
Operace s maticemi. 19. února 2018
Operace s maticemi Přednáška druhá 19. února 2018 Obsah 1 Operace s maticemi 2 Hodnost matice (opakování) 3 Regulární matice 4 Inverzní matice 5 Determinant matice Matice Definice (Matice). Reálná matice
Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.
Grafy doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Grafy 104 / 309 Osnova přednášky Grafy
Složitosti základních operací B + stromu
Složitosti základních operací B + stromu Radim Bača VŠB Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky ŠKOMAM 2010-1- 28/1/2010 Složitosti základních operací B +
Lineární algebra : Násobení matic a inverzní matice
Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda frantisek.stampach@fit.cvut.cz, karel.klouda@fit.cvut.cz Katedra aplikované matematiky Fakulta informačních
Padovan heaps Vladan Majerech
Padovan heaps Vladan Majerech Základní princip velmi drahé porovnávání Porovnáváme jen když musíme (v podstatě veškerou práci dělá FindMin) Výsledky porovnávání nezahazujeme Nesmíme organizací porovnávání
Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n
[1] Základní pojmy [2] Matice mezi sebou sčítáme a násobíme konstantou (lineární prostor) měníme je na jiné matice eliminační metodou násobíme je mezi sebou... Matice je tabulka čísel s konečným počtem
Datový typ prioritní fronta Semestrální práce z předmětu 36PT
Datový typ prioritní fronta Semestrální práce z předmětu 36PT Martin Tůma Cvičení 113, Út 18:00 22. května 2004 Specifikace problému Často potřebujeme přístup k informacím, tak aby tyto byly seřazeny podle
Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování. študenti MFF 15. augusta 2008
Učební texty k státní bakalářské zkoušce Matematika Základy lineárního programování študenti MFF 15. augusta 2008 1 15 Základy lineárního programování Požadavky Simplexová metoda Věty o dualitě (bez důkazu)
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10
Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10
Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky
Komprese dat Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI přednášky Statistické metody Jan Outrata (Univerzita Palackého v Olomouci) Komprese dat Olomouc, únor březen 2016 1 / 23 Tunstallův
Rekurentní rovnice, strukturální indukce
Rekurentní rovnice, strukturální indukce Jiří Velebil: A7B01MCS 26. září 2011: 1/20 Příklad (Parketáž triminy z minulé přednášky) P(n) = počet parket k vyparketování místnosti rozměru n 1 P(1) = 1. 2 P(n
5 Rekurze a zásobník. Rekurzivní volání metody
5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení
Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III
Michal Krátký Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz
Dynamické datové struktury IV.
Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra
a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:
Řešené příklady z lineární algebry - část 1 Typové příklady s řešením Příklady jsou určeny především k zopakování látky před zkouškou, jsou proto řešeny se znalostmi učiva celého semestru. Tento fakt se
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]
1 Linearní prostory nad komplexními čísly
1 Linearní prostory nad komplexními čísly V této přednášce budeme hledat kořeny polynomů, které se dále budou moci vyskytovat jako složky vektorů nebo matic Vzhledem k tomu, že kořeny polynomu (i reálného)
ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.
ADT prioritní fronta Haldy množina M operace Přidej(M,x) přidá prvek x do množiny M Odeber(M) odeber z množiny M prvek, který je na řadě Zásobník (LIFO), Fronta (FIFO) Prioritní fronta: Přidej(M,x) přidá
NPRG030 Programování I, 2018/19 1 / :03:07
NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování
Grafové algoritmy. Programovací techniky
Grafové algoritmy Programovací techniky Grafy Úvod - Terminologie Graf je datová struktura, skládá se z množiny vrcholů V a množiny hran mezi vrcholy E Počet vrcholů a hran musí být konečný a nesmí být
Vyhledávací stromy. Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání.
Vyhledávací stromy Slouží jako pomůcka pro organizaci dat umožňující efektivní vyhledávání. Vytvářejí se vždy nad již existující datovou strukturou (zpravidla tabulkou). Vyhledávací stromy můžeme rozdělit
[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici
[1] Determinant je číslo jistým způsobem charakterizující čtvercovou matici det A = 0 pro singulární matici, det A 0 pro regulární matici používá se při řešení lineárních soustav... a v mnoha dalších aplikacích
Rekurzivní algoritmy
Rekurzivní algoritmy 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
Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech
Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech 1. července 2008 1 Funkce v R n Definice 1 Necht n N a D R n. Reálnou funkcí v R n (reálnou funkcí n proměnných) rozumíme zobrazení
Lineární algebra : Násobení matic a inverzní matice
Lineární algebra : Násobení matic a inverzní matice (8. přednáška) František Štampach, Karel Klouda LS 2013/2014 vytvořeno: 17. března 2014, 12:42 1 2 0.1 Násobení matic Definice 1. Buďte m, n, p N, A
Suffixové stromy. Osnova:
Suffixové stromy http://jakub.kotrla.net/suffixtrees/ Osnova: Motivační příklad Přehled možných řešení Definice suffixového stromu Řešení pomocí suffixových stromů Konstrukce suffixového stromu Další použití,
Návrh Designu: Radek Mařík
1. 7. Najděte nejdelší rostoucí podposloupnost dané posloupnosti. Použijte metodu dynamického programování, napište tabulku průběžných délek částečných výsledků a tabulku předchůdců. a) 5 8 11 13 9 4 1
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
Stromy úvod 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 Neorientovaný strom Orientovaný strom Kořenový orientovaný
Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:
3 Maticový počet 3.1 Zavedení pojmu matice Maticí typu (m, n, kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru: a 11 a 12... a 1k... a 1n a 21 a 22...
Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C
Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat
B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11
Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):
Operace s maticemi
Operace s maticemi Seminář druhý 17.10. 2018 Obsah 1 Operace s maticemi 2 Hodnost matice 3 Regulární matice 4 Inverzní matice Matice Definice (Matice). Reálná matice typu m n je obdélníkové schema A =
68. ročník Matematické olympiády 2018/2019
68. ročník Matematické olympiády 2018/2019 Řešení úloh ústředního kola kategorie P 2. soutěžní den P-III-4 Výlet Abychom našli požadovaný výlet délky 4, stačí najít dvě hvězdy a a b, které mají dva společné
bfs, dfs, fronta, zásobník, prioritní fronta, halda
bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší
Lineární spojový seznam (úvod do dynamických datových struktur)
Lineární spojový seznam (úvod do dynamických datových struktur) Jan Hnilica Počítačové modelování 11 1 Dynamické datové struktury Definice dynamické struktury jsou vytvářeny za běhu programu z dynamicky
5 Orientované grafy, Toky v sítích
Petr Hliněný, FI MU Brno, 205 / 9 FI: IB000: Toky v sítích 5 Orientované grafy, Toky v sítích Nyní se budeme zabývat typem sít ových úloh, ve kterých není podstatná délka hran a spojení, nýbž jejich propustnost
Úvod do informatiky. Miroslav Kolařík. Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008.
Úvod do informatiky přednáška čtvrtá Miroslav Kolařík Zpracováno dle učebního textu R. Bělohlávka: Úvod do informatiky, KMI UPOL, Olomouc 2008. Obsah 1 Pojem relace 2 Vztahy a operace s (binárními) relacemi
Lingebraické kapitolky - Počítání s maticemi
Lingebraické kapitolky - Počítání s maticemi Jaroslav Horáček KAM MFF UK 20 Rozehřívačka: Definice sčítání dvou matic a násobení matice skalárem, transpozice Řešení: (A + B ij A ij + B ij (αa ij α(a ij
Programování v C++ 1, 16. cvičení
Programování v C++ 1, 16. cvičení binární vyhledávací strom 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené
Cvičení 5 - Inverzní matice
Cvičení 5 - Inverzní matice Pojem Inverzní matice Buď A R n n. A je inverzní maticí k A, pokud platí, AA = A A = I n. Matice A, pokud existuje, je jednoznačná. A stačí nám jen jedna rovnost, aby platilo,