函数的平均大小写复杂度

时间:2011-04-05 17:04:41

标签: algorithm complexity-theory

以下函数的 average case complexity 是什么,因为输入是一组独立的统一自然数。

def d(a):    
    for i in range(len(a)):
        if a[i] == 0 or a[i] == 1:
            for j in range(i+1, len(a)):
                if not (a[j] == 0 or a[j] == 1):
                    swap(a, i, j)
                    break

您如何看待,如何用数学术语来解决这个问题?

2 个答案:

答案 0 :(得分:1)

for i in range(len(a)):

结果将是a的长度乘以range(len(a))中任何索引的平均时间(暂时忽略break)。

if a[i] == 0 or a[i] == 1:

两次访问a的值,所以让我们添加2 * [time to retrieve a[i]]a(无限集的元素,ℕ)的值是任何有限集(例如{0,1})的元素的概率无限接近于零。由于内部的其他代码需要有限的时间,我们可以放心地忽略它。

平均案例复杂度:2 len(a) [time to retrieve a[i]]Θ(len(a))O(len(a))

答案 1 :(得分:1)

省略所有细节,我们得到两个嵌套循环,表示二次算法。考虑到if,这么小的数字实际上会执行内部循环,而平均情况实际上是线性的。