Jak najít index prvku v tříděném setu?

hlasů
4

Najdu prvek v tříděném sadě (opírající se o BST) v O(logN). Nyní bych rád index tohoto prvku. Například v sadě {1, 3, 4, 10}, index 4IS 2a index 1je 0.

Je zřejmé, že mohu jen opakovat během natáčení, takže triviální řešení O(N). Můžeme to lepší využití pravděpodobně BST vlastnosti a / nebo pomocných datových struktur?

Položena 09/05/2011 v 11:46
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Díky jednoduchému BST, kde je pořadí vkládání prvků v náhodný, máte způsob, jak zjistit, kolik prvky jsou přesně menší než daného prvku, aniž by šel strom.

Pokud byste měli vyvážený strom, jako červeno-černý strom, pak byste mohl aspoň dát dolní a horní mez indexu kvůli hranice na výšku stromu. V případě, že objednávka vložení prvků na BST je znovu non-náhodný, mohl byste něco o výšce stromu říci, aniž by jej chůzi a dát nějaký odhad přibližné indexu.

Pokud jde o pomocné datové struktury, byste mohli vytvořit pomocný překladový slovník, který mapuje prvky k jejich index. Nicméně, stavba, která index trvá O (N) a index se stává stale při přidání nové prvky k BST, tak to funguje jen dobře pro BSTs s občasnými aktualizacemi.

Dalším řešením je rozšířit BST uzly se dvěma vlastnostmi: index a počítat. Index udává, jak mnoho prvků menší než ten v tomto uzlu jsou ve stromu. Počet říká, kolik prvky byly v BST, kdy jste naposledy aktualizován index, který uzlu. S relativně jednoduchými změnami vložení, smazání a vyhledávání na BST, které nemají vliv na ty základní operace nad rámec konstantním čase, a může dostat indexu prvku přímo v O (1).

V podstatě, jak si vložit nový uzel pro každý uzel, který přenést na své cestě dolů, v případě, že nový prvek je menší (tj je dalším krokem k levé dítě), zvýšit i index a počet tomto uzlu. Když najdete místo nového prvku je, co si jen dát hlas na základě jeho rodiče, a index založený na její mateřské společnosti a levé dítě. To ponechává prvky větší než nová jedna s nesprávnou indexu, ale můžete snadno aktualizovat, které, jak si hledat prvek s odkazem na spočítané hodnoty mateřské společnosti - rozdíl mezi počtu rodičem a dítětem řekne, jak mnoho inzerce menších prvků se stalo, protože jste naposledy aktualizován index dítěte, takže stačí přidat tento rozdíl na indexu.

Odpovězeno 09/05/2011 v 13:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more