如何计算算法的增长率和时间量?

时间:2016-07-16 14:02:05

标签: python algorithm time complexity-theory

我目前正在享受Allen Downey的 Think Complexity ,几个小时前我完成了关于增长率的部分。我暂停阅读和谷歌搜索增长率,并扩大了书给我的信息。我还发现您可以计算算法计算原始数据所需的时间的数量。我有很多问题无法通过谷歌回答,或者我的回答中需要个人接触,因为这真的有助于我理解。我的问题是:

1 - 如何计算简单算法的增长率?例如,我只是编写了这个循环来使用Tayler系列以弧度计算给定角度的正弦值:

    for i in range(0, 360):
        return sum(((-1)**i / (factorial((2 * i) + 1))) * d ** ((2*i) + 1))

和阶乘:

def factorial(n):
    factorial = 1
    for i in range(1, n+1):
        factorial *= i

return factorial

如何计算其增长率?

2 - 我熟悉了一些非常糟糕的算法,比如Bogosort。使用bogosort对数组进行排序需要花费大量时间。但是你如何计算时间呢?它因计算机而异。

3 - Big-O表示法是什么?它与增长率有什么关系?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

通常,计算函数所需的时间并不是一个好方法,因为它取决于许多因素。出于这个原因,我们经常在计算步骤方面表达复杂性。

存在多种符号(big-Oh,big-Omega,big-Theta)。 Big-Oh表示上限,因此O(n)表示在最坏情况下它将执行n步。

Big-Omega(Ω)是下限,因此Ω(n)表示最少n步。 两者的组合是big-thetaӨ,因此,Ө(n)表示它将只需要n步。

在您的情况下,factorial被定义为

def factorial(n):
    factorial = 1
    for i in range(1, n+1):
        factorial *= i

return factorial

此函数将从1循环到n + 1,因此,它取决于其参数n。我们可以说它将执行恰好n步,因此,我们可以说factorial在Ө(n)中。请注意,这显然是线性的。