Está en la página 1de 15

FACULTAD DE LA CARRERA DE INGENIERÍA ELÉCTRICA

INVESTIGACIÓN:

ÁRBOLES Y GRAFOS

MATERIA:

PROGRAMACIÒN

DOCENTE:

ING. FREDDY AVILA

ESTUDIANTE: JUAN PERALTA

CUENCA - ECUADOR

Julio- 2019
 OBJETIVO GENERAL:

 Conocer la teoría sobre árboles y grafos mediante investigación con respecto a temas como
estructura y exploración de un grafo, búsqueda por Anchura y profundidad del árbol, algoritmos
voraces y árbol de mínima expansión métodos Heurísticos para búsqueda y exploración,
métricas de rendimiento de un grafo para la adquisición de conocimiento y fortalecimiento de
la enseñanza por parte del estudiante.

 OBJETIVO ESPECÍFICO:

 Conocer por medio de investigación como definir grafos, hacer sus representaciones gráficas y
solicitar información relevante sobre los vértices.
 Comprender los temas señalados acerca de árboles y grafos.
 Analizar la visualización de grafica para organizar y relacionar datos en una base de datos.

1. INTRODUCCIÓN:

Los árboles corresponden a una de las subclases de grafos de uso más amplio, particularmente en
computación. Los grafos se pueden clasificar en dos grupos: dirigidos y no dirigidos. Los arboles
forman parte de los no dirigidos.

 ESTRUCTURA Y EXPLORACIÓN DE UN GRAFO.

Estructura:

Es una estructura de datos que consiste en un conjunto de nodos y un conjunto de arcos que
establecen relaciones entre los nodos. Cada arco en un grafo se especifica por medio de un par de
nodos.

Exploración de un grafo:

A la hora de explorar un grafo, nos encontramos con dos métodos distintos. Ambos conducen al
mismo destino (la exploración de todos los vértices o hasta que se encuentra uno determinado), si
bien el orden en que éstos son "visitados" decide radicalmente el tiempo de ejecución de un
algoritmo, como se verá posteriormente.
Un Grafo (o grafo no dirigido) es un conjunto V de vértices y un conjunto E de aristas tales que cada
arista e, E (queda asociada a un par no ordenado de vértices. Si existe una única arista e asociada
con los vértices v y w, escribimos e = (v,w). En este contexto (v,w) denota una arista en un grafo no
dirigido y no un par ordenado.

Un grafo dirigido (o digrafo) consta de un conjunto finito de vértices V y un conjunto de arcos E (V


× V) (obsérvese que cada arco es un par ordenado de vértices).

Grafo conexo: un grafo G es conexo si dados cualesquiera dos vértices v y w en G, existe un camino
de v a w.

Camino: sean v0 y v𝑛 vértices de un grafo. Un camino de v0 a v𝑛 de longitud n es una sucesión


alternante de n+1 vértices y n aristas que comienza con el vértice v0 y termina con el vértice vn.

Longitud del camino: es el número de aristas que contiene.

Ciclo: sean v y w vértices en un grafo G, un ciclo o circuito es un camino de longitud distinta de 0 de


v a w, sin aristas repetidas.

Subgrafo: sea G (V, E) un grafo. (V", E") es un subgrafo de G si

a) V" (V y E” (E).

b) Para cada arista e" (E", si e" es incidente en v" y w", entonces v", w" (V).

Grafo con pesos (o poderado): es un grafo en el cual se le asignan valores a las aristas y la longitud
del camino de un grafo con pesos es la suma de todos los pesos de las aristas en la ruta (camino).

Árbol: es un grafo en el que cualesquiera dos vértices están conectados por exactamente
un camino.

Definir grafos en Matlab

Al definir un grafo. MatLab nos permite definir grafos de dos maneras, de forma matricial y de forma
vectorial. A continuación, explicamos cómo hacerlo en cada uno de los casos.

 Definir un grafo de forma matricial

Comenzamos definiendo una matriz cuadrada A, de manera que su dimensión coincida con el
número de vértices del grafo. Si queremos definir simplemente un grafo y no una red, la matriz A es
justamente la matriz de adyacencia asociada al grafo, de manera que para cada par de vértices.

