Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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_Time Complexity_Complexity Theory - Fatal编程技术网

Algorithm 未知概率的计算复杂性

Algorithm 未知概率的计算复杂性,algorithm,time-complexity,complexity-theory,Algorithm,Time Complexity,Complexity Theory,假设有一份工作,并且有许多工人可用。 下面的代码可能是一个糟糕的优化想法。 但这只是为了分析复杂性 A is a set of N worker while (A is not empty) { B=empty set foreach a1 in A { foreach a2 in A { b= merge(a1, a2) if (b works better than a1 **and** b works better than a2)

假设有一份工作,并且有许多工人可用。 下面的代码可能是一个糟糕的优化想法。 但这只是为了分析复杂性

A is a set of N worker
while (A is not empty)
{
  B=empty set
  foreach a1 in A
  {
    foreach a2 in A
    { 
       b= merge(a1, a2)
       if (b works better than a1 **and** b works better than a2) 
          add b to B
    }
  }
  A=B
}
问题是“b比a1和a2更有效”的概率未知。
那么,如何估计上述代码的时间复杂度呢?

对于两个内部循环,复杂度与“b比a1和a2更好”的概率无关。
然而,代码似乎有点不完整,因为我没有发现while循环的出口。 不考虑while循环,时间复杂度将是

O(a1*a2)=O(N^2)

递推方程为

T(N)=T(N-1)+C


什么是
merge()
,什么是
B
?看起来像是固定时间操作。所以这没关系。@Nico Schertler。谢谢你指出这个问题。我更正了代码,在while循环中更新了一个。merge()表示a1和a2组合为一组工人。也就是说,“A”最初包含一组单个工人。然后,“A”逐渐包含更大的群体。假设复杂性被计算为“如果”语句的数量。我认为这个问题没有包含足够的信息。例如,在这个伪代码中,外部foreach中的一个更改。这是什么意思?其次,它看起来像是
B
只会不断增大大小,因此
A
永远不能为空(除非
B
开始时为空,并且从未向
B
添加任何内容)——这意味着代码永远不会终止。@PaulHankin当a1和a2中的任何一对都不保留“if”时,B为空。A在while内部更改,而不是外部foreach。我加了一个括号使它更清楚。B在while中初始化为空是正确的。谢谢你指出错误。