我正在研究各种解决方案的时间复杂度,因为我不太喜欢数学;我不能很好地计算出我的呼叫的最佳时间复杂度。
问题是,我不确定是否需要更长的时间才能通过带有1条语句的while循环获得嵌套的if-else,或者是否最好删除嵌套的if-else并在while循环中添加检查。
作为一般性的例子,这会执行得更快吗
while a>1 and b is True
if x is True:
a -= 1
else
a += 1
而不是
while a>1:
if x is True:
if b is True:
a -= 1
else:
a += 1
我记得嵌套if的结果是O(N^2),而简单while循环的复杂性是O(N),但是当while循环必须检查多个语句时会发生什么呢。
两者都有O(n)的复杂性,n与while循环迭代有关。如果其他语句不能改变这一点。试想一下:当你的输入变量变为无穷大时,你的迭代计数是如何伸缩的?线性?立体的?否则呢?
例如,检查以下伪代码:
for(x time)
for(y time)
for(z time)
do ....
if(z=x+y)
我们有嵌套循环,3次。所以复杂性是O(x*y*z),也就是O(n^3)。你们不在乎条件是否满足,因为当变量变为无穷大时,迭代计数不可缩放。
在决定复杂度时,通常应该检查嵌套循环,并检查哪些变量对迭代计数有重要意义。
我还建议大家阅读以下内容:https://www.cs.cmu.edu/~adamchik/15-121/讲座/算法复杂性/复杂性。html
毕竟这是一个深奥的话题。
我记得嵌套if的结果是O(N^2)
错误,嵌套的for
循环的复杂性为O(N^2)
而不是if
。
如果你有一个大小为N的数组
for i in arr:
for j in arr:
print "hello"
你会看到多少次“你好”的打印?N^2,这就是复杂性。
请注意,在循环中做什么并不重要(无论是打印、添加还是执行if语句),这都是固定成本。因此,你重新安排if语句的事实并不重要——这两种情况的复杂性完全相同。
重要的是while循环中的代码“主体”执行的频率,这就是复杂性的决定因素。
因为你们两个例子都有相同的复杂性,所以我们来分解第一个例子:
while a>1 and b is True
if x is True:
a -= 1
else
a += 1
如果x
是True
,则您的时间复杂度是无穷大的,因为当循环永远不会结束(至少直到整数a
溢出到负数为止。请注意,这意味着您的语句“当循环具有复杂性O(n)”也是错误的)。如果x
是False
,则您的代码的时间复杂度为O(a-1)
(或简单地O(a)
),因为它将通过a-1
迭代运行。
如果我通过两个嵌套的For循环进行输入 外环的复杂度是O(X),但是我对内环的时间复杂度感到困惑,因为Y是可变的。
我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和
我的困惑是- 如果我把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值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?
有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==
这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。 求出下面一段代码的时间复杂度,表示给定整数n的操作次数: 所以我认为外循环是,第一个内环是,第二个内环是。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。