Big o while循环的大O
前几天我的作业中有一个问题,但我仍然不确定我是否正确Big o while循环的大O,big-o,Big O,前几天我的作业中有一个问题,但我仍然不确定我是否正确 for(int i =1; i <n; i++) //n is some size { for(j=1; j<i; j++) { int k=1; while (k<n) { k=k+C; //where C is a constant and >=2 } } } for(
for(int i =1; i <n; i++) //n is some size
{
for(j=1; j<i; j++)
{
int k=1;
while (k<n)
{
k=k+C; //where C is a constant and >=2
}
}
}
for(int i=1;i
因此while循环是O(n)
(因为C
是常数)
编辑:让我试着用另一种方式来解释它
从一个伪变量u
开始。循环
u=0;
while(u < MAX) {
u = u+1
}
它运行(n-1)/C
次
现在,检查u<(n-1)/C
相当于C*u
或C*u+1
,因此循环相当于
u=0;
while(C*u + 1 < n) {
u=u+1
}
这个循环看起来像
while(C*u + 1 < n) {
while(k < n) {
总而言之:
int k=1;
while (k<n){
k=k+C
}
intk=1;
而(k内循环实际上是O(n/C)=O(n)
,所以是的,总的来说它是O(n^3)
(第二个循环的上限是O(n)
)好的,您需要查看while循环体在给定的n和C值下运行了多少次。例如,n是10,C是3。该体将运行3次:k=1,k=4,k=7。对于n=100和C=2,该体将运行50次:k=1,3,5,7,9,…,91,93,95,97,99。这是一个按C计算直到n的问题。您应该能够计算从这条线索推断出Big-O复杂性。正式地说,您可以使用以下方法(西格玛表示法):
其中a
表示最内层循环中的常量操作数(a=1
如果要计算迭代的确切次数).你是说i@DeCaf我假设这是一个输入错误。请修复问题中的输入错误并保持格式一致。很抱歉,原始代码是伪代码,我必须用java重新编写。我不喜欢你对无限序列的计数方法(顺便说一句,渐进意味着什么)…一个简单的例子“循环的数量以1/2的速率随n
线性增长”更容易理解,也更准确“。你能详细说明一下吗?@user977151最简单的事情就是一步一步地进行分析。我试着用相反的方式重新进行分析,因为imgur.com完全被我的公司代理阻止了:|你能吗?我可以和你分享脚本。找不到这么多关于它的报价。我个人认为这会很酷。”(Latex甚至可以被编入索引,这是pic无法做到的),但我不确定其他人是否会喜欢它,因为它可能会让你的帖子的读者感到困惑,这取决于你添加它的方式,所以我将在家里观看它。[也许有人应该要求将某种Latex集成到html渲染器()]您能看到此网站生成的内容吗:?邮件大小超出了评论中允许的字符数。您有电子邮件地址吗?
u=0;
while(C*u + 1 < n) {
u=u+1
}
u=0;
k=1; // C * 0 + 1 = 1
while(C*u + 1 < n) {
while(k < n) {
u=u+1
k=k+C //C * (u+1) + 1 = C * u + 1 + C = old_k + C
int k=1;
while (k<n){
k=k+C
}