Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
Big o while循环的大O_Big O - Fatal编程技术网

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
    }