Here is the optimized version of the method:

  1. Use a set instead of a list for the 'visited' array to improve the efficiency of checking if a node has been visited.

  2. Use a dictionary instead of a list for the 'best_capacity' array to improve the efficiency of updating the capacities of the nodes.

  3. Use a named tuple instead of a tuple to store the information of the nodes in the priority queue to improve the readability of the code.

  4. Use a variable instead of '-10.**10' as the initial capacity value to improve the readability of the code.

  5. Remove the check for 'parent_list[destination] is None' since it is redundant.

  6. Simplify the code to construct the path by using a while loop instead of a for loop and a reverse operation.

Here is the optimized code:

from typing import List, Tuple
import heapq as hp

Node = Tuple[float, int, int]  # (capacity, current_node, parent_node)

def find_fitting_most_capacited_path(graph1: List[List[Tuple[float, float]]], graph2: List[List[float]], 
                                      origin: int, destination: int, minimum_capacity: float) -> Tuple[List[int], float]:
    # this is a dijkstra like algorithm that computes the most capacited path from the origin to the destination
    # the best capacity is according to graph1 but only edges with capacities >= minimum_capacity in graph2 are taken into account
    priority_q = [Node(float('-inf'), origin, None)]

    parent_list = [None] * len(graph1)
    visited = set()
    best_capacity = {i: float('-inf') for i in range(len(graph1))}
    best_capacity[origin] = 0.0

    while priority_q:
        capa_of_current_node, current_node, parent_node = hp.heappop(priority_q)

        if current_node not in visited:
            visited.add(current_node)
            parent_list[current_node] = parent_node

            if current_node == destination:
                break

            for neighbor, (capa, _) in graph1[current_node]:
                if neighbor not in visited and graph2[current_node][neighbor] >= minimum_capacity:
                    new_capa = min(capa_of_current_node, capa)
                    if new_capa > best_capacity[neighbor]:
                        best_capacity[neighbor] = new_capa
                        hp.heappush(priority_q, Node(-new_capa, neighbor, current_node))

    path = []
    current_node = destination
    while current_node is not None:
        path.append(current_node)
        current_node = parent_list[current_node]
    path.reverse()

    return path, best_capacity[destination]
Python 图算法优化:寻找容量最大的路径

原文地址: https://www.cveoy.top/t/topic/m89s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录