我需要帮助for循环转换为和国家.有些很容易,但有些则有点棘手.我需要正确设置和符号设置.
像这样:(正确的例如循环)
举个例子:
for (int i = 0; i < n; i = i + 1)
a = i; //cost 1
总和1,i = 0到n-1 == n.
我需要以下帮助:
对数(只是正确的和符号)
for (int i = 0; i < n; i = 2 * i)
a = i; //cost 1
总和1,i = 0到log(n)-1 == log n.正确??
三重嵌套(总结符号和一步一步为什么它最终结束)
for (int i = 0; i < n; i = i + 1)
for (int j = 0; j <= i; j = j + 1)
for (int k = 0; k <= j; k = k + 1)
a=i; //cost 1
最佳答案 三重嵌套循环
我将给出一个简单但非常有用的方法来根据渐近符号分析这样的求和.
这是一种非常通用的方法,您可以使用它来绑定许多多个索引求和而无需花费太多精力.
上限
首先,让我们得出总和的上限.这很容易:
下限
在这种情况下的技巧是导出下限.经验法则是减小将较低求和指数递增到较高索引的分数的求和范围,然后将新的较低索引替换为嵌套循环中的较高索引.它也很简单:
把它放在一起
从两个不等式中,你可以推断:
在渐近分析方面给出了:
如您所见,您的三重嵌套循环具有相同的渐近时间复杂度:
for(int i = 0; i < n; i = i + 1)
for(int j = 0; j < n; j = j + 1)
for(int k = 0; k < n; k = k + 1)
//operations of cost 1