Autor
|
Tema: [?] Arbb (arboles binarios de busqueda) C++...??? (Leído 3,900 veces)
|
Liraa
Desconectado
Mensajes: 2
|
Hola.! soy nueva en este foro, esta bien interesante, el motivo de este tema es q necesito realizar un ejercicio pero de verdad la mente ya no me da, las soluciones q penc sirven pero no son para nada eficientes.!
El problema es q necesito generar la cantidad de combinaciones que me generen un mismo arbol binario de busqueda..
Ejemplo:
3,4,3,5,4
Generan muchas combinaciones pero solo 3 generan el mismo arbol binario de busqueda: 3,4,3,5,4 3,4,5,4,3 3,4,5,3,4
de verdad agradeceria mucho q me pudieran ayudar.. yo ya tengo mi clase abb implementada en c++ pero no entiendo como atacar este problema...
habia pensado en hacer un algoritmo q me permute el numero y ir construyendo el arbol para cada uno y luego compararlo, pero resulta q para un caso muy grande tardaria toda la vida haciendolo :s
Gracias!
|
|
« Última modificación: 24 Julio 2010, 23:59 pm por Liraa »
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
Dada una secuencia de números, puedes construir el BST (Binary Search Tree) asociado. Entonces, fijado un nodo del árbol que no sea una hoja, si consideras los subárboles izquierdo y derecho, mientras mantengas el orden relativo con los nodos de su subárbol, cualquier orden mantendrá el mismo BST.
En el caso que has puesto, el único nodo que tiene un subárbol a cada lado es el 4. El subárbol izquierdo es un 3 y el derecho un 5 y a continuación un 4. Por lo tanto, el 3, 5, 4 de la entrada lo puedes ordenar como quieras siempre que el 5 vaya antes que el 4, por estar en el mismo subárbol, y así salen las tres posibles opciones (moviendo de sitio el 3).
El cálculo de fijado un nodo cuántas ordenaciones válidas hay lo puedes calcular fácilmente con programación dinámica y seguramente por combinatoria también salga. Lo único que tienes que tener cuidado de no repetir casos.
Lo he pensado rápido así que quizá me haya equivocado en algún punto, pero si es correcto el algoritmo resultante tiene complejidad polinómica y por lo tanto es mucho más eficiente que lo que comentabas.
|
|
|
En línea
|
|
|
|
Liraa
Desconectado
Mensajes: 2
|
Ah ok amigo muchas gracias, pero hay algo q no entendi.. cuando hay varios nodos q tienen subarbol a cada lado, tambien tengo q guardar el recorrido por niveles de todos esos subarboles??
Gracias.
|
|
« Última modificación: 27 Julio 2010, 21:56 pm por Liraa »
|
En línea
|
|
|
|
ghastlyX
Ex-Staff
Desconectado
Mensajes: 1.900
|
No tienes que guardar el recorrido, te da igual si sólo quieres saber cuántas ordenaciones hay (no cuáles son), simplemente deberías saber cuántos nodos tiene el subárbol, que lo puedes precalcular linealmente para todos los nodos haciendo un único recorrido inicial del árbol.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
ayuda en arboles binarios
Programación C/C++
|
josue_tux
|
1
|
3,030
|
25 Junio 2011, 14:10 pm
por satu
|
|
|
ayuda urgente en arboles binarios
Programación C/C++
|
josue_tux
|
1
|
4,107
|
10 Julio 2011, 16:04 pm
por Triper0
|
|
|
[C] Funciones para arboles binarios
Programación C/C++
|
gasparenaide
|
0
|
2,149
|
19 Marzo 2013, 01:47 am
por gasparenaide
|
|
|
Busqueda por posicion en arboles binarios c++
Programación C/C++
|
Abril7
|
1
|
1,727
|
12 Mayo 2017, 15:46 pm
por CalgaryCorpus
|
|
|
Problema en arboles binarios de busqueda
Programación C/C++
|
Josh13
|
1
|
1,767
|
21 Mayo 2018, 15:19 pm
por Serapis
|
|