Math 编写并求解此素数计数算法的递归?
我在准备考试,我遇到了一个问题,我对这门课不太在行,我完全被它难住了。我真的非常感谢你的帮助 假设您可以访问实时运行的算法isprime(n) O(n)(比如说,一个蛮力检查所有数字的可除性) 而不是n)。以下代码计算的素数小于 或等于其输入参数Math 编写并求解此素数计数算法的递归?,math,big-o,computer-science,recurrence,Math,Big O,Computer Science,Recurrence,我在准备考试,我遇到了一个问题,我对这门课不太在行,我完全被它难住了。我真的非常感谢你的帮助 假设您可以访问实时运行的算法isprime(n) O(n)(比如说,一个蛮力检查所有数字的可除性) 而不是n)。以下代码计算的素数小于 或等于其输入参数 boolean numprimes(int n) { if (n == 1) { return 0; } else if (isprime(n)) { return numprimes(n − 1) +
boolean numprimes(int n) {
if (n == 1) {
return 0;
} else if (isprime(n)) {
return numprimes(n − 1) + 1;
} else {
return numprimes(n − 1);
}
}
目标是分析num primes的运行时。通过以下方式实现此目标:
执行以下操作:
(a) 为T(n)的运行时间编写一个递归定义
一个大小为n的实例上的算法
(b) 求解递归定义
对T(n)进行迭代,用迭代法得到一个封闭形式
替换,猜测,通过归纳证明猜测,以及
最后根据你的猜测推断出一个封闭的。或者,你
可以使用重复替换来猜测封闭形式,并证明
通过归纳法纠正的封闭形式
非常感谢,我将非常感谢任何帮助 a)由于素数测试是在O(n)时间内进行的,因此重复性将是
T(n) = T(n-1) + O(n)
b) 解决了a部分后,剩下的就足够简单了。如果您向我展示您为解决此问题所做的工作,我可以为您提供更多帮助。作为提示,以下是重复出现的情况: T(1)=1 T(n)=T(n-1)+O(n) 这是因为总是有一个递归调用(在大小为
n-1
的输入上),并且每个单独的调用都不起作用
如果你把它改写成
T(1)≤ 一,
T(n)≤ T(n-1)+kn
您可以开始迭代。作为提示,最终结果应该是O(n2);我把细节留给你
希望这有帮助