游戏很简单:一个程序必须猜测&#39;一些给定的n使得1 <1。 n&lt; N,其中n和N是正整数。 假设我使用真正的随机数生成器函数(rng())来生成计算机的“猜测”,那么它将猜测&#39;在任何尝试中给定的n是1 / N.
伪代码示例:
n = a // we assign some positive integer value to n
N = b // we assign some positive integer value to N
check loop
{
if rng(N) = n
print some success message
exit program
else
back to the beginning of the check loop
}
好的,我对如何确定此算法的时间复杂度(特别是上限)感兴趣?我有点困惑。概率方面如何影响这一点?如果我理解正确,最坏的情况(理论上)是该程序永远运行?
答案 0 :(得分:1)
即使理论上你的程序可以永久运行,这里的复杂性也是 O(n) - 因为加倍你将每一步猜测特定值的概率减半,从而使步数加倍。即使程序可以使用给定的n运行永远,如果n大2倍,它将永远运行两次。
O表示法中的复杂性并不能告诉您将执行多少操作。它告诉您操作数量取决于输入大小。