Er O (LOGN) alltid et tre?

stemmer
6

Vi ser alltid operasjoner på en (binær søk) treet har O (LOGN) worst case kjøretiden på grunn av trehøyden er løgn. Jeg lurer på om vi blir fortalt at en algoritme har kjøretid som en funksjon av LOGN, f.eks m + nlogn, kan vi konkludere med at det må innebære en (utvidet) treet?

EDIT: Takk til dine kommentarer, jeg innser nå dele-erobring og binærtreet er så like visuelt / konseptuelt. Jeg hadde aldri gjort en forbindelse mellom de to. Men jeg tenker på en sak der O (LOGN) er ikke en del-erobring algo som innebærer et tre som ikke har noen eiendom av BST / AVL / rød-svart tre.

Det er usammenhengende datastrukturen med Finn / Union operasjoner, hvis driftstiden er O (N + MlogN), med N er # av elementer og M antall Finn operasjoner.

Gi meg beskjed hvis jeg mangler sth, men jeg kan ikke se hvordan skillet-erobring kommer inn i bildet her. Jeg ser i denne (disjunkte sett) slik at den har et tre uten BST eiendommen og en driftstid være en funksjon av løgn. Så mitt spørsmål er om hvorfor / hvorfor ikke kan jeg lage en generalisering av denne saken.

Publisert på 22/02/2010 klokken 04:25
kilden bruker
På andre språk...                            


7 svar

stemmer
7

Nei, du kan også binære søke en sortert array (for eksempel). Men ikke ta mitt ord for det http://en.wikipedia.org/wiki/Binary_search_algorithm

Svarte 22/02/2010 kl. 04:26
kilden bruker

stemmer
3

Som en teller eksempel:

given array 'a' with length 'n'
y = 0
for x = 0 to log(length(a))
    y = y + 1
return y

Den strøm som er O (log (n)), men ingen data her!

Svarte 22/02/2010 kl. 04:28
kilden bruker

stemmer
0

Algoritmer tar logaritmisk tid er ofte funnet i operasjoner på binære trær.

Eksempler på O (LOGN):

  • Finne et element i en sortert array med et binært søk eller et balansert søketre.

  • Slå opp en verdi i en sortert innspill utvalg av halverings.

Svarte 22/02/2010 kl. 04:40
kilden bruker

stemmer
7

Hva du har er akkurat bakover. O(lg N)betyr generelt en slags dele- og overvinne algoritme, og en vanlig måte å implementere dele- og overvinne er et binært tre. Mens binære trær er en betydelig delsett av alle del-og-hersk-algoritmer, det er en undergruppe uansett.

I noen tilfeller kan du forvandle annen splitt og hersk-algoritmer ganske direkte inn binære trær (f.eks kommentarer på et annet svar har allerede gjort et forsøk på å hevde en binær søk er lignende). Bare for en annen opplagt eksempel, men et flerveis tre (f.eks en B-tree, B + tre eller B * treet), mens helt klart et tre er like klart ikke et binært tre.

Igjen, hvis du ønsker å sterkt nok, kan du strekke det punktet at en multiway treet kan representeres som en slags forvridd versjon av et binært tre. Hvis du vil, kan du sannsynligvis strekke alle unntak poenget med å si at alle av dem er (minst noe sånt) binære trær. Minst for meg, men det er alt som gjør gjøre "binært tre" synonymt med "splitt og hersk". Med andre ord, alt du oppnå fordreining vokabular og i hovedsak utslette et begrep som er både tydelig og nyttig.

Svarte 22/02/2010 kl. 05:45
kilden bruker

stemmer
2

Svaret er nei. Binary jakt etter en sortert matrise er O(log(n)).

Svarte 22/02/2010 kl. 05:48
kilden bruker

stemmer
0

Som O (log (n)) er bare en øvre grense også alle O (1) algoritmer som function (a, b) return a+b;tilfredsstiller betingelsen.

Men jeg må være enig alle Theta (log (n)) algoritmer ganske ser ut som tre algoritmer eller i det minste kan være abstrahert til et tre.

Svarte 22/02/2010 kl. 06:26
kilden bruker

stemmer
0

Kort svar:

Nettopp fordi en algoritme har log (n) som en del av analysen betyr ikke at et tre er involvert. For eksempel, er det følgende en meget enkel algoritme som erO(log(n)

for(int i = 1; i < n; i = i * 2)
  print "hello";

Som du kan se, ble det ikke tre involverte. John, gir også et godt eksempel på hvordan binære søk kan gjøres på en sortert array. Disse begge ta O (log (n)) tid, og det er av andre kode eksempler som kan skapes eller refereres. Så ikke gjør forutsetninger basert på den asymptotiske tidskompleksitet, se på koden for å vite sikkert.

Mer om trær:

Bare fordi en algoritme innebærer "trær" betyr ikke O(logn)heller. Du må vite treet typen og hvordan driften påvirker treet.

Noen eksempler:

  • Eksempel 1)

Sette inn eller søke i følgende ubalansert treet ville være O(n).

skriv bildebeskrivelse her

  • Eksempel 2)

Sette inn eller søke følgende balanserte trær ville begge av O(log(n)).

Balansert Binary Tre:

skriv bildebeskrivelse her

Balansert Tree of Degree 3:

skriv bildebeskrivelse her

Ytterligere kommentarer

Hvis trærne du bruker ikke har en måte å "balanse" enn det er en god sjanse for at driften vil være O(n)tid ikke O(logn). Hvis du bruker trær som er selvbalanserende, så innsatser normalt ta mer tid, som balansering av trærne normalt skje i løpet av innsatsen fasen.

Svarte 27/04/2016 kl. 00:55
kilden bruker

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