0 𝑠𝑖 → 𝑗.
𝑖, 𝑗: 𝑎𝑖𝑗 = {
1 𝑠𝑖 ↛ 𝑗.
Ahora bien, si queremos definir una red, esto es, un grafo de manera que cada arco tenga asignado
un valor numérico, la matriz A será la matriz de adyacencia con pesos. Esto significa que el valor 𝑎𝑖𝑗
será 0, si el arco 𝑖 → 𝑗 no existe, y tomara un valor real no nulo, si el arco existe y tiene asignado
dicho peso.

Una vez definida la matriz de adyacencia con pesos, tenemos que tener en cuenta si el grafo es
orientado o no orientado.

En el caso de grafos orientados, utilizaremos la instrucción:

>> G=digraph(A)

Por otra parte, si el grafo es no orientado, la matriz de incidencia A deberá de ser simétrica (𝑎𝑖𝑗
= 𝑎𝑗𝑖 ).

En este caso, utizaremos la instrucción:

>> G=graph(A)

Si la matriz introducida es no simétrica y utilizamos la instrucción graph, MatLab dará un error,


indicando que para construir un grafo no orientado es necesario utilizar una matriz simétrica.

Ejemplo 5.1. Consideremos el grafo orientado G y su grafo no orientado asociado que denotaremos
por F, definidos en la Figura 5.1. Como podemos ver, cada arco tiene asociado un peso. En el caso
de los arcos 2 → 3 𝑦 3 → 2, ambos tienen asociado el mismo peso 2.
>> G = digraph(A1) G =

digraph with properties:

Edges: [5x2 table] Nodes: [5x0 table] >> G = graph(A2)

F=

graph with properties:

Edges: [4x2 table]

Nodes: [5x0 table]

Como vemos, la salida nos informa de que el grafo orientado G tiene 5 arcos y 5 nodos, mientras
que el grafo no orientado F sigue teniendo 5 vértices pero solamente 4 aristas (los arcos 2 →
3 𝑦 3 → 2 dan lugar a la misma arista).

A la hora de definir un grafo, podemos le podemos dar un nombre: Para un grafo con tres nodos la
instrucción seria:

>> Nodos = {‘Nodo 1’, ‘Nodo 2’, ‘Nodo 3’};

>> G = digraph(A, Nodos)

En el caso de un grafo no orientado, simplemente sustituiríamos la instrucción digraph por la


instrucción graph. Una vez definido el grafo, podemos solicitar por pantalla la información referida
a los vértices, a los arcos/aristas o a los pesos mediante las instrucciones:

>> G. Nodes

>> G. Edges

>> G. Edges. Weight

 Definir un grafo de forma matricial.

Se puede representar de manera matricial de varias formas. Las representaciones matriciales son
muy útiles porque nos permiten simplificar los cálculos. Con Matlab podemos calcular las matrices
de adyacencia y de incidencia vértice-arco:
a) Matriz de adyacencia: es la matriz cuadrada que tiene tantas filas y columnas como vértices hay
en el grafo, y definida por 𝑎𝑖𝑗 = 1 si 𝑖 → 𝑗 es un arco o 𝑎𝑖𝑗 = 0 en otro caso. Para calcular la
matriz de adyacencia, usaremos el comando adjacency:

>> adjacency(G)

Usando esta expresión nos indicara los arcos que tiene el grafo. Si queremos que nos muestre la
matriz completa, debemos añadir el comando full:

>> full(adjacency(G))

b) Matriz de incidencia vértice-arco. Esta matriz solamente se puede calcular para los grafos
orientados. Esta matriz tiene tantas columnas como vértices y tantas filas como arcos, y en el
elemento 𝑚𝑖𝑒 toma el valor 1, si 𝑖 es el vértice inicial del arco 𝑒; 𝑚𝑖𝑒 toma el valor -1 si 𝑖 es el vértice
final del arco 𝑒, y toma el valor 0 en otro caso. Para calcularla, utilizaremos el comando incidence:

>> incidence(G)

