【发布时间】:2011-06-21 15:00:18
【问题描述】:
我有这个无法解决的问题.. 这个 foo 算法的复杂度是多少?
int foo(char A[], int n, int m){
int i, a=0;
if (n>=m)
return 0;
for(i=n;i<m;i++)
a+=A[i]
return a + foo(A, n*2, m/2);
}
foo 函数被调用:
foo(A,1,strlen(A));
所以.. 我猜它是 log(n) * 内部 for 循环的东西.. 我不确定它是 log(n) 还是什么..
可能是 log^2(n) 的 theta 吗?
【问题讨论】:
-
不,这是我今天完成的考试,我想了解我是否做对了(我怀疑..)拜托,也许在这里问不是特别合适,但我在 cstheory.stackexchange 上问过,他们说我应该在这里问。
-
我不认为从功课中提问有问题,这只是礼仪(我相信)很清楚地表明它是
-
依赖大小写敏感是不好的(
a和A都被定义了),因为这会降低代码的可读性、代码搜索结果的相关性等……此外,m的值应该在函数本身内部计算以进行 DRY 编码。然后,您正在除一个整数,而您不知道它的值。除此之外,假设这是 C,a+=A[i]行上存在语法错误。最后但同样重要的是,第一次没有检查n和m的值的大小,所以当m很大而n很小时,很容易发生堆栈溢出。错误的代码。不敢相信这出现在考试中。 -
啊哈!你说得对!与其他人相比,这是相当不错的......仍然是我们所拥有的......
标签: algorithm computer-science complexity-theory