枚举所有循环通过顶点最多k次

时间:2014-08-11 18:49:18

标签: python performance algorithm graph-theory

我必须编写一个算法,在最多k次通过顶点的无向图中生成所有周期。我使用递归深度优先搜索来获得针对k = 1的情况的这种算法的Python实现:

def loop_dfs(self, current_node, start_node, graph, current_path, all_loops, nodes_to_faces):

    if some_criteria_to_reject_cycle_is_met:
            return

    if current_node == start_node:
        all_loops.append(shift(list(current_path)))
        return

    else:
        for adjacent_node in set(graph[current_node]):
            if Graph.count(adjacent_node, current_path) < self.rep_num:
                current_path.append(adjacent_node)
                graph[current_node].remove(adjacent_node)
                graph[adjacent_node].remove(current_node)
                self.loop_dfs(adjacent_node, start_node, graph, current_path, all_loops, nodes_to_faces)
                graph[current_node].append(adjacent_node)
                graph[adjacent_node].append(current_node)
                current_path.pop()

列表是类中的变量,因此这里没有返回任何内容。我知道调整我想要的情况,我只需要将self.rep_num调整到所需的k值。但是,我被告知这个算法的运行时间为O((kn)^(kn))(可以理解这个事实的验证);从k=1转到k=2需要两秒钟的计算,而不是一天半的时间。

我正在寻找一种通过任何必要手段加速计算的方法,但我发现这方面的信息非常少。有什么想法吗?

0 个答案:

没有答案