我有另外一个关于循环的问题。我知道2 for循环使运行时间为O(n ^ 2),因为你遍历列表n * n次。
但是两个while循环呢?
While (array1 is not empty)
if(~~~)
do ~~~
else(~~~)
do ~~~
while (array2 is not empty)
if(~~~)
do ~~~
else(~~~)
do ~~~
所以while循环嵌套在另一个while循环中。这是否也使运行时间n ^ 2,因为我们迭代第一个循环n次,第二次循环n次?任何帮助都会被贬低。
谢谢!
答案 0 :(得分:1)
在这种情况下,它看起来不像是嵌套的。有2个循环,由if / else分隔。在这种情况下,它将是O(n)。
如果while循环是嵌套的并且基于输入大小,那么它确实是O(n ^ 2)。你正在使用的循环“类型”并不重要,而是循环大小为n的输入这一事实。
答案 1 :(得分:0)
如你所说,嵌套的for循环运行在O(n²)。确定其中两个序列运行速度有多快的符号是O(2n²)。每次运行两个while循环的符号是O(2n)。
答案 2 :(得分:-1)
while (array1 isn't empty){
while (array2 isn't empty){
//code goes here
}
}
如果第一个数组有n个元素而第二个数组有m个元素,那么运行时为O(n * m)
在n和m相同的特殊情况下,它是O(n * n)
while (array1 isn't empty){
//code
}
while (array2 isn't empty){
//code
}
在这种情况下,运行时间为O(n)+ O(m),如果n大于或等于m,则为O(n),如果m大于或等于n,则为O(m)。