【发布时间】:2021-01-26 00:24:40
【问题描述】:
我正在学习高级 C++ 课程,但我很难找到锁定在 if 语句后面的嵌套 for 循环的 Big-Θ。不幸的是,我的教授(出于某种奇怪的原因)只是希望我们从 pre-req 课程中知道这一点(即使我在不同的大学学习了不同的课程内容)并且不会花时间教我。
我不想让任何人帮我解决我的作业,我真的很想学习这些概念,所以我在下面创建了自己独特的功能。鉴于第二个循环只运行了几次,我只是无法理解这种类型的函数是 Θ(n) 还是 Θ(n^2)。任何一般性的解释或关于我如何解决这些类型的问题的正确方向的指示将不胜感激:)
注意:假设变量n是任意大小的正整数。
int count = 20;
for (int i = 0; i < n; i ++) {
if (i == count) {
for (int j = 0; j < count; j++) {
// Some O(1) code
// Maybe a print to console or something
}
count *= 2;
}
}
【问题讨论】:
-
计算出最里面的语句总共执行了多少次。第一次运行 20 次
i == count,第二次运行 40 次,第三次运行 80 次,等等。 20 + 40 + 80 + 160 + ... = 20*(2^k - 1) 其中 k 是n 中小于 log_2 的最大整数。所以最里面的 O(1) 语句被执行了 ~N 次。 -
我的理解是,大 O 表示法是算法的平均时间或最坏情况时间。此外,嵌套循环是 O 时间的乘积。
标签: c++ time-complexity runtime