Subido por Si Mon

Resumen sobre Sistemas Distribuidos

Anuncio
Portada del equipo 12
Sistemas Distribuidos Paralelos.
Grupo:
Hora:
Días clase:
Nombre
Ranfery Josua
Peregrina
Morales
José Antonio
Rodríguez
Basaldua
José Homero
Rodríguez
Basaldua
Angie Abigail
Monteverde
Tapia
004
N4
Lun, Mie, Vie
Matrícula Carrera Oportunidad
1924910
ITS
Primera
1838254
ITS
Primera
1838253
ITS
Primera
1882021
ITS
Primera
Resumen: Grafos senderos y ciclos
Definición de Grafo
Un grafo es una estructura matemática que se utiliza para representar relaciones entre objetos. En
un grafo, los objetos se representan como nodos o vértices, y las relaciones entre ellos se
representan como líneas o arcos que conectan estos vértices.
Los grafos pueden ser utilizados en una amplia variedad de aplicaciones, como la representación
de redes sociales, redes de transporte, mapas de internet y mucho más.
Hay dos tipos básicos de grafos: grafos dirigidos y grafos no dirigidos. En un grafo dirigido o grafo
"dígrafos", cada arco o relación tiene una dirección asociada, es decir, un vértice inicial y un vértice
final. En otras palabras, si hay un arco desde el vértice A hasta el vértice B, no hay necesariamente
un arco desde el vértice B hasta el vértice A.
Por otro lado, en un grafo no dirigido o grafo "no dígrafos", las relaciones entre vértices son
bidireccionales, es decir, si hay una relación entre dos vértices, entonces existe una relación en
ambas direcciones.
Es importante tener en cuenta que esta diferencia tiene implicaciones importantes en la forma en
que se analizan y se utilizan los grafos. Por ejemplo, en un grafo dirigido, se pueden utilizar
conceptos como flujos y caminos críticos para modelar problemas de optimización y gestión,
mientras que, en un grafo no dirigido, se utilizan conceptos como componentes conexas y árboles
para representar relaciones de contención.
Definición de Path
Un “Path” traducido al español como sendero es una secuencia de vértices en los que cada vértice
consecutivo está conectado por un arco.
Un sendero es diferente de un camino en que un camino puede tener vértices repetidos, mientras
que un sendero no puede tener vértices repetidos.
Hay diferentes tipos de senderos, como senderos simples, senderos cíclicos y senderos conexos,
dependiendo de las propiedades de la secuencia de vértices y arcos. Por ejemplo, un sendero
cíclico es un sendero que comienza y termina en el mismo vértice.
Definición de Ciclo
Un ciclo en un grafo es un camino que comienza y termina en el mismo vértice y que pasa por al
menos un vértice adicional. Es decir, un ciclo es un camino que no es una línea recta, sino que
regresa al mismo vértice al menos una vez.
Un ciclo en un grafo puede ser tanto simple como no simple. Un ciclo simple es un ciclo en el que
cada vértice aparece exactamente una vez, excepto por el vértice inicial y final, que son iguales.
Un ciclo no simple, por otro lado, puede tener vértices repetidos.
Los ciclos en los grafos son importantes porque pueden ser utilizados para representar relaciones
cíclicas en diferentes aplicaciones. Por ejemplo, en un grafo de tareas, un ciclo puede indicar una
dependencia circular entre tareas, lo que podría ser un problema. También pueden ser utilizados
en la detección de ciclos y en la identificación de componentes conexas en un grafo.
Vertex Relationship
"Vertex relationship" es un término que se refiere a la relación entre vértices en un grafo. En
teoría de grafos, los vértices representan objetos o entidades, y las relaciones entre ellos
representan las conexiones o asociaciones entre estas entidades.
Todos lo predecesores también son ancestros y todos los sucesores también son descendientes.
Representación en una computadora
Hay varias formas de representar un grafo en una computadora, el video aborda dos de ellas:
Matriz de Adyacencia:
La matriz de adyacencia es una forma común de representar un grafo en una computadora. En
esta representación, se utiliza una matriz cuadrada para representar los vértices del grafo y sus
relaciones. La entrada en la fila i y la columna j de la matriz se utiliza para representar un arco
desde el vértice i hasta el vértice j.
Si hay un arco desde el vértice i hasta el vértice j, la entrada correspondiente en la matriz se
establece en 1, y si no hay un arco, la entrada se establece en 0. La matriz de adyacencia es
simétrica si el grafo es no dirigido, es decir, si hay un arco desde el vértice i hasta el vértice j,
entonces también hay un arco desde el vértice j hasta el vértice i.
La matriz de adyacencia es una forma eficiente de representar grafos densos, es decir, grafos con
muchos arcos. Sin embargo, para grafos dispersos, es decir, grafos con pocos arcos, la matriz de
adyacencia es menos eficiente en términos de espacio de almacenamiento, ya que la mayoría de
las entradas en la matriz estarán en 0.
Además, la matriz de adyacencia es muy eficiente para realizar operaciones básicas en grafos,
como calcular el grado de un vértice, encontrar los vértices adyacentes a un vértice dado, y
determinar si existe un camino entre dos vértices.
En resumen, la matriz de adyacencia es una forma eficiente y directa de representar grafos, y es
una herramienta importante en la teoría de grafos y en la solución de problemas relacionados con
grafos en la computadora.
Lista de adyacencias
La lista de adyacencia es otra forma común de representar un grafo en una computadora. En esta
representación, cada vértice del grafo se representa como un nodo en una estructura de datos, y
cada arco se representa como un enlace entre los nodos correspondientes.
Por ejemplo, si hay un arco desde el vértice A hasta el vértice B, entonces la lista de adyacencia del
vértice A incluirá a B como uno de sus vértices adyacentes. Esta representación es eficiente para
grafos con muchos vértices y pocos arcos, ya que el tamaño de la representación depende del
número de arcos en el grafo, no del número de vértices.
En la lista de adyacencia, cada vértice se almacena en una estructura de datos, como una lista o
una tabla hash, y se puede acceder a su lista de adyacencia mediante un índice o una clave
asociada al vértice. Las operaciones en un grafo representado como una lista de adyacencia
incluyen la inserción y eliminación de vértices y arcos, la búsqueda de vértices y arcos, y la
realización de recorridos en el grafo.
La lista de adyacencia es una forma flexible y fácil de manipular de representar grafos, y se utiliza
comúnmente en aplicaciones de grafos, como la búsqueda en grafos, el camino más corto y la
detección de ciclos.
En resumen, la lista de adyacencia es una forma eficiente y flexible de representar grafos en una
computadora, y es una herramienta importante en la teoría de grafos y en la solución de
problemas relacionados con grafos en la computadora.
Máximo número de aristas
El número máximo de aristas en un grafo depende del número de vértices en el grafo. Hay dos
tipos de grafos, grafos no dirigidos y grafos dirigidos, y el número máximo de aristas para cada uno
de ellos es diferente.
Para un grafo no dirigido con n vértices, el número máximo de aristas es n * (n - 1) / 2. Esto se
debe a que cada vértice puede tener un máximo de n - 1 vértices adyacentes, y el número total de
arcos sería la mitad del número de pares de vértices adyacentes.
Para un grafo dirigido con n vértices, el número máximo de aristas es n * (n - 1). Esto se debe a
que cada vértice puede tener un máximo de n - 1 arcos salientes, y el número total de arcos sería
la suma de los arcos salientes desde cada vértice.
En resumen, el número máximo de aristas en un grafo depende del número de vértices y si el
grafo es no dirigido o dirigido. Para un grafo no dirigido con n vértices, el número máximo de
aristas es n * (n - 1) / 2, y para un grafo dirigido con n vértices, el número máximo de aristas es n *
(n - 1).
Algoritmos de búsqueda elementales.
Aquí vemos 2 algoritmos de búsqueda que aplican teoría de grafos y son considerados los 2
algoritmos más importantes de esta característica.
BFS (Breadth-First Search)
BFS es un algoritmo de búsqueda en grafos que se utiliza para explorar todos los vértices de un
grafo en un orden determinado. BFS se basa en la idea de explorar primero todos los vértices
adyacentes a un vértice dado antes de explorar vértices más alejados.
El proceso de BFS se realiza en dos fases:
1. Marcar el vértice inicial como visitado y agregarlo a una cola.
2. Mientras la cola no esté vacía, extraer un vértice de la cola y marcarlo como visitado.
Luego, para cada vértice adyacente no visitado, marcarlo como visitado y agregarlos a la
cola.
BFS es útil para muchas aplicaciones, incluyendo:
•
•
•
•
Encontrar el camino más corto entre dos vértices en un grafo no ponderado.
Determinar si existe un camino entre dos vértices en un grafo.
Encontrar componentes conexas en un grafo no dirigido.
Encuentre la distancia mínima entre dos vértices en un grafo ponderado.
En resumen, BFS es un algoritmo de búsqueda en grafos que explora los vértices en un orden
determinado y es útil para muchas aplicaciones, incluyendo encontrar caminos más cortos,
determinar la conectividad y encontrar componentes conexas.
DFS (Depth-First Search)
DFS es un algoritmo de búsqueda en grafos que se utiliza para explorar los vértices de un grafo en
un orden profundo. A diferencia de BFS, que explora primero los vértices adyacentes a un vértice
antes de explorar vértices más alejados, DFS explora primero un camino profundo hacia abajo
antes de regresar y explorar otro camino.
El proceso de DFS se realiza en dos fases:
1. Marcar el vértice inicial como visitado y empujarlo a una pila.
2. Mientras la pila no esté vacía, extraer un vértice de la pila. Para cada vértice adyacente no
visitado, marcarlo como visitado y empujarlo a la pila.
DFS es útil para muchas aplicaciones, incluyendo:
•
•
•
•
•
Encontrar componentes conexas en un grafo no dirigido.
Encontrar ciclos en un grafo
Encontrar camino entre dos vértices en un grafo.
Realizar una clasificación topológica en un grafo dirigido acíclico.
Encuentre la distancia mínima entre dos vértices en un grafo no ponderado.
En resumen, DFS es un algoritmo de búsqueda en grafos que explora los vértices en un orden
profundo y es útil para muchas aplicaciones, incluyendo encontrar componentes conexas, ciclos,
caminos y realizar una clasificación topológica.
Orden topológico
Un orden topológico de un grafo acíclico dirigido G = {P;E} es una ordenación lineal de todos sus
vértices tal que E contiene una arista entonces u aparecerá antes de v en el orden.
Orden topológico y un grafo dirigido
Un grafo dirigido G = {P, E} es acíclico siempre y cuando exista un orden topológico en sus vértices,
a continuación, se muestra una representación de grafica de un grado acíclico dirigido
Y aquí se muestra el mismo grafico ordenado de forma topológico
Gráfico como modelo de programa
Cuando hablamos de una abstracción teórica de grafos, un programa constara de dos tipos de
actividad:
•
•
Computación: asociada con vértices de la grafica
Comunicación: asociada con las aristas de la grafica
Vértices
En este caso el vértice sería el nodo y el computo asociado a la tarea, hay que tomar en cuenta
que una tarea puede variar desde una instrucción u operación atómica hasta hilos o declaraciones
compuestas como bucles, bloques básicos y secuencias de estos.
Nodos
Un nodo no puede comenzar a ejecutarse hasta que hayan llegado todas sus entradas y ninguna
salida esté disponible hasta que termine, en el momento en que termine todas las salidas deben
estar disponibles nuevamente para la comunicación simultánea.
Costos de computación y de comunicación
Normalmente estos costos se miden con tiempo en base al tiempo que tarda un cómputo o una
comunicación en el sistema de destino y esto se incorpora al modelo d e grafico mediante la
asignación de pesos a los elementos del gráfico.
Criterios de comparación
•
•
•
Tipos de cómputo:
Esto engloba el cuestionamiento de que tipo de cálculos de pueden representar
eficientemente con el modelo gráfico, dichos modelos gráficos pueden ser distinguidos en
cuanto a la granularidad modelada y la capacidad de reflejar cálculos iterativos.
Arquitectura paralela:
Este criterio responde el cuestionamiento de para que arquitectura de sistema paralelo
suele emplear el modelo gráfico, los modelos paralelos genéricos pueden ser clasificados
en base a su tipo de instrucción y flujo de datos, su arquitectura de memoria y su modelo
de programación.
Técnicas y algoritmos:
Con este criterio respondemos el cuestionamiento de cuales serían aquellos algoritmos y
técnicas que pueden ser aplicadas al modelo grafico siendo estos generalmente utilizados
para análisis de dependencia, transformaciones de programas, mapeo y programación.
Grafo de flujo
El grafo de flujo (FG) consigue una representación concisa de la estructura de un cálculo iterativo
introduciendo información de temporización en el grafo para poder distinguir entre comunicación
“intra” e “inter” iteración.
El grafo de flujo tiene dos características esenciales, siendo la primera de ellas que sus nodos
representan tareas que pueden ejecutarse varias veces, y no instancias de tareas donde cada nodo
representado se ejecuta exactamente una vez, también, el grafo de flujo no es generalmente
acíclico. Pero pueden surgir ciclos en relación con la dependencia entre iteraciones con el
resultado siendo factible
Modelo de ejecución basado en datos
Un nodo puede empezar su ejecución si cada arista de entrada contiene un numero positivo de
fichas y cada arista de salida tiene al menos un espacio en la cola. Hay que tomar en cuenta que
antes de iniciar la ejecución el nodo eliminara una ficha de cada arista de entrada y colocara una
ficha en cada arista de salida después de finalizar la ejecución. Este modelo de fichas es
considerado un modelo de ejecución basado en datos.
Gráficos de dependencia (DG)
En este tema se analizan las relaciones de dependencia dirigidas entre tareas. Uno podrías
representar las tareas de los programas como nodos y las relaciones de dependencia como aristas,
correspondientes al modelo de grafos definida. Representando cada tarea por un nodo y toda
relación de dependencia por una arista desde la causa hasta la tarea dependiente se obtiene un
gráfico que refleja la estructura de dependencia.
Un gráfico de dependencia es un tipo de grafo que representa las relaciones de dependencia entre
elementos o componentes. En un gráfico de dependencia, los nodos representan los componentes
y las aristas representan las dependencias entre ellos.
Los gráficos de dependencia se utilizan en muchas áreas, como la programación, la gestión de
proyectos y la ingeniería de software. En la programación, por ejemplo, los gráficos de
dependencia se utilizan para representar las relaciones entre módulos de software, módulos de
bibliotecas o clases en un sistema.
En un gráfico de dependencia, un bucle anidado puede ser representado mediante una
dependencia circular entre los componentes involucrados en el bucle. Esto significa que un
componente A depende de un componente B, mientras que el componente B depende del
componente A.
Los bucles anidados pueden ser un problema en la resolución de problemas o en la planificación
de tareas, ya que pueden causar una dependencia infinita y hacer que el sistema se bloquee. Por
lo tanto, es importante identificar y resolver los bucles anidados en un gráfico de dependencia.
Hay varios enfoques para resolver los bucles anidados en un gráfico de dependencia. Un enfoque
común es modificar la dependencia para que no haya una dependencia circular. Por ejemplo, se
puede agregar un componente intermediario para romper la dependencia circular o se pueden
reorganizar los componentes para evitar la dependencia circular.
Otro enfoque es utilizar técnicas de programación como el control de flujo para evitar el bucle
anidado. Por ejemplo, se pueden agregar condicionales para salir del bucle cuando se cumpla una
determinada condición.
Los gráficos de dependencia pueden ser útiles para visualizar la estructura de un sistema y para
identificar dependencias y relaciones complejas. También pueden ayudar a detectar problemas de
diseño, como dependencias circulares, y a planificar el orden de las tareas durante la resolución de
problemas.
Conclusiones;
José Antonio Rodríguez Basaldua
José Homero Rodríguez Basaldua
Ranfery Josua Peregrina Morales
Angie Abigail Monteverde Tapia
Descargar