Hvordan finne indeksen for et element i sortert sett?

stemmer
4

Jeg kan finne et element i en sortert sett (støttet av BST) i O(logN). Nå vil jeg gjerne at indeksen av dette elementet. For eksempel, i sett {1, 3, 4, 10}, indeksen for 4IS 2og indeksen 1er 0.

Selvfølgelig, jeg kan bare iterere over settet, så det trivielle løsningen er O(N). Kan vi gjøre det bedre å bruke sannsynligvis BST egenskaper og / eller hjelpedatastrukturer?

Publisert på 09/05/2011 klokken 10:46
kilden bruker
På andre språk...                            


1 svar

stemmer
3

Med en enkel BST der rekkefølgen på innsetting av elementer i tilfeldig, har du måten å finne ut hvor mange elementer akkurat er mindre enn et gitt element uten å gå treet.

Hvis du hadde et balansert tre, for eksempel en rød-svart tre, så du kan i det minste sette en øvre og nedre grense på indeksen på grunn av grensene på høyden av treet. Hvis rekkefølgen på innsetting av elementer til en BST er ikke tilfeldig da igjen, kan du si noe om treet høyden uten å gå den og gi noe anslag over den omtrentlige indeksen.

Som for hjelpedatastrukturer, kan du opprette en tilleggsordliste som kart elementer til deres indeks. Men å bygge indeksen tar O (N) og indeksen blir flau når du legger til nye elementer til BST, så dette bare fungerer godt for BSTs med sjeldne oppdateringer.

En annen løsning er å forlenge BST noder med to egenskaper: indeks og teller. Indeksen sier hvor mange elementer mindre enn den i denne noden er i treet. Tellingen sier hvor mange elementer var i BST når du sist oppdaterte at node-indeksen. Med relativt enkle endringer i innsetting, sletting og søk på BST, som ikke påvirker de grunnleggende operasjoner utover en konstant tid, og kan få elementet indeks direkte i O (1).

I hovedsak, som du setter inn en ny node, for hver node du passerer på veien nedover, hvis det nye elementet er mindre (dvs. neste steg er til venstre barn), øke både indeks og telling av den noden. Når du finner det nye elementet plass, du gir det et tall basert på det overordnede, og en indeks basert på det overordnede og venstre barn. Dette etterlater elementene større enn den nye med en feil indeks, men du kan enkelt oppdatere at når du søker etter et element ved å henvise til greven verdien av den overordnede - forskjellen mellom telling av foreldre og barnet forteller deg hvordan mange innsettinger av mindre elementer skjedd siden sist du oppdaterte barnets indeks, slik at du bare legge til at forskjellen i indeksen.

Svarte 09/05/2011 kl. 12:13
kilden bruker

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