Hvorfor Binary Søk Trees?

stemmer
6

Jeg leste binært søketre og tenkte at hvorfor trenger vi BST i det hele tatt? Alle de tingene så vidt jeg vet kan også være oppnå ved hjelp av enkle sorterte arrays. For eksempel - For å bygge en BST med n elementer, krever vi n*O(log n)tid dvs. O(nlog n)og oppslag tid er O(log n). Men denne tingen kan også oppnå ved hjelp array. Vi kan ha en sortert array (krever O(nlog n)tid), og oppslag tid som også O(log n)vil si binære søk algo. Så hvorfor trenger vi en annen datastruktur i det hele tatt? Er det noen annen bruk / anvendelse av BST som gjør dem så spesiell?

--Ravi

Publisert på 14/10/2010 klokken 15:28
kilden bruker
På andre språk...                            


4 svar

stemmer
4

Hva sortert innsetting tid?

Svarte 14/10/2010 kl. 15:30
kilden bruker

stemmer
1

I grafikkprogrammering hvis du har utvidet objekt (dvs. som representerer et intervall på hver dimensjon og ikke bare et punkt) kan du legge dem til den minste grad av et binært tre (vanligvis en octree) hvor de passer inn i sin helhet.

Og hvis du ikke forhånds beregne treet / sortedlist O (n) tilfeldig innsetting tid i en liste kan være uoverkommelig treg. Innsetting tid i et tre på den annen side er bare O (log (n)).

Svarte 14/10/2010 kl. 15:36
kilden bruker

stemmer
10

Arrays er stor hvis du snakker om å skrive en gang, lest mange ganger type interaksjoner. Det er når du kommer ned til å sette inn, bytte, og sletting der BST virkelig begynner å skinne i forhold til en matrise. Siden de er node basert, i stedet for på grunnlag av en sammenhengende del av hukommelse, kostnaden for bevegelse av et element, enten inn i oppsamlings eller ut av samlingen er rask samtidig opprettholde den sorterte arten av samlingen.

Tenk på det som du ville forskjellen i innføring mellom lenkede lister versus arrays. Dette er en overforenkling, men det fremhever en del av fordelen jeg har nevnt ovenfor.

Svarte 14/10/2010 kl. 15:53
kilden bruker

stemmer
7

Tenk deg at du har en matrise med en million elementer.

Du ønsker å sette inn et element på stedet fem.

Så du setter på slutten av tabellen, og deretter sortere.

La oss si at matrisen er fullt; det er O (nlog n), som er 1.000.000 * 6 = 6.000.000 operasjoner.

Tenk deg at du har et balansert tre.

Det er O (log n), pluss litt for innregulering = 6 + litt, kaller det 10 operasjoner.

Så, du har nettopp tilbrakt 6.000.000 ops sortering array. Deretter vil finne dette elementet. Hva gjør du? binære søk - O (log n) - som er nøyaktig det samme som hva du skal gjøre når du søker i treet!

Nå forestille du ønsker å tildele -another- element.

Array er full! hva gjør du? re-allokere matrise med n ekstra elementer og memcpy partiet? du virkelig ønsker å memcpy 4Mbyter?

I et tre, du bare legge et annet element ...

Svarte 16/10/2010 kl. 09:14
kilden bruker

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