Padovan heaps Vladan Majerech

Podobné dokumenty
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

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í

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

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

Algoritmy na ohodnoceném grafu

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

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

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Union-Find problém. Kapitola 1

Stromy, haldy, prioritní fronty

1. Binomiální haldy Zavedení binomiální haldy

ADT STROM Lukáš Foldýna

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

Prioritní fronta, halda

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

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

TGH05 - aplikace DFS, průchod do šířky

TGH07 - Chytré stromové datové struktury

TGH05 - aplikace DFS, průchod do šířky

Algoritmy a datové struktury

TGH07 - Chytré stromové datové struktury

1. Binomiální haldy Zavedení binomiální haldy

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

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

Datové struktury I NTIN066

Dynamické datové struktury IV.

Datové struktury Úvod

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

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

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

Radek Mařík

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

8. Geometrie vrací úder (sepsal Pavel Klavík)

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

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

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

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

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

Content Aware Image Resizing

Analýza Petriho sítí. Analýza Petriho sítí p.1/28

Dynamické datové struktury III.

STROMOVE ALGORITMY Prohledavani do sirky (level-order) Po vodorovnejch carach fronta

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

6. Lineární (ne)rovnice s odmocninou

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

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

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

TGH05 - Problém za milion dolarů.

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

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

Maturitní téma: Programovací jazyk JAVA

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.

Věta 12.3 : Věta 12.4 (princip superpozice) : [MA1-18:P12.7] rovnice typu y (n) + p n 1 (x)y (n 1) p 1 (x)y + p 0 (x)y = q(x) (6)

Algoritmy výpočetní geometrie

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

7. Geometrické algoritmy (sepsal Pavel Klavík)

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

Proudové šifry a posuvné registry s lineární zpětnou vazbou

Jarníkův algoritmus. Obsah. Popis

Úvod do řešení lineárních rovnic a jejich soustav

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

Teorie grafů BR Solutions - Orličky Píta (Orličky 2010) Teorie grafů / 66

zejména Dijkstrův algoritmus pro hledání minimální cesty a hladový algoritmus pro hledání minimální kostry.

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

Tento text je stručným shrnutím těch tvrzení Ramseyovy teorie, která zazněla

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

4.2 Syntaxe predikátové logiky

ABSTRAKTNÍ DATOVÉ TYPY

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Modely teorie grafů, min.kostra, max.tok, CPM, MPM, PERT

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

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

opakování reprezentace grafů, dijkstra, bellman-ford, johnson

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

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

Rekurzivní algoritmy

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

Pointery II. Jan Hnilica Počítačové modelování 17

ORIENTOVANÉ GRAFY, REPREZENTACE GRAFŮ

Matematika III 10. přednáška Stromy a kostry

Stromové rozklady. Definice 1. Stromový rozklad grafu G je dvojice (T, β) taková, že T je strom,

Lineární datové struktury

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

1. Minimální kostry Od mìsteèka ke kostøe

TGH08 - Optimální kostry

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

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

B) EX = 0,5, C) EX = 1, F) nemáme dostatek informací.

Předmět: Algoritmizace praktické aplikace

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

a) b) c) Radek Mařík

Minimální kostry. Teorie. Štěpán Šimsa

Jednofaktorová analýza rozptylu

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

Vrcholová barevnost grafu

Principy indukce a rekursivní algoritmy

které je z různých pohledů charakterizují. Několik z nich dokážeme v této kapitole.

Základy umělé inteligence

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Transkript:

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í ztratit řádově víc času než porovnáváním

Insert Do seznamu prvků haldy vložíme nový prvek O(1) Budeme muset ještě nějaký čas naspořit na budoucí operace uvidíme později

FindMin Porovnáváme kandidáty na minimum, tedy prvky, pro něž neznáme menší prvek Výsledek každého porovnání zaznamenáme (symbolicky hranou směrem k menšímu prvku), reprezentaci probereme později Na konci máme jediného kandidáta na minimum. Potenciál Φ 0 rovný počtu kandidátů na minimum může všechna porovnání zaplatit a navýší cenu Insert o O(1)

DeleteMin Předpokládáme, že předcházel FindMin, případně jej pro jistotu zavoláme. Odstraníme minimum, jeho předci se stanou novými kandidáty na minimum. Je možno implementovat v O(1) čase, ale počet předků musíme přidat do potenciálu Φ 0. Potřebujeme aby stromy byly úzké, aby cena DeleteMin nebyla velká.

Invariant c-q úzkosti Každý prvek haldy bude mít definovaný řád (rank v ) (nový prvek 0). Pro c>0 a 1<q 2 platí: Libovolný vrchol řádu k má alespoň cq k velký podstrom předchůdců. Řád a stupeň nebude nutně totéž. Abychom v DeleteMin měli z čeho zaplatit do potenciálu Φ 0, musíme mít účet pro situace, kdy je stupeň větší než řád. Φ 1 = deg _v rank_v Suma je jen přes kladné rozdíly.

