Hogyan lehet megtalálni az index egy elem rendezett halmaz?

szavazat
4

Találok egy elem egy rendezett halmaz (fedezett BST) a O(logN). Most szeretnék az index ennek az elemnek. Például, a készlet {1, 3, 4, 10}, az index a 4IS 2és az index a 1van 0.

Nyilvánvaló, hogy én is csak végighaladni a készlet, így a triviális megoldás O(N). Tehetünk jobb felhasználásával valószínűleg BST tulajdonságok és / vagy kiegészítő adatstruktúrák?

A kérdést 09/05/2011 11:46
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
3

Egy egyszerű BST ahol a beszúrás sorrendjének elemek véletlenszerű, van módja határozza meg, hogy hány elem pontosan kisebbek az adott elem nélkül séta a fa.

Ha lenne egy kiegyensúlyozott fa, mint a piros-fekete fa, akkor is legalább fel egy alsó és egy felső korlátot az index miatt határokat a fa magasságát. Ha a beszúrás sorrendjének elemek a BST nem véletlenszerű, akkor megint, akkor is mondani valamit a fa magassága nélkül sétál, és ad néhány becslést közelítő index.

Ami a kiegészítő adatok szerkezetek, hozz létre egy kiegészítő szótárt, amely leképezi elemek az index. Azonban az épület, hogy index O (N) és az index is megromlik, amikor új elemeket a BST, így ez csak akkor működik jól BSTs a gyakori frissítésekre.

Egy másik megoldás az, hogy kiterjesszék a BST csomópontok két tulajdonsággal: index és számolni. Az index azt mondja, hogy hány elem kisebb, mint az ebben az csomópont a fán. A gróf azt mondja, hogy hány elem volt a BST amikor utoljára frissítve a csomópont indexében. A viszonylag egyszerű változás beszúrás, törlés és keresés az BST, amelyek nem érintik azokat az alapvető műveleteket meghaladó állandó idő, és kap az elem indexe közvetlenül O (1).

Lényege, hogy beszúr egy új csomópont, minden csomópont adja át a saját útját lefelé, ha az új elem kisebb (azaz a következő lépés az, hogy a bal gyerek), növeljük Mindkét index és száma a csomópont. Ha úgy találja, az új elem helyét, akkor adja meg a gróf alapján a szülő, és az index alapján a szülő és a bal gyerek. Így megmarad az elemek nagyobb, mint a másikat, amelynek rossz index, de akkor könnyen frissítheti, hogy ha keresni egy elem hivatkozva a számlálási érték a szülő - a különbség a gróf a szülő és a gyermek megmondja, hogy milyen sok betoldások kisebb elemek történt, mióta utoljára frissítve a gyermek index, így egyszerűen hozzá, hogy a különbség, hogy az index.

Válaszolt 09/05/2011 13:13
a forrás felhasználó

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