Problém s údržbou objednávky - Order-maintenance problem
v počítačová věda, problém s údržbou objednávky zahrnuje údržbu a úplně objednaná sada podpora následujících operací:
vložka (X, Y)
, který vloží X bezprostředně za Y v celkové objednávce;objednávka (X, Y)
, který určuje, zda X předchází Y v celkovém pořadí; asmazat (X)
, který odstraní X ze sady.
Paul Dietz poprvé zavedl datovou strukturu k vyřešení tohoto problému v roce 1982.[1] Tato struktura dat podporuje vložka (X, Y)
v (v Velká O notace )amortizovaný čas a objednávka (X, Y)
v konstantním čase, ale nepodporuje mazání. Athanasios Tsakalidis použité stromy BB [α] se stejnými hranicemi výkonu, které podporují odstranění v a vylepšený výkon vkládání a mazání do amortizovaný čas s indirection.[2] Dietz a Daniel Sleator zveřejnila vylepšení nejhoršího konstantního času v roce 1987.[3] V roce 2004 zveřejnili Michael Bender, Richard Cole a Jack Zito výrazně zjednodušené alternativy.[4] Bender, Fineman, Gilbert, Kopelowitz a Montes také v roce 2017 zveřejnili deamortizované řešení.[5]
Efektivní datové struktury pro údržbu objednávek mají aplikace v mnoha oblastech, včetně vytrvalost datové struktury,[6] grafové algoritmy[7][8] a datové struktury odolné vůči chybám.[9]
Označení seznamu
Problém související s problémem údržby objednávek jeproblém se seznamovým označováním ve kterém místo objednávka (X, Y)
provoz řešení musí udržovat přiřazení štítků z vesmíru celých čísel k prvkům sady tak, že X předchází Y v celkovém pořadí, pouze pokud je X přiřazen menší štítek než Y. Musí také podporovat anoperaci štítek (X)
vrácení štítku libovolného uzlu X. Všimněte si toho objednávka (X, Y)
lze provést jednoduše srovnáním štítek (X)
a štítek (Y)
takže řešení problému s označováním seznamů okamžitě způsobí problém s údržbou objednávky. Ve skutečnosti většina řešení problému s údržbou objednávek představuje řešení problému se značením seznamů doplněného o úroveň nepřímé výkonnosti datové struktury. Níže uvidíme příklad.
Pro efektivitu je žádoucí velikost univerzity bude omezen počtem prvků uložené v datové struktuře. V případě, že je vyžadováno, aby byl lineární v problém je znám jako zabalená řada údržby nebo hustá sekvenční údržba souborů Problém. Považujte prvky za položky v souboru a štítky za adresy, kde je každý prvek uložen. Potom by efektivní řešení problému s údržbou zabaleného pole umožnilo efektivní vkládání a mazání záznamů do středu souboru s noasymptotickým prostorem nad hlavou.[10][11][12][13][14] Toto použití má nedávné aplikace zapouzdřené datové struktury[15]a optimální nejhorší případové třídění na místě.[16]
Za určitých omezení však dolní hranice byly nalezeny na výkonu vkládání do řešení problému se seznamovým značením u lineárních vesmírů[17] zatímco níže uvidíme, že řešení s polynomiálním vesmírem může provádět vložení dovnitř čas.
Seznamy a binární vyhledávací stromy

