算法的时间复杂度是否取决于输入的数量?

时间:2017-11-18 10:38:59

标签: algorithm time-complexity big-o

对于100个输入:

案例1:

for i in range(100):
         print(i*i)

是否在复杂城市O(100)?

案例2: 我们手动编写了print()函数100次,如

print(1*1)
print(2*2)
.
.
.
print(100*100)

这个的复杂性是什么,O(1)或O(100)?

2 个答案:

答案 0 :(得分:1)

为简单起见,您可以使用迭代计数,同时用大O表示法表示时间复杂度。但实际上,时间复杂度取决于迭代次数以及每次迭代内的指令。这一切都取决于用例。如果计算复杂函数的时间复杂度只是为了估计近似周期,那么只考虑迭代计数可能就足够了但是如果你是一个优化工程师并且你正在尝试优化模块,那么你将非常需要在每次迭代中处理说明。

答案 1 :(得分:0)

如果我们假设我们需要 N 操作来执行printf,我们将在两种情况下都有 100N 操作(我们在第1种情况下省略了比较)。

现在,为了计算复杂性,我们必须考虑一个参考,一个在程序实例中不同的参考,以便根据该参考的变化表达操作数​​量的变化。对于您的程序的每个实例,您将具有完全相同的行为,因此您始终具有 100N 操作。由于我们的实例之间没有变化,我们可以推断出复杂度 O(1)

即使这是正确的答案,但这不是唯一的答案。您必须知道我们还可以说复杂性是 O(100),或 O(1000),或 O(您想要的每个数字)< / strong>即可。为什么?要理解这一点,我们必须回到O符号的定义。简单来说,一个程序在 O(某事物),如果我们能找到一个常量 C ,那么对于这个程序的每个实例,我们执行的操作数量低于 C *的东西。换句话说,操作数量成比例增长。在我们的例子中,由于 N 是一个常数,我们将 C = 100N ,我们将得到:操作次数低于 C * 1 ,所以 O(1)。但我们也有:操作次数低于 C * 100 ,因此 O(100)。低于 C * 1000 的操作次数,因此 O(1000),等等......

所有这一切都是由于我们计划的运营数量没有变化。