O (logn) vždy strom?

hlasů
6

Vždycky vidíme operace s (binární vyhledávání) stromu je O (logn) v nejhorším případě běží čas, protože výška stromu je logn. Zajímalo by mě, jestli je nám řečeno, že algoritmus, který běží čas jako funkci logn, např m + nlogn, dojdeme k závěru, že musí zahrnovat (rozšířený) strom?

EDIT: Díky svým připomínky, teď si uvědomuji rozdělit panuj a binární strom je tak podobný vizuálně / koncepčně. Nikdy jsem udělal spojení mezi těmito dvěma. Ale myslím, že o případu, kde O (logn) není předěl panuj algo který zahrnuje strom, který nemá vlastnost BST / AVL / červeno-černý strom.

To je disjunktní sada datová struktura s Najít operací / unii, jejíž doba chodu je O (N + MlogN), přičemž N je # prvků a M je počet Najít operací.

Prosím, dejte mi vědět, jestli mi chybí tá, ale nevidím, jak rozdělit panuj přichází do hry zde. Vidím jen v tomto (nesouvislý set) případě, že má strom s žádným majetkem BST a běží prozatím funkcí logn. Takže moje otázka je, proč / proč ne mohu učinit zobecnění z tohoto případu.

Položena 22/02/2010 v 05:25
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
7

No, můžete také binární hledat seřazený pole (například). Ale neberte mé slovo pro to http://en.wikipedia.org/wiki/Binary_search_algorithm

Odpovězeno 22/02/2010 v 05:26
zdroj uživatelem

hlasů
3

Jako příklad čítače:

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

Doba chodu je O (log (n)), ale žádný strom tady!

Odpovězeno 22/02/2010 v 05:28
zdroj uživatelem

hlasů
0

Algoritmy užívající logaritmické doby se běžně nacházejí v operacích na binárních stromů.

Příklady O (logn):

  • Nalezení položky v tříděném poli s binární vyhledávání nebo vyváženou vyhledávacího stromu.

  • Vyhledat hodnotu v seřazené vstupního pole pomocí půlení.

Odpovězeno 22/02/2010 v 05:40
zdroj uživatelem

hlasů
7

Co máte přesně obráceně. O(lg N)obecně znamená nějaký rozděl a panuj, a jeden společný způsob provádění rozděl a panuj je binární strom. Zatímco binární stromy jsou podstatnou podmnožinu všech rozděl a panuj algoritmů je jsou podmnožinou tak jako tak.

V některých případech můžete transformovat další rozděl a panuj poměrně přímo do binárních stromů (např komentáře na jiném odpověď již učinili pokus o uplatnění binární vyhledávání je podobná). Jen pro další zřejmý příklad, nicméně, vícecestný strom (např B-tree, B + strom nebo B * strom), zatímco jasně strom je stejně zjevně není binární strom.

Opět platí, že chcete-li dost špatně, můžete protáhnout té míry, že vícecestný strom může být reprezentován jako jakési pokřivené verze binárního stromu. Chcete-li, můžete si pravděpodobně protáhnout všechny výjimky z bodu tím, že všechny z nich jsou (alespoň něco podobného) binární stromy. Alespoň pro mě, ale vše, co dělá, je, aby „binární strom“ synonymem pro „rozděl a panuj“. Jinými slovy, všechno, co splnit je deformace slovní zásoby a v podstatě vymazal termín, který je tak odlišný a užitečné.

Odpovězeno 22/02/2010 v 06:45
zdroj uživatelem

hlasů
2

Odpověď zní ne. Binární vyhledávání seřazeném poli je O(log(n)).

Odpovězeno 22/02/2010 v 06:48
zdroj uživatelem

hlasů
0

Jak je O (log (n)) je pouze horní mez také všechny O (1) algoritmy jako function (a, b) return a+b;splňovat podmínku.

Ale musím souhlasit všechny Theta (log (n)) algoritmy trochu vypadat algoritmů stromů nebo alespoň může být získávána ke stromu.

Odpovězeno 22/02/2010 v 07:26
zdroj uživatelem

hlasů
0

Stručná odpověď:

Jen proto, že algoritmus má log (n) jako součást své analýzy neznamená, že strom je zapojen. Například, následující je velmi jednoduchý algoritmus, který jeO(log(n)

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

Jak vidíte, žádný strom byl zapojen. John také poskytuje dobrý příklad, jak binární vyhledávání může být provedeno na seřazeném poli. Tyto oba se O (log (n)), čas, a tam jsou další příklady kódu, které by mohly být vytvořeny nebo vyvolat. Takže nenuťte předpoklady na základě časové náročnosti asymptoticky, podívejte se na kód, abyste měli jistotu.

Více na stromech:

Jen proto, že algoritmus zahrnuje „stromy“ neznamená O(logn)jeden. Musíte znát typ stromu a jak operace má vliv na strom.

Nějaké příklady:

  • Příklad 1)

Vkládání a vyhledávání následující nevyvážený strom bude O(n).

zadejte popis obrázku zde

  • Příklad 2)

Vložení nebo vyhledávat tyto vyvážené stromy by oba O(log(n)).

Vyvážená Binary Tree:

zadejte popis obrázku zde

Vyvážený Tree of Udělen 3:

zadejte popis obrázku zde

Další komentáře

Pokud se stromy používáte nemají způsob, jak „vyváženost“, než je zde velká šance, že vaše práce bude O(n)tentokrát ne O(logn). Používáte-li stromy, které jsou vlastní vyvažování, pak vloží normálně trvat delší dobu, protože vyvažování stromů běžně vyskytují v průběhu vložky fáze.

Odpovězeno 27/04/2016 v 00:55
zdroj uživatelem

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