Označení seznamu ve vesmíru o velikosti polynomu v počtu prvků v celkovém pořadí souvisí s problémem udržení rovnováhy v a binární vyhledávací strom. Všimněte si, že každý uzel X binárního vyhledávacího stromu je implicitně označen anintegerem, který odpovídá jeho cestě z kořene stromu. Toto celé číslo nazýváme popis cesty z X a definujte jej následovně být posloupnost levého a pravého sestupu v této cestě. Například, pokud X je správné dítě pravého dítěte levého dítěte kořene stromu. Pak je X označeno celým číslem základna 3 reprezentace je dána nahrazením každého výskytu v s 0, nahrazující každý výskyt v s 2 a připojením 1 na konec výsledného řetězce. V předchozím příkladu je popis cesty X X02213 což se rovná 25 v základně 10. Všimněte si, že pathlabels zachovávají stromové pořadí a lze je tedy použít k zodpovězení dotazů na objednávky v konstantním čase.
Pokud má strom výšku pak tato celá čísla pocházejí z vesmíru . Pokud je tedy strom samovyvažování takže to udržuje výšku ne větší než pak je velikost vesmíru polynomiální .
Proto lze problém se značením seznamu vyřešit udržováním vyváženého binárního vyhledávacího stromu na prvcích v seznamu rozšířených o popisky cest pro každý uzel. Protože však každá operace vyvažování stromu bude muset také aktualizovat tyto popisky cest, není pro tuto aplikaci vhodná datová struktura stromu s vlastním vyvážením. Všimněte si například, že rotace uzlu s podstromem velikosti, které lze provést v konstantním čase za obvyklých okolností, vyžaduje aktualizace popisku cesty. Zejména pokud je uzel, který se otáčí, kořenem, pak rotace bude trvat lineárně ve velikosti celého stromu. S tak dlouhou dobou by bylo možné přestavět celý strom. Níže uvidíme, že existují samovyvažující datové struktury binárního vyhledávacího stromu, které během rebalancování způsobí nevhodný počet aktualizací štítků.
Datová struktura
Problém se seznamovým značením lze vyřešit vesmírem sizepolynomial v počtu prvků rozšířením astrom obětního beránka s popisy cest popsanými výše. Scapegoattrees provádí veškeré své vyvážení přestavováním podstromů. Protože to trvá čas na přestavbu podstromu velikosti, rebranding, že podstrom v poté, co je znovu sestaveno, nezmění asymptotický výkon vyrovnávací operace.
Objednat
Vzhledem ke dvěma uzlům X a Y, objednávka (X, Y)
určuje jejich pořadí porovnáním jejich popisů cest.
Vložit
Vzhledem k novému uzlu pro X a ukazatel na uzel Y, vložka (X, Y)
vloží X bezprostředně za Y obvyklým způsobem. Je-li požadována operace vyvážení, je přestavěn příslušný podstrom, jako je tomu u stromu obětního beránka obvyklé. Poté se podstrom prochází hloubkou a štítky cest každého z jeho uzlů se aktualizují. Jak je popsáno výše, toto asymptoticky netrvá déle než obvyklá operace obnovy.
Vymazat
Odstranění se provádí podobně jako vložení. Vzhledem k tomu, že uzel X byl odstraněn, smazat (X)
odstraní X jako obvykle. Po jakékoli následné operaci opětovného sestavení následuje opětovné označení rebuiltsubtree.
Analýza
Z výše uvedeného argumentu o rebalancování výkonu stromu obětního beránka rozšířeného o popisky cest vyplývá, že výkon vkládání a mazání této datové struktury je asymptotický nyní než v běžném stromu obětního beránka. Pak, protože vkládání a mazání trvá amortizovaný čas v obětních stromech, to samé platí pro tuto datovou strukturu.
Kromě toho strom obětního beránka s parametrem α udržuje výšku maximálně , popisky cesty mají nanejvýš velikost . Pro typickou hodnotu pak jsou štítky nanejvýš.
Pořadí dvou uzlů lze samozřejmě určit v konstantním čase porovnáním jejich popisků. Bližší prohlídka ukazuje, že to platí i pro velké . Konkrétně, pokud je velikost slova stroje bitů, pak obvykle dokáže oslovit maximálně uzly tak . Z toho vyplývá, že vesmír má nanejvýš velikost a tak, aby štítky mohly být reprezentovány konstantním počtem (maximálně ) bity.
Dolní hranice označení seznamu
Ukázalo se, že jakékoli řešení problému s označováním seznamů s vesmírným polynomem v počtu prvků nebude mít výkon vkládání a mazání lepší než .[18] Pak je výše uvedené řešení pro označování seznamů asymptoticky optimální. Mimochodem, to také dokazuje spodní hranice amortizované doby rebalancování vložení nebo odstranění ve stromu obětního beránka.
Tato dolní mez se však nevztahuje na problém údržby objednávky a, jak je uvedeno výše, existují datové struktury, které poskytují nejhorší případy konstantního časového výkonu u všech operací údržby objednávky.
O (1) amortizované vložení prostřednictvím indirekce
Indirection je technika používaná v datových strukturách, při které je problém rozdělen do několika úrovní datové struktury, aby se zlepšila účinnost. Typicky problém s velikostí je rozdělena na problémy s velikostí . Příklad, tato technika se používá v y-rychlé pokusy. Tato strategie také pracuje na zlepšení výkonu vkládání a mazání výše popsané datové struktury na konstantní amortizovaný čas. Infact, tato strategie funguje pro jakékoli řešení problému s označováním seznamů čas vložení a vymazání.

