以下函数的 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
您如何看待,如何用数学术语来解决这个问题?
答案 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
,这么小的数字实际上会执行内部循环,而平均情况实际上是线性的。