算法复杂度,3 次循环

问题描述

很简单的问题,但我有点不确定,刚进入 Big O。如果这只是 3 个循环,那就是 N^3,但是有恒定循环,还有一个循环到 n-1 ,这有点令人困惑。在这种情况下,复杂性如何变化?

算法:

for i=1 to 10 
    do for j=1 to n-1
        do for k=1 to 8

解决方法

在这种情况下,很容易计算迭代次数。

10 * (n - 1) * 8

您必须将其转换为 n 中的简单表达式,同时忽略常量(这是解释您需要做什么的直观方式;有一种数学方式可以表达这一点,但为简洁起见,我将省略它) .

10 * (n - 1) * 8 < 80 * n

所以

10 * (n - 1) * 8 = O(n)
,

常量循环确实改变了复杂性。考虑这一点的方法是在内循环中执行的操作总数。在您的示例中,它是 10 * (n - 1) * 8 操作。简化得到 80 * n - 80,在大 O 符号中显然只是 O(n)。