Nastavit křižovatku věštce - Set intersection oracle
![]() | 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. (Února 2015) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) |
A nastavit křižovatku Oracle (SIO) je datová struktura což představuje kolekci sad a může rychle odpovídat na dotazy, zda nastavit křižovatku dvou daných sad není prázdná.
Vstup do problému je n konečné množiny. Součet velikostí všech sad je N (což také znamená, že existuje nanejvýš N odlišné prvky). SIO by mělo rychle odpovědět na jakýkoli dotaz ve formuláři:
- „Dělá to Si protínají množinu Sk"?
Minimální paměť, maximální doba dotazu
Bez jakéhokoli předběžného zpracování lze na dotaz odpovědět vložením prvků Si do dočasného hash tabulka a poté zkontrolovat každý prvek Sk zda je v hash tabulce. Čas dotazu je .
Maximální paměť, minimální doba dotazu
Alternativně můžeme sady předem zpracovat a vytvořit n-podle-n tabulka, kde jsou již zadány informace o křižovatce. Pak je čas na dotaz , ale požadovaná paměť je .
Kompromis
Definujte „velkou sadu“ jako sadu alespoň s elementy. Je zřejmé, že existují nanejvýš takové sady. Vytvořte tabulku dat průniku mezi každou velkou sadou a každou další velkou sadou. To vyžaduje Paměť. U každé velké sady si navíc ponechejte hashovací tabulku všech jejích prvků. To vyžaduje další Paměť.
Vzhledem ke dvěma sadám existují tři možné případy:
- Obě sady jsou velké. Pak jen včas přečtěte odpověď na křižovatku z tabulky .
- Obě sady jsou malé. Potom vložte prvky jednoho z nich do hash tabulky a zkontrolujte prvky druhého; protože sady jsou malé, je požadovaný čas .
- Jedna sada je velká a jedna sada je malá. Obtočte všechny prvky v malé sadě a zkontrolujte je proti hašovací tabulce velké sady. Požadovaný čas je znovu .
Obecně platí, že pokud definujeme „velkou množinu“ jako množinu s alespoň prvků, pak je počet velké sady maximálně požadovaná paměť je a čas dotazu je .
Redukce na přibližnou vzdálenost věštce
Problém SIO lze snížit na přibližnou hodnotu vzdálenost věštce (DO) problém následujícím způsobem.[1]
- Vytvořte neorientovaný bipartitní graf, kde jedna část obsahuje uzel pro každou z n množiny a druhá část obsahuje uzel pro každou z (maximálně) N prvky obsažené v sadách.
- Mezi sadou a prvkem je hrana, pokud sada obsahuje prvek.
Tento graf má následující vlastnosti:
- Pokud se dvě sady protínají, vzdálenost mezi nimi je 2 (od jedné sady k prvku v průsečíku k druhé sadě).
- Pokud se dvě sady neprotínají, je vzdálenost mezi nimi alespoň 4.
Takže s DO, jehož aproximační faktor je menší než 2, můžeme vyřešit problém SIO.
Předpokládá se, že problém SIO nemá netriviální řešení. Tj. To vyžaduje prostor pro včasné zodpovězení dotazů . Pokud je tato domněnka pravdivá, znamená to, že neexistuje DO s aproximačním faktorem menším než 2 a konstantním časem dotazu.[1]
Reference
- ^ A b Patrascu, M .; Roditty, L. (2010). Vzdálenost věštců za hranicí Thorup – Zwick. 51. výroční sympozium IEEE 2010 o základech informatiky (FOCS). str. 815. doi:10.1109 / FOCS.2010.83. ISBN 978-1-4244-8525-3.