我在计算时间复杂度时遇到困难,尤其是while循环:
示例1:
while self.rotors == []:
for i in range(3):
rotor = input("Choose rotor {}: ".format(i + 1))
while rotor not in range(1, 6):
print("\nInvalid. You can only choose from 1 to 5 rotors.")
时间复杂度是O(n x 3 x r)还是O(3)?
示例 2:
for i in range(3):
start = input("Enter the starting point of rotor {}: ".format(i + 1))
while start not in self.rotors[i]:
print("\nEnter one alphabet character or a number form 0-9 ONLY.")
时间复杂度会是O(3 x n)还是O(3)?
一些可能对您有所帮助的注释:
关于时间复杂性,需要注意的一点是变量通常以某种方式与数据/输入相关。因为您是在循环中获得输入,所以在典型意义上,这里没有时间复杂性。此外,考虑示例2的状态。如果start不在自身中。转子,同时将始终评估为真,因此这是最坏的情况O(无穷大)。
时间复杂度通常是在假设一个常量输入的情况下进行评估的,作为一个除了自变量之外没有任何输入的函数。如果中断的条件依赖于循环中的用户,时间复杂度就不再是有用的度量。
最后一个注意事项是,在计算时间复杂度时,你会丢弃常数,所以在你的大O中永远不会有一个数字。
我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和
这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?
我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?
以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?
对于下面的循环, 时间复杂度是多少,我应该怎么想?我的猜测是外环总共运行。内环运行次。因此,时间复杂度应该是。 我说得对吗? 提前感谢。
如果我通过两个嵌套的For循环进行输入 外环的复杂度是O(X),但是我对内环的时间复杂度感到困惑,因为Y是可变的。