Nová datová struktura je zcela přestavěna, kdykoli se zvětší nebo zvětší. Nechat být počet prvků celkové objednávky, když byla naposledy přestavěna. Datová struktura je znovu sestavena vždy, když je invariantní je narušen vložením nebo odstraněním. Vzhledem k tomu, že opětovné sestavení lze provést v lineárním čase, nemá to vliv na amortizovaný výkon vložení a odstranění.
Během přestavby byla prvky celkového řádu jsou rozděleny na souvislé seznamy, každý velikosti . Cesta-labeledscapegoat strom je konstruován na sadě uzlů představujících každý ze sublistů v jejich původním pořadí seznamu. Pro každý podseznam je vytvořen nepochybně propojený seznam jeho prvků, který ukládá s každým prvkem apointer k jeho zástupci ve stromu i místní integerlabel. Tyto místní štítky jsou nezávislé na štítcích použitých ve stromu a slouží k porovnání jakýchkoli dvou prvků stejného podřízeného seznamu. Prvky podřízeného seznamu jsou označeny místními štítky v původním pořadí.
Objednat
Vzhledem k uzlům dílčích seznamů X a Y, objednávka (X, Y)
může odpovídat tak, že nejprve zkontrolujete, zda jsou dva uzly ve stejném seznamu. Pokud ano, jejich pořadí lze určit porovnáním jejich místních štítků. Jinak se srovnávají popisy cest jejich zástupců v treeare. To vyžaduje neustálý čas.
Vložit
Vzhledem k novému uzlu dílčího seznamu pro X a ukazatel na uzel dílčího seznamu Y,vložka (X, Y)
vloží X bezprostředně za Y do sublistof Y. Pokud je X vloženo na konec sublist, dostane místní štítek , kde je místní značka Y; jinak, pokud je to možné, je označen podlahou průměru místních štítků jeho dvou sousedů. Tento snadný případ trvá konstantní čas.
V těžkém případě mají sousedé X sousedící místní štítky a podřízený seznam musí být přestavěn. V tomto případě však alespoň od prvního vytvoření byly do podseznamu přidány prvky. Pak si můžeme dovolit strávit lineární množství času ve velikosti podseznamu, abychom jej znovu sestavili a případně rozdělili do menších podseznamů, aniž by to ovlivnilo amortizovanou cenu vložení o více než konstantu.
Pokud má podřízený seznam velikost pak jsme to rozdělili na souvislé seznamy velikostí , místně označit každý nový sublist, jak je popsáno výše, a položit každý prvek sublist na nový reprezentativní uzel, který má být vložen do stromu. Trvá to je čas postavit podskupiny. Jelikož nepovolujeme prázdné seznamy, existují maximálně z nich a tak lze do stromu vložit zástupce čas. Proto to trvá čas vložit všechny nové zástupce do stromu.
Vymazat
Vzhledem k tomu, že má být odstraněn uzel podseznamu X, smazat (X)
jednoduše odstraní X ze sublistu v konstantním čase. Pokud je tento seznam prázdný, musíme ze stromu odebrat zástupce tohoto seznamu. Protože přinejmenším prvky byly odstraněny z podseznamu, protože byl poprvé postaven, můžeme si dovolit utratit čas potřebný k odstranění zástupce, aniž by to ovlivnilo naběhlé náklady na vymazání o více než konstantní hodnotu.
Viz také
Reference
- ^ Dietz, Paul F. (1982), „Udržování pořádku v propojeném seznamu“, Sborník příspěvků ze 14. výročního sympózia ACM o teorii výpočtů (STOC '82), New York, NY, USA: ACM, s. 122–127, doi:10.1145/800070.802184, ISBN 978-0897910705.
- ^ Tsakalidis, Athanasios K. (1984), „Udržování pořádku ve zobecněném propojeném seznamu“, Acta Informatica, 21 (1): 101–112, doi:10.1007 / BF00289142, PAN 0747173.
- ^ Dietz, P .; Sleator, D. (1987), „Dva algoritmy pro udržování pořadí v seznamu“, Sborník 19. výročního sympózia ACM o teorii výpočtů (STOC '87), New York, NY, USA: ACM, s. 365–372, doi:10.1145/28395.28434, ISBN 978-0897912211. Plná verze,Tech. Rep. CMU-CS-88-113, Carnegie Mellon University, 1988.
- ^ A. Bender, Michael & Cole, Richard & Zito, Jack. (2004). Dva zjednodušené algoritmy pro udržení pořádku v seznamu. https://www.researchgate.net/publication/2865732_Two_Simplified_Algorithms_for_Maintaining_Order_in_a_List Citováno 2019-06-14
- ^ „Údržba souboru: Když máte pochybnosti, změňte rozložení!“, M. Bender, J. Fineman, S. Gilbert, T. Kopelowitz, P. Montes. Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms. EISBN 978-1-61197-478-2. https://doi.org/10.1137/1.9781611974782.98 Citováno 2019-06-15
- ^ Driscoll, James R .; Sarnak, Neil; Kráječ, Daniel D.; Tarjan, Robert E. (1989), „Zajištění trvalé struktury datových struktur“, Journal of Computer and System Sciences, 38 (1): 86–124, doi:10.1016/0022-0000(89)90034-2, PAN 0990051.
- ^ Eppstein, David; Galil, Zvi; Italiano, Giuseppe F.; Nissenzweig, Amnon (1997), „Sparsifikace - technika pro zrychlení algoritmů dynamického grafu“, Deník ACM, 44 (5): 669–696, doi:10.1145/265910.265914, PAN 1492341.
- ^ Katriel, Irit; Bodlaender, Hans L. (2006), „Online topologické objednávání“, Transakce ACM na algoritmech, 2 (3): 364–379, CiteSeerX 10.1.1.78.7933, doi:10.1145/1159892.1159896, PAN 2253786.
- ^ Aumann, Yonatan; Bender, Michael A. (1996), „Datové struktury odolné proti chybám“, Sborník z 37. výročního symposia o základech informatiky (FOCS 1996), str. 580–589, doi:10.1109 / SFCS.1996.548517, ISBN 978-0-8186-7594-2.
- ^ Itai, Alon; Konheim, Alan; Rodeh, Michael (1981), „Řídká tabulka implementace prioritních front“, Automaty, jazyky a programování: Eighth Colloquium Acre (Akko), Izrael 13. – 17. Července 1981, Přednášky v informatice, 115, str. 417–431, doi:10.1007/3-540-10843-2_34, ISBN 978-3-540-10843-6.
- ^ Willard, Dan E. (1981), Vkládání a mazání záznamů v blokovaných sekvenčních souborech, Technická zpráva TM81-45193-5, Bell Laboratories.
- ^ Willard, Dan E. (1982), "Údržba hustých sekvenčních souborů v dynamickém prostředí (Extended Abstract)", Sborník příspěvků ze 14. sympozia ACM o teorii výpočtu (STOC '82), New York, NY, USA: ACM, s. 114–121, doi:10.1145/800070.802183, ISBN 978-0897910705.
- ^ Willard, Dan E. (1986), „Dobré nejhorší algoritmy pro vkládání a mazání záznamů v hustých sekvenčních souborech“, Sborník mezinárodní konference ACM SIGMOD z roku 1986 o správě dat (SIGMOD '86), Záznam SIGMOD 15 (2), New York, NY, USA: ACM, s. 251–260, doi:10.1145/16894.16879, ISBN 978-0897911917.
- ^ Willard, Dan E. (1992), „Algoritmus řízení hustoty pro provádění vkládání a mazání v sekvenčně seřazeném souboru v dobrém nejhorším případě“, Informace a výpočet, 97 (2): 150–204, doi:10.1016 / 0890-5401 (92) 90034-D.
- ^ Bender, Michael A .; Demaine, Erik D.; Farach-Colton, Martin (2005), "Cache-zapomínající B-stromy" (PDF), SIAM Journal on Computing, 35 (2): 341–358, doi:10.1137 / S0097539701389956, PAN 2191447.
- ^ Franceschini, Gianni; Geffert, Viliam (2005), „Třídění na místě s O (n logn) srovnání a O (n) tahy ", Deník ACM, 52 (4): 515–537, arXiv:cs / 0305005, doi:10.1145/1082036.1082037, PAN 2164627.
- ^ Dietz, Paul F .; Zhang, Ju (1990), „Dolní meze pro označení monotónního seznamu“, SWAT 90 (Bergen, 1990), Přednášky v informatice, 447, Berlín: Springer, s. 173–180, doi:10.1007/3-540-52846-6_87, ISBN 978-3-540-52846-3, PAN 1076025.
- ^ Dietz, Paul F .; Seiferas, Joel I .; Zhang, Ju (1994), „Pevná dolní hranice pro on-line označování monotónního seznamu“, Teorie algoritmů - SWAT '94 (Aarhus, 1994), Přednášky v informatice, 824, Berlín: Springer, s. 131–142, doi:10.1007/3-540-58218-5_12, ISBN 978-3-540-58218-2, PAN 1315312.
externí odkazy
- Dva zjednodušené algoritmy pro udržování pořadí v seznamu. - Tento dokument představuje datovou strukturu označování seznamů s amortizovaným výkonem, který explicitně neukládá strom. Uvedená analýza je pro podobnou datovou strukturu jednodušší než analýza (Dietz a Sleator, 1987).
- Otevřené datové struktury - Kapitola 8 - Stromy obětních beránků, Pat Morin