Dotaz na režim rozsahu - Range mode query
tento článek může být pro většinu čtenářů příliš technická na to, aby je pochopili. Prosím pomozte to vylepšit na aby to bylo srozumitelné pro neodborníky, aniž by byly odstraněny technické podrobnosti. (Dubna 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) |
v datové struktury, problém s režimem rozsahu žádá o vybudování datové struktury na některých vstupních datech, aby efektivně odpovídal na dotazy žádající o režimu jakékoli po sobě jdoucí podmnožiny vstupu.
Problémové prohlášení
Vzhledem k řadě , chceme odpovědět na dotazy formuláře , kde . Způsob libovolného pole je prvek taková, že frekvence je větší nebo roven frekvenci . Například pokud , pak protože se vyskytuje třikrát, zatímco všechny ostatní hodnoty se vyskytují méněkrát. V tomto problému se dotazy ptají na režim dílčích polí formuláře .
Věta 1
Nechat a být kdokoli multisety. Li je režim a , pak je režim .
Důkaz
Nechat být módem a být jeho frekvence v . Předpokládejme to není režim . Existuje tedy prvek s frekvencí to je režim . Od té doby je režim a to , pak . Tím pádem, by měl být režim což je rozpor.
Výsledek
Prostor | Čas dotazu | Omezení | Zdroj |
---|---|---|---|
[1] | |||
je velikost slova | [1] | ||
[2] | |||
[2] |
Dolní mez
Libovolná datová struktura pomocí buňky bity každý potřebuje čas odpovědět na dotaz v režimu rozsahu.[3]
To kontrastuje s jinými problémy s dotazem na rozsah, jako je například dotaz na minimální rozsah, který má řešení nabízející čas dotazu na konstantní čas a lineární prostor. To je způsobeno tvrdostí problému režimu, protože i když režim známe a režim , neexistuje jednoduchý způsob výpočtu režimu . Libovolný prvek nebo může být režim. Například pokud a jeho frekvence je , a a jeho frekvence je také , mohl by tam být prvek s frekvencí v a frekvence v . , ale jeho frekvence v je větší než frekvence a , který dělá lepší kandidát na než nebo .
Struktura dat v lineárním prostoru s časem druhé odmocniny
Tato metoda od Chan et al.[1] používá prostor a čas dotazu. Nastavením , dostaneme a hranice prostoru a času dotazu.
Předběžné zpracování
Nechat být pole a být pole, které obsahuje odlišné hodnoty A, kde je počet odlišných prvků. Definujeme být pole takové, že pro každého , obsahuje hodnost (pozici) v . Pole lze vytvořit lineárním skenováním .
Pole jsou také vytvořeny tak, aby pro každého , . Poté vytvoříme pole , tak, že pro všechny , obsahuje hodnost v . Opět lineární sken stačí k vytvoření polí a .
Nyní je možné odpovědět na dotazy ve formuláři „je frekvence v alespoň "v konstantním čase kontrolou, zda .
Pole je rozděleno na B bloky , každý o velikosti . Tedy blok překlenuje . Režim a frekvence každého bloku nebo sady po sobě jdoucích bloků budou předem vypočítány ve dvou tabulkách a . je režim nebo ekvivalentně režim , a ukládá odpovídající frekvenci. Tyto dvě tabulky lze uložit do prostoru a lze je vyplnit skenováním krát, výpočet řady pokaždé s následujícím algoritmem:
algoritmus computeS_Sprime je vstup: Pole B = [0: n - 1], pole D = [0: Delta - 1], celé číslo s výstup: Tabulky S a Sprime nechat S ← Tabulka (0: n - 1, 0: n - 1) let Sprime ← Tabulka (0: n - 1, 0: n - 1) let první Výskyt ← Pole (0: Delta - 1) pro všechny i v {0, ..., Delta - 1} dělat firstOccurence [i] ← -1 konec pro pro i ← 0: s - 1 dělat nechat j ← i × t nechat C ← 0 let fc ← 0 let noBlock ← nechám block_start ← j nech block_end ← min {(i + 1) × t - 1, n - 1} zatímco jdělat -li firstOccurence [B [j]] = -1 pak firstOccurence [B [j]] ← j skončit, pokud -li atLeastQInstances (firstOccurence [B [j]], block_end, fc + 1) pak c ← B [j] fc ← fc + 1 skončit, pokud -li j = block_end pak S [i * s + noBlock] ← c Sprime [i × s + noBlock] ← fc noBlock ← noBlock + 1 block_end ← min {block_end + t, n - 1} skončit, pokud skončit chvíli pro všechny j v {0, ..., Delta - 1} dělat firstOccurence [j] ← -1 konec pro konec pro
Dotaz
Definujeme algoritmus dotazu přes pole . To lze přeložit jako odpověď , protože pro všechny , je režim pro kdyby a jen kdyby je režim pro . Můžeme převést odpověď na na odpověď pro v konstantním čase při pohledu dovnitř nebo na odpovídajícím indexu.
Byl zadán dotaz , je dotaz rozdělen do tří částí: prefix, span a přípona. Nechat a . Ty označují indexy prvního a posledního bloku, které jsou zcela obsaženy v . Rozsah těchto bloků se nazývá rozpětí. Předpona je pak (sada indexů před rozpětím) a přípona je (sada indexů po rozpětí). Předpona, přípona nebo rozpětí mohou být prázdné, druhé je if .
Pro rozpětí režim je již uložen v . Nechat být frekvence režimu, ve kterém je uložen . Pokud je rozpětí prázdné, nechte . Připomeňme, že podle věty 1 je režim je buď prvek předpony, rozpětí nebo přípony. Přes každý prvek v předponě a v příponě se provádí lineární sken, aby se zkontrolovalo, zda je jeho frekvence větší než aktuální kandidát , v jakém případě a jsou aktualizovány na novou hodnotu. Na konci skenování obsahuje režim a jeho frekvence.
Postup skenování
Postup je podobný pro předponu i příponu, takže stačí spustit tento postup pro obě:
Nechat být index aktuálního prvku. Existují tři případy:
- Li , pak byl přítomen v a jeho frekvence již byla spočítána. Přechod na další prvek.
- Jinak zkontrolujte, zda je frekvence v je alespoň (To lze provést v konstantním čase, protože je to ekvivalent kontroly ).
- Pokud tomu tak není, přejděte na další prvek.
- Pokud ano, pak vypočítat skutečnou frekvenci z v lineárním skenováním (počínaje indexem ) nebo binární vyhledávání v . Soubor a .
Toto lineární skenování (kromě frekvenčních výpočtů) je omezeno velikostí bloku , protože předpona ani přípona nesmí být větší než . Další analýza lineárních skenů provedených pro frekvenční výpočty ukazuje, že je také omezena velikostí bloku.[1] Čas dotazu tedy je .
Subkvadratická datová struktura prostoru s konstantním časem dotazu
Tuto metodu [2] používá prostor pro dotaz v konstantním čase. Můžeme pozorovat, že pokud je požadována konstantní doba dotazu, je to lepší řešení než řešení navržené Chanem a kol.,[1] protože druhý dává prostor pro konstantní čas dotazu, pokud .
Předběžné zpracování
Nechat být pole. Předzpracování se provádí ve třech krocích:
- Rozdělte pole v bloky , kde je velikost každého bloku . Postavte stůl velikosti kde je režim . Celkový prostor pro tento krok je
- Pro jakýkoli dotaz , nechť být blok, který obsahuje a být blok, který obsahuje . Nechť rozpětí je sada bloků zcela obsažených v . Způsob bloku lze načíst z . Podle věty 1 může být režim buď prvkem předpony (indexy před začátkem rozpětí), prvek přípony (indexy po skončení rozpětí), nebo . Velikost předpony plus velikost přípony je ohraničena , tedy poloha režimu je uložena jako celé číslo v rozsahu od na , kde označuje pozici v předponě / příponě a označuje, že režim je režimem rozsahu. Existují možné dotazy týkající se bloků a , takže tyto hodnoty jsou uloženy v tabulce velikostí . Kromě toho existují takové tabulky, takže celkový prostor potřebný pro tento krok je . Pro přístup k těmto tabulkám je kromě režimu v tabulce přidán ukazatel pro každou dvojici bloků.
- Zpracování dotazů kde a jsou ve stejném bloku, všechna taková řešení jsou předpočítána. Existují z nich jsou uloženy v trojrozměrné tabulce této velikosti.
Celkový prostor využívaný touto datovou strukturou je , což se snižuje na pokud vezmeme .
Dotaz
Byl zadán dotaz , zkontrolujte, zda je zcela obsažen uvnitř bloku, v takovém případě je odpověď uložena v tabulce . Pokud dotaz zahrnuje přesně jeden nebo více bloků, odpověď je uvedena v tabulce . Jinak použijte ukazatel uložený v tabulce v poloze , kde jsou indexy bloků, které obsahují a , najít stůl který obsahuje polohy režimu pro tyto bloky a pomocí této polohy vyhledejte režim v . To lze provést v konstantním čase.
Reference
- ^ A b C d E Chan, Timothy M .; Durocher, Stephane; Larsen, Kasper Green; Morrison, Jason; Wilkinson, Bryan T. (2013). „Datové struktury v lineárním prostoru pro dotaz v režimu rozsahu v polích“ (PDF). Teorie výpočetních systémů. Springer: 1–23.
- ^ A b C Krizanc, Danny; Morin, Pat; Smid, Michiel H. M. (2003). "Režim rozsahu a střední rozsah dotazů na seznamy a stromy" (PDF). ISAAC: 517–526.
- ^ Greve, M; Jørgensen, A .; Larsen, K .; Truelsen, J. (2010). Msgstr "Dolní hranice a aproximace sondy buňky pro režim dosahu". Automaty, jazyky a programování: 605–616.