El documento describe árboles generadores y dos algoritmos para construirlos: búsqueda primero a lo ancho y búsqueda a lo ancho. Explica que un árbol generador es un subgrafo que contiene todos los nodos de un grafo conexo. Luego detalla los pasos de cada algoritmo, incluyendo inicializar un vértice como raíz e ir agregando aristas y nodos de forma recursiva. Finalmente presenta código genérico para construir un k-árbol y buscar un dato en él usando los dos algoritmos.
1. Árboles generadores
o de expansión
Estructuras Discretas para informática
Actividad #7
Subgrupo 4
Estudiantes:
Moisés León
Laura Alfaro
Andrea Quesada
Joseph Calderón
Natalia González
2. definición
• Se define como un árbol subgrafo que contiene
todos los nodos de un grafo no dirigido conexo.
• Para determinar dichos árboles existen dos tipos
de algoritmos para realizar lo solicitado.
3. Búsqueda primero a lo ancho:
• Este recorre a lo largo cada vértice del subgrupo
visitando cada uno de los nodos sin repetición de los
propios.
• Cuándo el recorrido finaliza en un vértice donde sus
contiguos anteriormente han sido marcados; el proceso
retrocede al nodo ulterior y se continúa el trayecto a
partir de este.
4. La descripción general del algoritmo se puede
detallar de la siguiente manera:
I. Se inicializa en un vértice (si son letras por orden alfabético si son
números por orden numérico) y se toma como raíz del árbol generador.
II. Posteriormente se prosigue con la elección de un nodo vecino
(respetando el orden anterior) en donde se añade una arista entre ellos
donde seguidamente se incorporara al árbol.
III. Si se obtienen todos los vértices del grafo sin haber formado un
circuito, el algoritmo termina; en caso contrario el recorrido se repite
desde el vértice padre a su concluyente.
5. Búsqueda a lo ancho:
• Es un sistema que recorre todos los vértices del subgrafo. Para
ello se elegirá un conjunto control o cualquier otro elemento que le
permita al programador seleccionar la arista de menor valor
(respetando el orden alfabético y numérico) entre los otros posibles
tantos pares ordenados (que se encuentran asociados con el
vértices que se eligió) y se incorporara al árbol correspondiente.
6. Su descripción general se puede formular:
I. Se asigna un vértice como raíz del árbol y se prosigue a encontrar
todas las aristas posibles que unen la raíz con sus nodos adyacentes.
II. Se elige la arista de menor valor y se asigna al árbol.
III. Una vez asignada la arista se continua el procedimiento desde el paso
uno en base al último vértice de la arista incorporada.
IV. Si el conjunto control es igual a vacío el algoritmo finaliza, en caso
contrario se repite el proceso hasta culminar con el última arista sin
generar un circuito.
8. • El siguiente código consiste en la construcción de un k-árbol que
contiene una determinada cantidad de vértices; determinando la
búsqueda de un dato en específico encontrado en la lista de
nodos. Para cumplir esta sentencia el algoritmo debe comparar el
dato que se ingresó por parámetro con cada uno de los elementos
del árbol.
• La elaboración del código se realizó de manera genérica, el
usuario debe ingresar el orden del árbol, la cantidad de vértices y
por supuesto, el dato de búsqueda requerido.
Explicación del código:
9. • Seguidamente, utilizando el comando ShowGraph se trabaja en la
creación del árbol subgrafo donde se le asigna a “G” un k-árbol a
través del comando CompleteKaryTree[n,k]. La función de este
comando es el desarrollo de un árbol generador completo con n
vértices y un k orden esto quiere decir que cada padre tendrá k
hijos.
Explicación del código:
10. • Continuamente los comandos BreadthFirstTraversal y
DepthFirstTraversal se encargan de la confección del árbol a lo
ancho y también a lo largo. Esta acción se inicializa al activar el
ciclo For que recorrerá cada uno de los elementos que componen
cada árbol según el algoritmo, y que estarán sujetos bajo una
condición que compara el dato ingresado con los elementos de
cada algoritmo.
Explicación del código:
11. • Finalizado dichos procesos se imprime el dato encontrado (si es
que la función lo encontró); en caso contrario imprime “dato no
encontrado”. Destacando que para esta función se creó con
anterioridad dos variables que condicionaran que: si h es igual a 1
imprima “dato encontrado”, sino imprimirá “dato no encontrado”.
Explicación del código: