首页 文章

哈密顿循环

提问于
浏览
1

使用回溯的哈密顿循环问题的最坏情况时间复杂度是多少?是O(n!)还是O(n ^ n)?因为我试图找出复杂性并且它出现了O(n×n!),它更像是O(n ^ n),而不是O(n!) .

1 回答

  • 2

    用于找到哈密顿循环的强力解决方案需要O(n!)工作(实际上是O(n ^ n),但是O(n ^ n)不是紧的上限) .

    具有n个节点的图G中的哈密顿循环具有形式H = v_1,v_2,v_3,...,v_n,v_1 .

    由于 H 包含 G 中的每个节点,我们可以从任意选择的节点开始搜索,例如v_1 . 随后,有 n-1 个候选节点成为第二个节点 v_2 (即,所有节点,但 v_1 本身);第三个节点 v_3n-2 个选择(即除了 v_1v_2 的所选候选者之外的所有节点),依此类推;在最后有 v_1v_n-1 的候选人修复时, v_n 还剩下一个候选人 .

    (i)这导致最多(n-1)(n-2)......(2)(1)=(n-1)!组合 . (ii)在一个简单的实施中,检查每个组合需要O(n)工作;即,为了检查给定组合是否是哈密顿循环,我们遍历给定组合的整个序列并确保它具有哈密顿路径的所需属性 .

    因此,

    整体复杂度为O(n)x(n-1)! = O(n!)

    当然,我们可以使用各种技术减少所需的工作,例如分支和绑定方法 .

相关问题