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

Python 最多k次枚举通过顶点的所有循环,python,performance,algorithm,graph-theory,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 ==

我必须编写一个算法来生成一个无向图中最多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值。然而,有人告诉我,该算法的运行时间为Okn^kn,如果能验证这一事实,我将不胜感激;从k=1到k=2需要两秒钟的计算时间,到一天半内无法完成的计算时间


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

Okn^kn是一个有效的界限。虽然没有特别的理由相信它对测试图来说是紧的,但我怀疑有太多的周期符合你的标准。这绝对不是所有图的紧界限,但我已经遇到过它变得更紧的情况,即几乎完整的图。