Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 每次迭代循环变量发生变化时的复杂性? A(q,cList){ 对于(i=1;i_Algorithm_Complexity Theory_Amortized Analysis - Fatal编程技术网

Algorithm 每次迭代循环变量发生变化时的复杂性? A(q,cList){ 对于(i=1;i

Algorithm 每次迭代循环变量发生变化时的复杂性? A(q,cList){ 对于(i=1;i,algorithm,complexity-theory,amortized-analysis,Algorithm,Complexity Theory,Amortized Analysis,这里我们有两个输入,它们增加了复杂度,例如,输入A(2,[1100])。外部循环的迭代次数将由函数A的第一个参数决定,这里是2,我们称它为n,而对于函数B中的第二个循环,它的迭代次数将由函数A的第二个参数决定,在这种情况下,[1100]。通过这些,我们将通过O(n*max(cList[])计算最坏情况下的复杂度,其中max取cList中最长元素的长度 我本打算称这种复杂性分析过于悲观,但当我们渐进地考虑时,您的运行时间将主要受到cList中的最大值的影响,这取决于c对每个迭代的更改。如果它与q有

这里我们有两个输入,它们增加了复杂度,例如,输入
A(2,[1100])
。外部循环的迭代次数将由函数
A
的第一个参数决定,这里是2,我们称它为
n
,而对于函数
B
中的第二个循环,它的迭代次数将由函数
A
的第二个参数决定,在这种情况下,
[1100]
。通过这些,我们将通过
O(n*max(cList[])
计算最坏情况下的复杂度,其中max取
cList
中最长元素的长度


我本打算称这种复杂性分析过于悲观,但当我们渐进地考虑时,您的运行时间将主要受到
cList

中的最大值的影响,这取决于c对每个迭代的更改。如果它与
q
有关,则可能是O(n^2),但如果它只是
j
上面的几个固定元素,那么它可能是O(n)。我们假设要搜索q个关键字,c是每个关键字的结果长度。那么,它是O(q)吗?@ggorlenHmm,我猜是O(n)这里是因为c和q之间没有关系,所以如果输入大小增加,字符串大小也不一定会增加。我很想听听其他想法。不,这是误解。假设我们有2个关键字要搜索。如果第一个关键字包含5个文档,那么c是5。如果第二个关键字包含7个文档,那么c是7…@ggorle没有更正式的方法将最坏情况下的复杂度表示为
O(q*max(cList[i]),其中i=1->q-1
。还要注意,我忽略了
在这里做一些事情,为了简单起见,我想复杂度应该是
O(n*sum(cList[])
。好吧,不要认为
O(n*sum)
是正确的。也许
O(sum(cList[])
的可能性更大,但在这里我们试图得到一个上限。正如我所说的,最坏的情况应该是
O(n*max(cList[])
。如果
A(100,[100,100,…,100])
数组中的所有值都是100,那么复杂度会是多少?如果你说max(cList[]),它将是100,但总和将是
100*(100+1)/2
,。在你的例子中,
n
是100,而
cList[]
的最大元素也是100。因此,按照我的例子,它将是
O(n*max(cList[])
So
100*100
。我认为
n*sum
在这里没有意义。这里的复杂性是在
O(m*n)类中的
我认为,您所建议的是一种不同的逻辑不适合这里。另外,
100*(100+1)/2
是从1到100的所有数字的总和公式。
A(q, cList){                 
    for(i=1;i<q;i++){       // q is the number of keywords in the query
        B(cList[i]);            
    }
}

B(c){
    for(j=1; j<c;j++){  // c specifies how many times the keyword is included, and taken as input
        do something
    }
}

For example: 
A(2, [5, 7])     // 2 keywords are searched, that are included in 5 and 7 documents
A(2, [100, 1500]) // 2 keywords are searched, that are included in 100 and 1500 documents
A(3, [1, 10000, 1500]) // 3 keywords are searched, that are included in 1, 10000 and 1500 documents