Este O (logn) întotdeauna un copac?

voturi
6

Vedem întotdeauna operații pe un arbore (binar de căutare) a O (logn) cel mai rău caz, timpul de funcționare din cauza înălțimii arborelui este LOGN. Mă întreb dacă ni se spune că un algoritm are timp de funcționare în funcție de logn, de exemplu, m + nlogn, putem concluziona că trebuie să implice un arbore (augmented)?

EDIT: Datorită comentariile tale, mi dau seama acum diviza-și cuceri arbore binar sunt atât de asemănătoare vizual / conceptual. Nu am avut niciodată făcut o legătură între cele două. Dar mă gândesc la un caz în care O (logn) nu este o divide cuceri algo care implică un copac care nu are nici o proprietate a unui BST / AVL / rosu-negru copac.

Asta e disjuncte set structura de date cu operatiuni / Union Find, al cărui timp de rulare este O (N + MlogN), cu N fiind # de elemente și M numărul de operațiuni Find.

Te rog lasă-mă să știu dacă îmi lipsește sth, dar nu pot vedea modul în care divide-cuceri intră în joc aici. Tocmai am vedea în acest (set disjuncte), caz că are un copac cu nici o proprietate BST și un timp de rulare fiind o funcție de LOGN. Deci, întrebarea mea este de ce / de ce nu pot face o generalizare de la acest caz.

Întrebat 22/02/2010 la 05:25
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
7

Nu, puteți , de asemenea , binar căuta o matrice de sortat (de exemplu). Dar nu iau cuvântul meu pentru asta http://en.wikipedia.org/wiki/Binary_search_algorithm

Publicat 22/02/2010 la 05:26
sursa de către utilizator

voturi
3

Ca un exemplu contor:

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

Timpul de rulare este O (log (n)), dar nici un copac aici!

Publicat 22/02/2010 la 05:28
sursa de către utilizator

voturi
0

Algoritmi iau mult timp logaritmic sunt de obicei găsite în operațiunile de pe arbori binari.

Exemple de O (logn):

  • Găsirea unui element într-o matrice sortat cu o căutare binară sau un arbore de căutare echilibrat.

  • Uita-te la o valoare într-o matrice de intrare sortate de împărțire în două.

Publicat 22/02/2010 la 05:40
sursa de către utilizator

voturi
7

Ceea ce trebuie este exact invers. O(lg N)înseamnă , în general , un fel de divide și cuceri algoritm, iar un mod comun de a implementa divide și cuceri este un arbore binar. In timp ce copacii binare sunt un subset substanțial al tuturor algoritmilor divide-and-cuceri, sunt un subset oricum.

În unele cazuri, puteți transforma alte divide și cucerește algoritmi destul de direct în arbori binari ( de exemplu , comentariile pe un alt răspuns au făcut deja o încercare susținând o căutare binară este similară). Doar pentru un alt exemplu evident, cu toate acestea, un copac multidirecțional ( de exemplu , un B-arbore, B + copac sau B * copac), în timp ce în mod clar un copac este la fel de clar nu un arbore binar.

Din nou, dacă doriți să destul de mult, vă puteți întinde punctul în care un copac multidirecțional poate fi reprezentat ca un fel de o versiune deformata a unui arbore binar. Dacă doriți, vă puteți întinde, probabil, toate excepțiile de la punctul de a spune că toate acestea sunt (cel puțin ceva de genul) arbori binari. Cel puțin pentru mine, cu toate acestea, tot ceea ce face este de a face „arbore binar“, sinonim cu „divide și cucerește“. Cu alte cuvinte, tot ceea ce este realiza urzirea vocabularul și, în esență, obliterantă un termen care este atât de distincte și utile.

Publicat 22/02/2010 la 06:45
sursa de către utilizator

voturi
2

Răspunsul este nu. Căutarea binară a unei matrice este sortat O(log(n)).

Publicat 22/02/2010 la 06:48
sursa de către utilizator

voturi
0

Ca O (log (n)) este doar un superior legat , de asemenea , toate O (1) algoritmi ca function (a, b) return a+b;satisfac condiția.

Dar trebuie să fie de acord toate Theta (log (n)) algoritmi arate cam cum ar fi algoritmi de copac sau cel puțin poate fi captată într-un copac.

Publicat 22/02/2010 la 07:26
sursa de către utilizator

voturi
0

Răspuns scurt:

Doar pentru că un algoritm are log (n), ca parte a analizei sale nu înseamnă că un copac este implicat. De exemplu, următorul text este un algoritm foarte simplu, care esteO(log(n)

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

După cum puteți vedea, nici un copac a fost implicat. John, oferă de asemenea un bun exemplu cu privire la modul de căutare binare se poate face pe o matrice de sortat. Amândoi aceștia iau O (log (n)) timp, și există alte exemple de cod care ar putea fi create sau se face referire. Deci, nu fac presupuneri bazate pe complexitatea timp asimptotică, uita-te la codul de a ști sigur.

Mai multe pe copaci:

Doar pentru că un algoritm implică „copaci“ nu implică O(logn)nici. Trebuie să cunoașteți tipul de copac și modul în care operațiunea afectează copac.

Cateva exemple:

  • Exemplul 1)

Introducerea sau căutarea următorul copac dezechilibrată ar fi O(n).

introduceți descrierea imaginii aici

  • Exemplul 2)

Introducerea sau caută următoarele copaci echilibrate ar atât de O(log(n)).

Echilibrat arbore binar:

introduceți descrierea imaginii aici

Arbore echilibrat de Gradul 3:

introduceți descrierea imaginii aici

Comentarii suplimentare

În cazul în care copacii pe care îl utilizați nu au o modalitate de a „echilibru“ decât există o bună șansă că operațiunile vor fi O(n)nu de timp O(logn). Dacă utilizați copaci , care sunt auto - echilibrare, atunci inserțiile în mod normal , să ia mai mult timp, deoarece echilibrarea arborilor au loc în mod normal , în timpul fazei de inserție.

Publicat 27/04/2016 la 00:55
sursa de către utilizator

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