Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 函数的平均事例复杂度_Algorithm_Complexity Theory - Fatal编程技术网

Algorithm 函数的平均事例复杂度

Algorithm 函数的平均事例复杂度,algorithm,complexity-theory,Algorithm,Complexity Theory,如果输入是一组独立的统一自然数,则以下函数的是什么 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) bre

如果输入是一组独立的统一自然数,则以下函数的是什么

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
你认为如何用数学术语来处理这个问题

for i in range(len(a)):
结果是
a
的长度乘以
范围内任何索引(len(a))
的平均时间(现在我们忽略
中断

两次访问
a
的值,因此让我们添加
2*[检索a[i]]的时间]
a
的值(无限集合的元素,ℕ) 是任何有限集(如{0,1})的一个元素,它无限接近于零。由于进一步的代码需要有限的时间,我们可以安全地忽略它


平均案例复杂度:
2 len(a)[检索[i]的时间]
∈ <代码>Θ(len(a))⊂ <代码>O(len(a))

忽略所有细节,我们得到了两个嵌套循环,表示一个二次算法。考虑到
if
,如此小比例的数字实际上执行了内部循环,因此平均情况实际上是线性的。

小心!即使概率为0.0000001%,平均复杂度仍然是O(n²):渐近复杂性不考虑常数的“微小程度”。@akappa:0或1的概率。但现在我想起来了,OP应该指定自然数的分布。@akappa:这不完全正确。举个例子,如果代码只能执行log(N)在%的时间里,你会得到一个对数复杂度。在这种情况下,OP的语句是“随机自然数”,这意味着执行内环的概率是0,我们得到线性复杂度。你假设执行内环的概率非零,这只对有限的输入范围是正确的(当然,对于计算机上的任何东西,范围必须是有限的)。@larsmans:这就是问题所在,他没有说明概率分布。但我认为假设概率分布不依赖于n是现实的(即,他得到一个随机的、独立的、同分布的数字流)@Jerry Coffin:什么样的概率分布函数会导致内部循环执行O(logn)次?@larsmans不,a的值分布并不取决于它的长度。例如,[42]是一个有效的输入。你怎么说呢?我们对P(a=v)一无所知,其中v是一个数字向量。@akappa我们知道。我们知道a的长度,并且知道它的每个成员都是ℕ, 这是一个无限集。绘制无限集的特定元素的概率为零,因此绘制多个特定元素(即v)的概率为零。如果不指定输入数字的分布,则无法回答此问题。“随机”(均匀分布)自然数是不够的?不。分布在什么和什么之间?这些数是独立的还是不独立的?好的,我必须承认我这里缺乏信息。当我说随机自然数集时,我的意思是,这个集是独立的,统一的,从0到无穷大的数集。不知道如何用一个好的数学表达。词汇?如果在这种情况下,循环内部执行的概率为零,所以它是平凡的O(n)。
if a[i] == 0 or a[i] == 1: