我必须编写一个算法,在最多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
需要两秒钟的计算,而不是一天半的时间。
我正在寻找一种通过任何必要手段加速计算的方法,但我发现这方面的信息非常少。有什么想法吗?