Al igual que en el apartado anterior, por pantalla nos mostrara una lista con los arcos (𝑖, 𝑗) y nos
indicara el valor 1 o -1 según el vértice inicial sea 𝑖 𝑜 𝑗, respectivamente. Una vez más, si queremos
la matriz completa debemos utilizar la instrucción full:

>> full(incidence(G))

Ejemplo 5.7. Continuemos con el grafo. Vamos a calcular sus matrices de adyacencia y de incidencia
vértice-arco:

>> adjacency(G5)

ans =

(5,1) 1

(3,2) 1

(1,3) 1

(2,3) 1

(2,4) 1

(1,5) 1
>> incidence(G5)

ans =

(1,1) -1

(3,1) 1

(1,2) -1

(5,2) 1

(2,3) -1

(3,3) 1

(2,4) -1

(4,4) 1

(2,5) 1

(3,5) -1

(1,6) 1

(5,6) -1

 BÚSQUEDA POR ANCHURA Y PROFUNDIDAD DEL ÁRBOL.

Dado un grafo G = (V, E), un árbol generador de G, es un subgrafo que es árbol y contiene a todos
los vértices del grafo.

Todo grafo conexo posee un árbol generador. El grafo completo 𝐾𝑛 tiene 𝑛𝑛−2 árboles generadores
diferentes.

Búsqueda por anchura:

La búsqueda en anchura es otro procedimiento para visitar sistemáticamente todos los vértices de
un grafo. Es adecuado especialmente para resolver problemas de optimización, en los que se deba
elegir la mejor solución entre varias posibles.
Al igual que en la búsqueda en profundidad se comienza en un vértice v (la raíz) que es el primer
vértice activo.

En el siguiente paso se etiquetan como visitados todos los vecinos del vértice activo que no han sido
etiquetados. Se continúa etiquetando todos los vecinos de los hijos de v (que no hayan sido visitados
aún).

En este proceso nunca se visita un vértice dos veces por lo que se construye un grafo sin ciclos, que
será un árbol generador de la componente conexa que contiene a v.

Sea G (V, E) un grafo conexo y v un vértice de V. El algoritmo de búsqueda en anchura puede


detallarse así:

1. Designamos a v como vértice activo y como raíz del árbol generador T que se construirá. Se le
asigna a v la etiqueta 0.

2. Sea i=0 y S={v}.

3. Hallar el conjunto M de todos los vértices no etiquetados que son adyacentes a algún vértice de
S.

4. Si M es vacío el algoritmo termina. En caso contrario, se etiquetan todos los vértices de M con
i+1, se añaden a T las aristas entre cada vértice de S y su vecino en M y se hace S=M. 5. i=i+1 y volver
al paso 3.

Al terminar el proceso se habrá construido un árbol generador del grafo inicial. En caso de G no ser
conexo, habría que modificar el algoritmo para encontrar un árbol generador de cada componente
conexa de G. La complejidad de este algoritmo es O (max {n, m}). [1]

Búsqueda por profundidad:

Muchos algoritmos de grafos necesitan visitar de un modo sistemático todos los vértices de un
grafo. En la búsqueda en profundidad se avanza de vértice en vértice, marcando cada vértice
visitado.

La búsqueda siempre avanza hacia un vértice no marcado, internándose “profundamente” en el


grafo sin repetir ningún vértice. Cuando se alcanza un vértice cuyos vecinos han sido marcados, se
retrocede al anterior vértice visitado y se avanza desde éste.

Si dado un grafo simple G, escogemos un vértice v para iniciar la exploración del grafo utilizando la
búsqueda en profundidad, el árbol que se construye es un árbol generador de la componente
conexa del grafo que contiene a v. Sea G (V, E) un grafo conexo y v un vértice de V.
El algoritmo de búsqueda en profundidad puede detallarse así:

1. Se comienza en un vértice v (vértice activo) y se toma como la raíz del árbol generador T que se
construirá. Se marca el vértice v.

2. Se elige un vértice u, no marcado, entre los vecinos del vértice activo. Si no existe tal vértice, ir a
4.

