Algoritmia - Ciclos de un grafo

 
Vista:

Ciclos de un grafo

Publicado por Ator (1 intervención) el 10/05/2004 17:49:35
Hola me gustaria saber si podia alguien ayudarme a encotrar un algoritmo que en un grafo busque todos los ciclos que tenga y escoger de todos los ciclo el que tenga latencia minima.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Búsqueda de ciclo con latencia mínima en grafo dirigido

Publicado por Alejandro (307 intervenciones) el 01/03/2024 19:42:24
Ator, buscar todos los ciclos en un grafo y seleccionar aquel con la menor latencia es un problema interesante. Sin embargo, ten en cuenta que encontrar el ciclo con la latencia mínima en un grafo general es un problema NP-difícil, lo que significa que no existe un algoritmo eficiente (polinómico) conocido para resolverlo en todos los casos.

Aquí te proporciono una implementación básica en Python utilizando la librería `networkx` para encontrar todos los ciclos en un grafo dirigido y luego seleccionar el ciclo con la menor latencia:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import networkx as nx
 
def find_all_cycles(graph):
    return list(nx.simple_cycles(graph))
 
def find_cycle_with_minimum_latency(graph, latencies):
    all_cycles = find_all_cycles(graph)
    if not all_cycles:
        return None
 
    min_latency = float('inf')
    selected_cycle = None
 
    for cycle in all_cycles:
        cycle_latency = sum(latencies[edge] for edge in zip(cycle, cycle[1:] + [cycle[0]]))
        if cycle_latency < min_latency:
            min_latency = cycle_latency
            selected_cycle = cycle
 
    return selected_cycle
 
# Ejemplo de uso
graph = nx.DiGraph()
graph.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1), (4, 5), (5, 2)])
 
latencies = {(1, 2): 3, (2, 3): 5, (3, 4): 2, (4, 1): 4, (4, 5): 1, (5, 2): 6}
 
selected_cycle = find_cycle_with_minimum_latency(graph, latencies)
 
print("Ciclo con latencia mínima:", selected_cycle)

En este ejemplo, el grafo tiene aristas con latencias asociadas, y la función `find_cycle_with_minimum_latency` encuentra todos los ciclos y selecciona el ciclo con la menor latencia.

Ten en cuenta que este enfoque podría no ser eficiente para grafos grandes, y la eficiencia puede depender del tamaño y la densidad del grafo. Si la eficiencia es crucial y conoces más sobre la naturaleza de tus grafos, podrías necesitar explorar algoritmos más especializados o aplicar técnicas específicas según el contexto de tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar