Algorithm 嵌套While循环的算法复杂性

Algorithm 嵌套While循环的算法复杂性,algorithm,runtime,discrete-mathematics,Algorithm,Runtime,Discrete Mathematics,所以我在这一点上有点麻烦,因为变量I。我只是不知道当它处于第二个while循环时如何治疗。对于我的外部循环,我知道它将运行log_4(n^2)迭代。对于内部while循环,我计算了迭代次数为(2n^3-3)/I。我正在努力研究如何将这两个函数组合在一起,以获得这个函数的总体复杂性。非常感谢您的任何意见 function p(n) i = 1; while i < n^2 do j = 3; while j < 2n^3 do

所以我在这一点上有点麻烦,因为变量I。我只是不知道当它处于第二个while循环时如何治疗。对于我的外部循环,我知道它将运行log_4(n^2)迭代。对于内部while循环,我计算了迭代次数为(2n^3-3)/I。我正在努力研究如何将这两个函数组合在一起,以获得这个函数的总体复杂性。非常感谢您的任何意见

function p(n)
    i = 1;
    while i < n^2 do
        j = 3;
        while j < 2n^3 do
            j = j + i;
        end
        i = 4i;
    end
函数p(n)
i=1;
而我呢
j=3;
当j<2n^3时
j=j+i;
结束
i=4i;
结束

我数学不好,但我正在努力回答这个问题

首先,让我们从第一次迭代开始计算:

  • i=1:j增加约2n^3倍(分析复杂性时可忽略该常数)
  • i=4:j增加约2n^3/4倍
  • i=16:j增加约2n^3/16倍
  • i=n^2:j增加约2n^3/(n^2)倍
总的来说,j增加了: (2n^3)+(2n^3)/4+(2n^3)/16+(2n^3)/64+…+(2n^3)/(n^2)次。 即:


所以它是O(n^3)。

对于内环,存在一个i=1的情况,一开始就有一次。 对于i=1,内循环大约有2n^3次迭代,我们可以说外循环的第一次运行的复杂性是O(n^3)

注意,由于我们试图计算复杂性,我将去掉常量和系数

对于i的其他值,内循环迭代的#约为n^3/i。所以,当我增长时,迭代的数量将显著减少。最后,i~=n^2的最后一个值将是n

现在,我们有一个类似于n^3+…+的和这给了我们总的复杂性。 这个总和中的项数是logu4(n^2)=2logu4(n),比如logu4(n)

通常,我们知道n^3+n^2+n与n^3相同。但问题是,在这种情况下,我们能想到同样的情况吗?因为在这种情况下,有更多的项,项的数量取决于n。让我看看

即使所有项都是n^3,结果也将是log_4(n)*n^3。 但在这个系列中,其他项的值呈几何形式下降,不再保持为n^3。此外,对数_4(n)对于人们通常处理的一大组数字来说是非常小的值。事实上,人们不能简单地忽略它,但当我们一起考虑它是一个小数目和其他术语“急剧下降”;您可以忽略log_4(n)并且我们可以说复杂性是O(n^3)。

这不是一个精确的数学解,但为了方便你们,如果你们确定我们在做什么,我们可以使用这种估算方法。这就是我的观点,也是我这样解释的原因

如果你在寻找更具体的东西,你可以说它在O(n^3)和O(log_4(n)*n^3)之间

此外,我还计算了一些不同n值的实验值,以确定。您可以看到数字在代码中的行为,以及迭代次数与n^3之间的关系。结果如下:

Test #1:
n: 15
n^2: 225, n^3: 3375
...i=1, added 3375 iterations
...i=4, added 843 iterations
...i=16, added 210 iterations
...i=64, added 52 iterations
Total # of iterations for this test case: 4480

Test #2:
n: 56
n^2: 3136, n^3: 175616
...i=1, added 175616 iterations
...i=4, added 43904 iterations
...i=16, added 10976 iterations
...i=64, added 2744 iterations
...i=256, added 686 iterations
...i=1024, added 171 iterations
Total # of iterations for this test case: 234097

Test #3:
n: 136
n^2: 18496, n^3: 2515456
...i=1, added 2515456 iterations
...i=4, added 628864 iterations
...i=16, added 157216 iterations
...i=64, added 39304 iterations
...i=256, added 9826 iterations
...i=1024, added 2456 iterations
...i=4096, added 614 iterations
...i=16384, added 153 iterations
Total # of iterations for this test case: 3353889

Test #4:
n: 678
n^2: 459684, n^3: 311665752
...i=1, added 311665752 iterations
...i=4, added 77916438 iterations
...i=16, added 19479109 iterations
...i=64, added 4869777 iterations
...i=256, added 1217444 iterations
...i=1024, added 304361 iterations
...i=4096, added 76090 iterations
...i=16384, added 19022 iterations
...i=65536, added 4755 iterations
...i=262144, added 1188 iterations
Total # of iterations for this test case: 415553936

Test #5:
n: 2077
n^2: 4313929, n^3: 8960030533
...i=1, added 8960030533 iterations
...i=4, added 2240007633 iterations
...i=16, added 560001908 iterations
...i=64, added 140000477 iterations
...i=256, added 35000119 iterations
...i=1024, added 8750029 iterations
...i=4096, added 2187507 iterations
...i=16384, added 546876 iterations
...i=65536, added 136719 iterations
...i=262144, added 34179 iterations
...i=1048576, added 8544 iterations
...i=4194304, added 2136 iterations
Total # of iterations for this test case: 11946706660

Test #6:
n: 5601
n^2: 31371201, n^3: 175710096801
...i=1, added 175710096801 iterations
...i=4, added 43927524200 iterations
...i=16, added 10981881050 iterations
...i=64, added 2745470262 iterations
...i=256, added 686367565 iterations
...i=1024, added 171591891 iterations
...i=4096, added 42897972 iterations
...i=16384, added 10724493 iterations
...i=65536, added 2681123 iterations
...i=262144, added 670280 iterations
...i=1048576, added 167570 iterations
...i=4194304, added 41892 iterations
...i=16777216, added 10473 iterations
Total # of iterations for this test case: 234280125572

Test #7:
n: 11980
n^2: 143520400, n^3: 1719374392000
...i=1, added 1719374392000 iterations
...i=4, added 429843598000 iterations
...i=16, added 107460899500 iterations
...i=64, added 26865224875 iterations
...i=256, added 6716306218 iterations
...i=1024, added 1679076554 iterations
...i=4096, added 419769138 iterations
...i=16384, added 104942284 iterations
...i=65536, added 26235571 iterations
...i=262144, added 6558892 iterations
...i=1048576, added 1639723 iterations
...i=4194304, added 409930 iterations
...i=16777216, added 102482 iterations
...i=67108864, added 25620 iterations
Total # of iterations for this test case: 2292499180787

仅仅是两个值的乘法不?这就是我用非常不同的逻辑得到的结果。希望这是对的!谢谢你的意见!“所以,你可以忽略log_4(n),我们可以说复杂性是O(n^3)。”你说我们可以忽略log_4(n),这是不合适的。O(logu4(n)*n^3)与O(n^3)有很大的不同。这里的确切上界是O(n^3)。这并不是因为“log_4(n)与n^3相比是一个非常小的数字”。@initrdmk是的,我知道在log_4(n)*n^3中不能忽略log_4(n),因为它是一个小数字。它是n的函数,对于不同的n,它对结果的影响可能非常不同。我的意思是“小”只是一个小小的贡献者。我的主要论点是在“本系列中其他项的值呈几何递减”部分。对不起,我用错误的方式陈述,现在我编辑了文本。谢谢你的更正。
Test #1:
n: 15
n^2: 225, n^3: 3375
...i=1, added 3375 iterations
...i=4, added 843 iterations
...i=16, added 210 iterations
...i=64, added 52 iterations
Total # of iterations for this test case: 4480

Test #2:
n: 56
n^2: 3136, n^3: 175616
...i=1, added 175616 iterations
...i=4, added 43904 iterations
...i=16, added 10976 iterations
...i=64, added 2744 iterations
...i=256, added 686 iterations
...i=1024, added 171 iterations
Total # of iterations for this test case: 234097

Test #3:
n: 136
n^2: 18496, n^3: 2515456
...i=1, added 2515456 iterations
...i=4, added 628864 iterations
...i=16, added 157216 iterations
...i=64, added 39304 iterations
...i=256, added 9826 iterations
...i=1024, added 2456 iterations
...i=4096, added 614 iterations
...i=16384, added 153 iterations
Total # of iterations for this test case: 3353889

Test #4:
n: 678
n^2: 459684, n^3: 311665752
...i=1, added 311665752 iterations
...i=4, added 77916438 iterations
...i=16, added 19479109 iterations
...i=64, added 4869777 iterations
...i=256, added 1217444 iterations
...i=1024, added 304361 iterations
...i=4096, added 76090 iterations
...i=16384, added 19022 iterations
...i=65536, added 4755 iterations
...i=262144, added 1188 iterations
Total # of iterations for this test case: 415553936

Test #5:
n: 2077
n^2: 4313929, n^3: 8960030533
...i=1, added 8960030533 iterations
...i=4, added 2240007633 iterations
...i=16, added 560001908 iterations
...i=64, added 140000477 iterations
...i=256, added 35000119 iterations
...i=1024, added 8750029 iterations
...i=4096, added 2187507 iterations
...i=16384, added 546876 iterations
...i=65536, added 136719 iterations
...i=262144, added 34179 iterations
...i=1048576, added 8544 iterations
...i=4194304, added 2136 iterations
Total # of iterations for this test case: 11946706660

Test #6:
n: 5601
n^2: 31371201, n^3: 175710096801
...i=1, added 175710096801 iterations
...i=4, added 43927524200 iterations
...i=16, added 10981881050 iterations
...i=64, added 2745470262 iterations
...i=256, added 686367565 iterations
...i=1024, added 171591891 iterations
...i=4096, added 42897972 iterations
...i=16384, added 10724493 iterations
...i=65536, added 2681123 iterations
...i=262144, added 670280 iterations
...i=1048576, added 167570 iterations
...i=4194304, added 41892 iterations
...i=16777216, added 10473 iterations
Total # of iterations for this test case: 234280125572

Test #7:
n: 11980
n^2: 143520400, n^3: 1719374392000
...i=1, added 1719374392000 iterations
...i=4, added 429843598000 iterations
...i=16, added 107460899500 iterations
...i=64, added 26865224875 iterations
...i=256, added 6716306218 iterations
...i=1024, added 1679076554 iterations
...i=4096, added 419769138 iterations
...i=16384, added 104942284 iterations
...i=65536, added 26235571 iterations
...i=262144, added 6558892 iterations
...i=1048576, added 1639723 iterations
...i=4194304, added 409930 iterations
...i=16777216, added 102482 iterations
...i=67108864, added 25620 iterations
Total # of iterations for this test case: 2292499180787