为了与每个人保持一致,这是一个家庭作业。我不希望任何人为我提供彻底的答案,这更多是为了检查我是否正确理解事物或找出我做错了什么。
我得到了一些代码片段来确定它们的 Big-Oh 是什么。每个都在处理 for 循环,但是我们得到的最后两个让我有点失望。首先:
sum = 0;
for (i = 0; i < n; i++) //1
for (j = 0; j < i * i; j++) //2
for (k = 0; k < j; k++) //3
sum++;
我认为其中的 Big-Oh 将是 O(n^4)。#1 将运行 n 次,#2 将运行 n^2 次,#3 将运行 n 次,给我 n^4。但是,当我在 C++ 中正确编写并给出 n 值 10、100 和 1000(根据我的分配)时,n = 10 返回 7524(好,小于 10,000)n = 100 返回值 975,002,490,而上限将是 100,000,000。显然,我在对循环的分析中偏离了某个地方,但我不太确定在哪里。不确定 n = 1000 会返回什么,因为我的计算机已经运行了一段时间,而且似乎还没有准备好给我答案。
第二个片段如下:
sum = 0;
for (i = 0; i < n; i++) //1
for (j = 0; j < i * i; j++) //2
if (j % i == 0) //3
for (k = 0; k < j; k++) //4
sum++;
我相信我可以放心地忽略 if 语句,因为它的运行时间是测试的运行时间加上它的内容,这意味着我会再次提出 O(n^4)。