3. Se añade la arista (v, u) al árbol T. Se marca el vértice u y se toma como activo. Ir al paso 2.

4. Si se han alcanzado todos los vértices de G el algoritmo termina. En caso contrario, se toma el
vértice padre del vértice activo como nuevo vértice activo y se vuelve al paso 2.

La complejidad de este algoritmo es O (max {n, m}) [2]

Hallar un árbol generador para el siguiente grafo aplicando el algoritmo de búsqueda en


profundidad.

Si no se tuviera la certeza de que el grafo G es conexo, se necesita modificar el paso 4 para permitir
la búsqueda en las componentes conexas que no contienen a v. Entonces este algoritmo servirá
también para hallar todas las componentes conexas del grafo G, mediante la construcción de un
árbol generador de cada componente conexa de G.

 ALGORITMOS VORACES Y ÁRBOL DE MÍNIMA EXPANSIÓN

Algoritmos voraces:

Es una estrategia de búsqueda por la cual se sigue una heurística consistente en elegir la opción
óptima en cada paso local con la esperanza de llegar a una solución general óptima. Este esquema
algorítmico es el que menos dificultades plantea a la hora de diseñar y comprobar su
funcionamiento. Normalmente se aplica a los problemas de optimización.
Árboles de expansión:

Definición: un árbol T es un árbol de expansión de un grafo G si T es un subgrafo de G que


contiene a todos los vértices de G.

Un grafo G tiene un árbol de expansión si y solo si G es conexo.

Arboles de expansión mínima:

Definición: sea G un árbol con pesos. Un árbol de expansión mínimo de G es un árbol de


expansión de G con mínimo peso, es decir cuya suma de pesos sea mínima.

Para calcular el árbol de peso mínimo existen 2 algoritmos:

Prim: Consiste en ir borrando las aristas de mayor peso posible y que no sean aristas de
separación.

Kruskal: Se van escogiendo las aristas de menor peso hasta conseguir un árbol de peso mínimo

Algoritmo de Prim: Este algoritmo determina un árbol de expansión mínimo en un grafo conexo
con pesos.

El algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices,
donde el peso total de todas las aristas en el árbol es el mínimo posible.

Pasos para realizar el algoritmo:

1. Se marca un nodo cualquiera, será el nodo de partida.

2. Seleccionamos la arista de menos valor incidente en el nodo marcado anteriormente, y


marcamos el otro nodo en el que incide.

3. Repetir el paso 2 siempre que la arista elegida enlace un nodo y otro que no lo esté.

4. El proceso termina cuando tenemos todos los nodos del grafo marcados.
Al concluir el algoritmo, T es un árbol de expansión mínimo.

 MÉTODOS HEURÍSTICOS PARA BÚSQUEDA Y EXPLORACIÓN

Las heurísticas son formalizadas como reglas para elegir (buscar) las ramas en el espacio de estados
que son más probables de llegar a una solución aceptable del problema.

Las Heurísticas

 Atacan la complejidad guiando la b Atacan la complejidad guiando la búsqueda por los


caminos por los caminos más prometedores en el espacio de búsqueda.
 Eliminan estados no prometedores y sus descendientes E
 Encuentran soluciones aceptables
 Desafortunadamente las reglas son falibles, pues usan información limitada.

Estrategias de búsqueda heurística

Tipos:
Estrategias tentativas: aquellas en las que se puede abandonar la exploración de una rama y
pasar a explorar otra en cualquier momento del problema.
Estrategias irrevocables: aquellas en las que no se puede abandonar la exploración de la rama
por la que se comenzó.
 Métodos:
 Gradiente
 Primero el mejor
 Búsqueda en haz
 Algoritmo A

Gradiente:

• Metodología: elegir el camino de máxima pendiente, usando para ello la función de


evaluación.

 Tipo: irrevocable.
 Ventajas: se llega a la solución con poco coste computacional.
 Inconvenientes: puede ser que el problema no sea compatible con este método, y, por lo tanto,
no conseguiremos obtener la solución.