DeleteMin podruhé Pokud prvky haldy budou splňovat invariant c-q úzkosti, pak největší možný řád je log (n/c)/log q, tedy po odstranění minima m bude počet kandidátů deg_m = rank_m+(deg_m-rank_m), tedy kromě přeúčtování z Φ 1 do Φ 0, musíme do Φ 0 přidat jen O(log n). Ačkoli worst case pro DeleteMin může být O(1), v našem amortizovaném rozboru bude cena DeleteMin O(log n).

Zajištění invariantu c-q úzkosti Při FindMin nemůžeme porovnávat kandidáty náhodně, mohly by vznikat široké malé stromy. 1. Spojování stromů stejného řádu je OK 2cq k cq k+1, můžeme kořenu spojeného stromu zvýšit řád, takže rozdíl deg _v rank_v zůstane zachován. 2. Pouze pokud je již od každého řádu nejvýš jeden kandidát, můžeme je porovnat libovolně. Vytvoříme dvojice, ty porovnáme, pak opět vytvoříme dvojice... nechceme porovnávat jednoho kandidáta se všemi. V druhé fázi neměníme rank, zvětšujeme Φ 1.

FindMin cena První fázi zaplatíme z Φ 0. Druhou fázi příspěvek do Φ 1 nemáme z čeho zaplatit. Počet kandidátů na začátku druhé fáze je nejvýš O(log n) (1+maximální dosažitelný řád). Zároveň je to nejvýš počet kandidátů na začátku FindMin. Zavedeme proto potenciál Φ 2 rovný minimu z maximálního dosažitelného řádu + 1 a z počtu kandidátů. Insert musí platit O(1) jak do Φ 0, tak (možná) do Φ 2, DeleteMin zaplatí do Φ 2 nejvýš O(log n).

Implementační detaily Kandidáty na minimum udržujeme v obousměrném seznamu (doprava acyklický, doleva cyklický), abychom mohli přidávat na oba konce a odebírat libovolný prvek v O(1). Stejně jako kandidáty na minimum udržujeme seznam prvků porovnaných s daným kandidátem (větších).

FindMin implementační detaily Pro každý řád máme synchronizační místo (prázdné). V první fázi procházíme seznam kandidátů doprava a v synchronizačních místech jednotlivých řádů aktualizujeme odkazy na navštívené kandidáty. Pokud narazíme na místo odkazující na kandidáta, můžeme porovnat, odstranit většího z kandidátů připojit menšímu jako nejpravějšího přímého předchůdce a zvětšit řád Důležité je, že seznam kandidátů je pouze aktualizován. V čase dle jeho délky můžeme na konci fáze vyprázdnit synchronizační místa. V druhé fázi procházíme doleva a vždy porovnáme dvojici a většího přesuneme na nejlevějšího předchůdce menšího a postoupíme doleva. Končíme, když máme jediného kandidáta.

Decrement (zatím máme Binomiální haldy) Snížením prvku přestane být spolehnutí na hranu z tohoto prvku a musíme ji tedy odstranit. Porušíme tím ale invariant c-q úzkosti? Pokud snížíme všem tranzitivním následníkům řád, tak bude c-q úzkost spravena, ale aktualizace by trvala hloubku prvku, což je až Ω(n). Tarjan Fredman stačí, když budeme propagovat až každé druhé snížení řádu. Zavedení černých a bílých vrcholů.

Decrement analýza Vrcholy budou na začátku bílé. Při prvním snížení řádu přebarvíme na černé (kořeny necháváme bílé). V druhé fázi FindMin prvek který přestává být kandidátem zčervená. Zavedeme Φ 3 =počet všech černých přímých předchůdců. V průběhu Decrement nejvýš jeden bílý vrchol přebarvíme na černo, můžeme ale černý vrchol přebarvit na červeno a propagovat snižování řádu dál. Tato propagace je ale zcela zaplacena ze snížení potenciálu Φ 3. Protože potřebujeme mít aktuální odkazy na následníky, worst case čas pro DeleteMin odpovídá nárůstu Φ 0, tedy θ n.

Fibonacciho haldy Pro nejmenší M k velikost stromu řádu k platí rekurence M k = 1 + 1 + M 0 + M 1 + + M k 2 Tedy M k+1 = M k + M k 1 a dostáváme Fibonacciho posloupnost a c-q úzkost platí pro q = 1+ 5 2. Tím je rozbor Fibonacciho hald ukončen. P.S.: Rozbor by fungoval i pokud bychom místo červené barvy používali bílou. Jen bychom museli zabránit snižování řádů pod nulu.

Ušetření pointeru Kvůli Decrement Fibonacciho haldy potřebují pointer na následníka prvku, abychom mohli propagovat snižování řádů. Šlo by tento pointer ušetřit a použít odkaz jen v posledním předchůdci (místo odkazu na dalšího)? Pak bychom nemohli propagovat snižování řádu s výjimkou prvků na konci seznamu, které mají k následníkovi O(1) přístup. Propagaci provádíme jen v posledních dvou prvcích seznamu (předchůdcích největšího řádu). Worst case čas DeleteMin klesne zpět na O(1).

