阶乘时间算法O(n!)的示例

时间:2013-05-15 02:49:07

标签: algorithm complexity-theory time-complexity factorial

我正在研究学校的时间复杂度,我们的主要关注点似乎是多项式时间 O(n^c)算法和准线性时间 {{1}算法偶尔使用指数时间 O(nlog(n))算法作为运行时透视图的示例。但是,从未涉及过更大的时间复杂性。

我希望看到一个在阶乘时间 O(c^n)中运行的算法解决方案的示例问题。该算法可能是一种解决问题的简单方法,但不能在人工时间内人为膨胀。

如果因子时间算法是解决问题的最着名的算法,那么额外的街道信誉。

4 个答案:

答案 0 :(得分:39)

生成列表的所有排列

您有n!个列表,因此无法获得比O(n!)更高的效率。

答案 1 :(得分:16)

Traveling Salesman有一个天真的解决方案是O(n!),但是它有一个动态编程解决方案,它是O(n ^ 2 * 2 ^ n)

答案 2 :(得分:5)

列出数组的所有排列是O(n!)。下面是使用swap方法的递归实现。递归在for循环中,并且数组中的元素在位置交换,直到不再有元素为止。从结果计数中可以看出,数组中的元素数是n!。每个排列都是一个操作,有n个!操作

def permutation(array, start, result)
    if (start == array.length) then
        result << array.dup  
    end
    for i in start..array.length-1 do
        array[start], array[i] = array[i], array[start]
        permutation(array, start+1,result)
        array[start], array[i] = array[i], array[start]
    end 
    result   
end        


p permutation([1,2,3], 0, []).count  #> 6 = 3!
p permutation([1,2,3,4], 0, []).count #> 24 = 4!
p permutation([1,2,3,4,5], 0, []).count #> 120 = 5!

答案 3 :(得分:1)

这是一个使用Big O(n!)的简单示例:

这在python 3.4中

 def factorial(n):
    for each in range(n):
        print(n)
        factorial(n-1)