Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 确定递归的BigO_Algorithm_Function_Big O_Discrete Mathematics - Fatal编程技术网

Algorithm 确定递归的BigO

Algorithm 确定递归的BigO,algorithm,function,big-o,discrete-mathematics,Algorithm,Function,Big O,Discrete Mathematics,我该如何快速确定这个问题的BigO?使用重复的反替代并找到模式。举个例子。我不完全确定dn是什么,但假设你指的是一个常数乘以n: 的递推方程解: T (1) = c T (n) = T (n/2) + dn 是: 这将使这个函数成为O(n)关系的重复部分是T(n/2)部分,实际上每次都将n的值减半 因此,您需要大约(log2 n)个步骤才能达到终止条件,因此算法的总体成本为O(log2 n)。您可以忽略dn部分,因为它是每个步骤的一个恒定时间操作 请注意,如上所述,问题不一定会终止,因

我该如何快速确定这个问题的BigO?

使用重复的反替代并找到模式。举个例子。

我不完全确定
dn
是什么,但假设你指的是一个常数乘以
n

的递推方程解:

T (1) = c    
T (n) = T (n/2) + dn
是:


这将使这个函数成为O(n)关系的重复部分是T(n/2)部分,实际上每次都将n的值减半

因此,您需要大约(log2 n)个步骤才能达到终止条件,因此算法的总体成本为O(log2 n)。您可以忽略dn部分,因为它是每个步骤的一个恒定时间操作

请注意,如上所述,问题不一定会终止,因为重复将任意值n减半不太可能正好达到1。我怀疑T(n/2)部分实际上应该读T(floor(n/2))或类似的内容,以确保它终止。

使用master定理 看


顺便说一句,假设d为正且足够小于n(问题大小),则递归的渐近行为为O(n)

要快速确定BigO,您必须有一些经验。要做到这一点,你必须练习。好吧,至少有什么方法你还有其他的信息吗?我希望会有一些开始的条件。像
T(0)=…
T(1)=…
如果这很明显,很抱歉,但是什么是
dn
?这是一个常数乘以
n
?好吧,我添加了初始条件哦,哇,wolfram也这么做了..这太疯狂了..但是我需要能够在测试中做这种事情你能澄清一下“能够在测试中做这种事情”是什么意思吗?我想能够确定这个函数的bigO这个bigO看起来是
O(n)
。我遗漏了什么吗?@Ani:他想知道技巧,而不是答案。(这不是很明显吗?)嗯,我想你和我一样陷入了同样的陷阱。我习惯于在计算复杂性的背景下看待BigO,这也是我的第一个想法。但问题很有可能是确定这个循环的解的BigO:)话虽如此,我很确定如果你可以解这个循环,你可以用O(1)来计算这个解。是的:),但我怀疑问题可能是关于这个解的极限行为,不具有计算给定解的T(n)的计算复杂性。当然,我可能错了。有人说第一个冲动是最好的:)
f(n) = f(n / 2) + cn
f(n) = 2c(n - 1) + c1