rank_v a wrank_v Pro černý vrchol je wrank = 1 + rank, pro bílý vrchol je wrank = rank, pro null (chybějící vrchol) je wrank = 1. Seznam předchůdců (dětí) má všechny červené nalevo, pak neklesá wrank (pokud je definovaný). Vezmeme z bílých a černých přímých předchůdců (dětí) vrcholu v dva nejpravější zprava w 0 a w 1. (mohou chybět) S. Bezpečný: wrank w1 + 1 = wrank w0 : rank v = wrank w0 + 1. D. Nebezpečný: wrank w1 + 1 < wrank w0, a w 0 je bílý: rank v = wrank w0. (v nemůže být bílé) F. Zakázaný: wrank w1 + 1 < wrank w0, a w 0 je černý: zažluť w 0 a přepočítej.

Rekurence minimálních stromů

Úzkost Pro minimální velikost M k stromu řádu k máme M k = 1 + M k 2 + M k 3 Úzká souvislost s Padovan posloupností a tedy c-q úzkost pro q= 3 1 1 + 23 2 27 + 3 1 1 23 2 27 1.324718. q 3 = q + 1

Decrement zcela vybarvený Utrhneme prvek (kandidát na minimum), a pokud byl jedním z dvou nejpravějších předchůdců, vyvoláme kaskádovou aktualizaci řádů na jeho následníkovi. Při kaskádové aktualizaci vždy přepočítáme rank. Pokud nedošlo ke změně, výpočet končí. Při snížení ranku bílého prvku o 1 prvek začerníme. Pokud došlo ke snížení ranku černého prvku, je obarven žlutě, stejně tak při snížení ranku bílého prvku aspoň o 2. Je-li prvek mezi pravými dvěmi, pokračuje kaskádové přepočítávání. Při přepočítávání ranku prvku nejprve žluté vrcholy mezi pravými dvěmi přebarvujeme na červeno a přemísťujeme na levý kraj seznamu. Pokud narazíme na červený prvek, víme, že další bílý či černý prvek neexistuje.

Decrement Analýza Decrementu stále ještě nedává O(1). Přepočítání ranku může vést k poklesu až o 2, v takovém případě i pro bílý vrchol dojde k propagaci aktualizace. Tuto propagaci Φ 3 nezaplatí. Potřebujeme potenciál Φ 4 = rank v počet přímých předchůdců v bílé či černé barvy. Odstraněním bílého či černého předchůdce šetříme na budoucí (větší) pokles ranku. Spojování stromů při FindMin nemá vliv na Φ 4. Jediné co jej mění je Decrement. Nyní již za pokračování kaskádovitého přepočítání řádů vždy zaplatí buď Φ 3 nebo Φ 4. Kromě toho máme konstantní příspěvek (až na přemísťování žlutých vrcholů).

Červená, žlutá a nebezpečné Kvůli odkládání přesunu žlutých vrcholů na začátek seznamu potřebujeme potenciál Φ 5 = počet všech žlutých předchůdců. DeleteMin místo deg v rank v stačí Φ 1 =počet všech červených předchůdců. deg _v = počet červených + počet žlutých + počet (bílých a černých), kde počet bílých a černých rank, takže do Φ 0 zaplatíme z Φ 5, Φ 1 a nejvýš O log n. Potřebujeme předcházet bílým nebezpečným vrcholům. Proto na začátku FindMin z nebezpečných vrcholů děláme bezpečné. To je důvod zavedení potenciálu Φ 6 = počet všech nebezpečných vrcholů.

Obrázek se všemi barvami (klíče mají mínus)

Shrnutí Potenciál vůči němuž je analýza je tedy Φ 0 t 0 + Φ 1 t 1 + Φ 2 t 2 + 2Φ 3 t 3 + Φ 4 t 4 + Φ 5 t 5 + Φ 6 t 6 kde t 0 t 1 < t 2, t 1 < t 5 < t 6, t 5 + t 6 < t 3, t 5 + t 6 < t 4 jsou vhodné konstanty. Φ 0 je počet kandidátů. Φ 2 je počet kandidátů, nejvýše však nejvyšší dosažitelný řád + 1. Φ 1, Φ 3, resp. Φ 5 je počet všech červených, černých, resp. žlutých předchůdců. Φ 4 je součet rozdílů mezi rankem a počtem bílých a černých přímých předků. Φ 6 je počet nebezpečných vrcholů

Schéma placení

Soutěž struktur Obhájce jedné struktury vygeneruje posloupnost volání metod, obě funkce provedou danou posloupnost a změří se poměr jejich časů. Haldy dle principu velmi drahého porovnávání vítězí nad standardními haldami hodnotou θ log n pro posloupnost i=0;repeat (Insert(-i), Insert(-(i+1)), FindMin, DeleteMin, i++), protože maximální řád, který vznikne bude 4. Standardní haldy mohou vynutit jedině poměr θ 1.