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中初始化为空是正确的。谢谢你指出错误。