Is O (logn) altijd een boom?

stemmen
6

We zien altijd operaties op een (binary search) boom is O (logn) ergste geval loopt tijd als gevolg van de boom hoogte LOGN. Ik vraag me af of we krijgen te horen dat een algoritme tijd is uitgevoerd als een functie van logn, bijvoorbeeld m + nlogn, kunnen we concluderen dat moet een (overmatig) boom in?

EDIT: Dankzij uw commentaar, ik besef nu verdeel heers en binaire boom zijn zo op elkaar lijken visueel / conceptueel. Ik had nog nooit een verbinding tussen de twee gemaakt. Maar ik denk dat van een geval waarin O (logn) is geen verdeel-heers algo die een boom, die geen eigendom zijn van een BST / AVL / rood-zwarte boom heeft zich meebrengt.

Dat is de disjuncte set datastructuur met Find operaties / Union, waarvan de looptijd is O (N + MlogN), waarbij N de # van elementen en M het aantal Find operaties.

Laat het me weten als ik mis sth, maar ik kan niet zien hoe verdeel-heers in het spel komt hier. Ik zie in dit (disjuncte set) geval dat het een boom zonder BST pand en een looptijd een functie is van logn. Dus mijn vraag is waarom / waarom niet kan ik een generalisatie te maken uit deze zaak.

De vraag is gesteld op 22/02/2010 om 05:25
bron van user
In andere talen...                            


7 antwoorden

stemmen
7

Nee, je kunt ook binair zoeken een gesorteerde array (bijvoorbeeld). Maar niet mijn woord te geloven http://en.wikipedia.org/wiki/Binary_search_algorithm

antwoordde op 22/02/2010 om 05:26
bron van user

stemmen
3

Als tegenwicht voorbeeld:

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

De looptijd is O (log (n)), maar er is geen boom hier!

antwoordde op 22/02/2010 om 05:28
bron van user

stemmen
0

Algoritmes nemen logaritmische worden vaak aangetroffen in operaties op binaire bomen.

Voorbeelden van O (logn):

  • Het vinden van een item in een gesorteerde array met een binary search of een evenwichtige zoekboom.

  • Opzoeken van een waarde in een gesorteerd invoerarray door doorsnijding.

antwoordde op 22/02/2010 om 05:40
bron van user

stemmen
7

Wat je hebt is precies naar achteren. O(lg N)betekent over het algemeen een soort van verdeel en heers-algoritme, en een veel voorkomende manier van implementatie van verdeel en heers is een binaire boom. Terwijl binaire bomen zijn een aanzienlijk deel van alle verdeel-en-heers algoritmen, het zijn een subset toch.

In sommige gevallen kunt u andere verdeel transformeren en heers algoritmes vrij direct in binaire bomen (oa commentaar op een ander antwoord hebben al een poging tot het claimen van een binary search is vergelijkbaar gemaakt). Gewoon voor een andere voor de hand liggende voorbeeld is echter een multiway boom (bijvoorbeeld een B-tree, B + boom of B * boom), terwijl duidelijk een boom is net zo duidelijk niet een binaire boom.

Nogmaals, als je wilt slecht genoeg is, kunt u het punt dat een multiway boom kan worden voorgesteld als een soort van een verwrongen versie van een binaire boom te rekken. Als u wilt, kunt u waarschijnlijk rekken alle uitzonderingen op het punt om te zeggen dat ze allemaal (op zijn minst iets dergelijks) binaire bomen. Althans voor mij, maar dat alles doet is het maken van "binary tree" synoniem met "verdeel en heers". Met andere woorden, alles wat je bereiken is kromtrekken van de woordenschat en in wezen vernietiging van een term die zowel onderscheiden en nuttig.

antwoordde op 22/02/2010 om 06:45
bron van user

stemmen
2

Antwoord is nee. Binary zoek naar een gesorteerde array is O(log(n)).

antwoordde op 22/02/2010 om 06:48
bron van user

stemmen
0

Zoals O (log (n)) slechts een bovenste tevens gehouden alle O (1) algoritmen graag function (a, b) return a+b;aan de voorwaarde.

Maar ik ben het ermee eens alle Theta (log (n)) algoritmen beetje uitzien als boom algoritmes of op zijn minst kan worden onttrokken aan een boom.

antwoordde op 22/02/2010 om 07:26
bron van user

stemmen
0

Kort antwoord:

Alleen maar omdat een algoritme heeft log (n) als onderdeel van haar analyse betekent niet dat een boom is betrokken. Bijvoorbeeld, het volgende is een zeer eenvoudig algoritme datO(log(n)

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

Zoals u kunt zien, is er geen boom betrokken. John, geeft ook een goed voorbeeld van hoe binary search kan worden gedaan op een gesorteerde array. Deze beide nemen O (log (n)) tijd, en er zijn andere code voorbeelden die kunnen worden gemaakt of waarnaar wordt verwezen. Dus niet veronderstellingen gebaseerd op de asymptotische tijd complexiteit te maken, kijk naar de code om zeker te weten.

Meer op Bomen:

Alleen maar omdat een algoritme houdt in dat "bomen" betekent niet dat O(logn)ook niet. Je moet het type boom en hoe de werking van de boom van invloed te leren kennen.

Een paar voorbeelden:

  • Voorbeeld 1)

Invoegen of het doorzoeken van de volgende onevenwichtige boom zou zijn O(n).

voer image beschrijving hier

  • Voorbeeld 2)

Invoegen of zoek de volgende evenwichtige bomen zou zowel O(log(n)).

Balanced Binary Tree:

voer image beschrijving hier

Balanced Tree of Graad 3:

voer image beschrijving hier

aanvullende opmerkingen

Als de bomen u niet beschikt over een manier om de "balance" dan is er een goede kans dat uw activiteiten zal zijn O(n)tijd niet O(logn). Als je bomen die zelf balancing gebruiken, inzetstukken dan normaal gesproken meer tijd in beslag nemen, aangezien de afweging van de bomen normaal optreden tijdens het inzetstuk fase.

antwoordde op 27/04/2016 om 00:55
bron van user

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