Es O (log n) siempre es un árbol?

votos
6

Siempre vemos las operaciones en un árbol (binario de búsqueda) tiene tiempo O (log n) funcionando peor de los casos, debido a la altura de los árboles se logN. Me pregunto si se nos dice que un algoritmo se ejecuta el tiempo en función de log n, por ejemplo, m + nlogn, podemos concluir que debe implicar un árbol (aumentada)?

EDIT: Gracias a sus comentarios, ahora se da cuenta dividir y conquistar árbol binario son tan similares visual / conceptual. Nunca había hecho una conexión entre los dos. Pero pienso en un caso en el que O (log n) no es una división vencerás algo que implica un árbol que no tiene la propiedad de un árbol AVL / rojo-negro BST /.

Esa es la estructura de datos del conjunto disjunto con operaciones / Unión se encuentren, cuyo tiempo de ejecución es O (N + MlogN), siendo N el # de elementos y M el número de operaciones de búsqueda.

Por favor, hágamelo saber si me falta algo, pero no puedo ver cómo dividir conquista entra en juego aquí. Acabo de ver en este caso (conjunto disjunto) que tiene un árbol con ninguna propiedad BST y un tiempo de ejecución es una función del logN. Así que mi pregunta es acerca de por qué / por qué no puedo hacer una generalización a partir de este caso.

Publicado el 22/02/2010 a las 05:25
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
7

No, puede también binaria buscar una matriz ordenada (por ejemplo). Pero no tome mi palabra para ella http://en.wikipedia.org/wiki/Binary_search_algorithm

Respondida el 22/02/2010 a las 05:26
fuente por usuario

votos
3

Como un ejemplo contador:

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

El tiempo de ejecución es O (log (n)), pero ningún árbol aquí!

Respondida el 22/02/2010 a las 05:28
fuente por usuario

votos
0

Algoritmos que toman tiempo logarítmica son comúnmente encontrados en las operaciones en los árboles binarios.

Ejemplos de O (log n):

  • Encontrar a un elemento de una matriz ordenada con una búsqueda binaria o de un árbol de búsqueda equilibrado.

  • Buscar un valor en una matriz de entrada ordenados por bisección.

Respondida el 22/02/2010 a las 05:40
fuente por usuario

votos
7

Lo que tenemos es exactamente al revés. O(lg N)significa generalmente algún tipo de algoritmo de divide y vencerás, y una forma común de implementar la divide y vencerás es un árbol binario. Mientras que los árboles binarios son un subconjunto sustancial de todos los algoritmos divide y vencerás, el son un subconjunto de todos modos.

En algunos casos, puede transformar otros algoritmos divide y vencerás bastante directamente en los árboles binarios (por ejemplo, comentarios en otra respuesta ya han hecho un intento de reclamar una búsqueda binaria es similar). Sólo por otro ejemplo obvio, sin embargo, un árbol de múltiples vías (por ejemplo, un árbol B, B + árbol o B * árbol), mientras que claramente un árbol es tan claramente no un árbol binario.

Una vez más, si quieres lo suficiente, puede estirar el punto de que un árbol de múltiples puede ser representado como una especie de versión deformada de un árbol binario. Si lo desea, es probable que pueda estirar todas las excepciones al punto de decir que todos ellos son (al menos algo así) árboles binarios. Al menos para mí, sin embargo, lo único que hace es hacer "árbol binario" sinónimo de "divide y vencerás". En otras palabras, todo lo que lograr es el alabeo del vocabulario y destruyendo esencialmente un término que a la vez clara y útil.

Respondida el 22/02/2010 a las 06:45
fuente por usuario

votos
2

Respuesta es no. La búsqueda binaria de un arreglo ordenado es O(log(n)).

Respondida el 22/02/2010 a las 06:48
fuente por usuario

votos
0

Como O (log (n)) es solamente un límite superior también todos los O (1) algoritmos como function (a, b) return a+b;satisfacer la condición.

Pero tengo que estar de acuerdo toda la theta (log (n)) algoritmos poco se parecen a los algoritmos de árboles o por lo menos se pueden abstraer a un árbol.

Respondida el 22/02/2010 a las 07:26
fuente por usuario

votos
0

Respuesta corta:

El hecho de que tiene un algoritmo log (n) como parte de su análisis, no significa que un árbol se tratara. Por ejemplo, el siguiente es un algoritmo muy simple que esO(log(n)

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

Como se puede ver, hay árbol estaba involucrado. John, también proporciona un buen ejemplo de cómo la búsqueda binaria se puede hacer en un arreglo ordenado. Estos dos toman tiempo O (log (n)), y hay de otros ejemplos de código que podrían crearse o referenciados. Así que no hacen suposiciones basadas en la complejidad asintótica tiempo, mirar el código para saber con seguridad.

Más sobre los árboles:

El hecho de que un algoritmo implica "árboles" no implica O(logn)tampoco. Es necesario conocer el tipo de árbol y cómo afecta la operación del árbol.

Algunos ejemplos:

  • Ejemplo 1)

Insertar o buscar en el siguiente árbol desequilibrado sería O(n).

introducir descripción de la imagen aquí

  • Ejemplo 2)

Insertar o buscar en los siguientes árboles equilibrados serían por tanto O(log(n)).

Árbol binario equilibrado:

introducir descripción de la imagen aquí

Árbol equilibrado de Grado 3:

introducir descripción de la imagen aquí

Comentarios adicionales

Si los árboles que está utilizando no tiene una forma de "equilibrio" que hay una buena probabilidad de que sus operaciones serán O(n)no el tiempo O(logn). Si utiliza los árboles que son el equilibrio de uno mismo, a continuación, inserta normalmente toma más tiempo, ya que el equilibrio de los árboles normalmente se producen durante la fase de inserción.

Respondida el 26/04/2016 a las 21:55
fuente por usuario

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