Primero el mejor:

 Metodología: elegir como siguiente nodo aquel con mayor función de evaluación.
 Tipo: tentativo.
 Ventajas: no depende en exceso de la función de evaluación.
 Inconvenientes: excesiva complejidad espacial, pues se deben guardar todos los nodos abiertos.

Búsqueda en haz:

 Metodología: elegir un conjunto de nodos como los siguientes a expandir, y hacerlo de forma
irrevocable.
 Tipo: irrevocable/tentativo.
 Ventajas: más permisible. Inconvenientes: en caso de que el sistema sea irrevocable, este
método no actúa con eficacia
 Algoritmo A:
 Metodología: Ponderar a la vez lo cerca que estamos del nodo meta y lo lejos que estamos del
nodo inicial.
 Tipo: tentativo.
 Ventajas: soluciones más cercanas a la raíz.

Inconvenientes: la función de evaluación se complica


 MÉTRICAS DE RENDIMIENTO DE UN GRAFO

Dimensión métrica

En el contexto actual, uno de los dilemas de mayor interés en estas materias de estudio reside aún
en determinar que nodos son los auténticamente relevantes, o centrales, dentro de una red. Se
entiende que en base a la centralidad se deben de poder analizar y sintetizar los diferentes
fenómenos que se reproducen en una red cualquiera.

Se han propuesto toda una serie de diferentes medidas de la misma, cada una respondiendo a un
enfoque particular de definición. Las referencias clásicas en este tema acostumbran a ser: el grado,
la distancia media, y la betweenness centrality. Sin embargo, todavía no se ha llegado a un consenso
final sobre la propia definición de centralidad. Cada cual apuesta por criterios que acentúan un
cierto tipo de cualidades en detrimento de otras, he incluso los hay que no creen la posible
definición de un concepto general de centralidad, y se centran únicamente en emplear aquella que
enfatice el matiz deseado.

En el tipo de casos como el de los servidores, se reproducirán también el mismo tipo de situaciones.
A número de servidores que me hacen falta para este propósito es lo que denominamos dimensión
métrica conjunto de los mismos, es lo que denominamos base métrica

Enlazando con el inicio de este apartado, podríamos extrapolar que los elementos de la base métrica
ocupan un determinado papel de centralidad como mínimo desde el punto de vista de su capacidad
de identificación unívoca del conjunto de todos los nodos del grafo.
EJEMPLO GRAFO 1

El conjunto S1 = {A, B, C} es un conjunto que resuelve nodos de G1 sobre S1 son:

A su vez, es obvio observar que ningún nodo de forma aislada puede resolver G1

Conclusión: R(G1) = 2, y S2 es una base métrica del mismo

EJEMPLO GRAFO 2

El conjunto S1 = {A, B, C, D} es un conjunto que resuelve G2 puesto que las coordenadas de los
distintos nodos de G2 sobre S1 son:

Podríamos comprobar que no existe ningún conjunto de cardinalidad inferior a 3 que pueda resolver
G2

Conclusión: R(G2) = 3, y S2 es una base métrica del mismo.


CONCLUSIONES:

 Como podemos observar tanto el algoritmo de búsqueda en profundidad como el algoritmo de


búsqueda en anchura pueden ser utilizados para verificar si un grafo simple es o no conexo. El
problema de decisión consistente en determinar si un grafo simple es o no conexo, pues se
plantea dos algoritmos de tiempo polinomial que resuelven este problema.

 Al realizar este trabajo aprendí algoritmos útiles para encontrar un árbol de expansión mínimo,
que es el más adecuado para comunicar n nodos utilizando una red de interconexión que tenga
el menor número posible de enlaces, por ejemplo al saber también que son muy útiles los
árboles para la toma de decisiones.

BIBLIOGRAFIA:

1) In Proceedings of 5-th Berkeley Symposium on Mathematical Statistics and Probability


(Berkeley, 1967), University of California Press, pp. 281{297.
2) https://www.monografias.com/trabajos98/arboles-y-grafos/arboles-y-grafos.shtml
http://ocw.uniovi.es/pluginfile.php/6024/mod_resource/content/0/PracticaTema1.pdf
3) https://core.ac.uk/download/pdf/41800663.pdf

También podría gustarte