英文:
Time complexity of a for or while loop
问题
以下是翻译好的部分:
"The time complexity of a for loop with n as the input is O(n) from what I've understood till now but what about the code inside the loop?"
"for循环的时间复杂度,以n作为输入,根据我现在的理解是O(n),但循环内的代码呢?"
arr.remove(var)
"arr is a list with n elements and var can be a string or a number."
"arr是一个包含n个元素的列表,而var可以是字符串或数字。"
"How do I know if I should multiply or add time complexities? Is the time complexity of the above code O(n**2) or O(n)?"
"我如何知道是要相乘还是相加时间复杂度?上面的代码的时间复杂度是O(n**2)还是O(n)?"
arr.remove(var)
arr.remove(var1)
"What would the time complexity be now? What should I add or multiply?"
"现在的时间复杂度是多少?我应该相加还是相乘?"
"I tried learning about time complexity but couldn't understand how to deal with code having more than one time complexity."
"我尝试学习时间复杂度,但无法理解如何处理具有多个时间复杂度的代码。"
英文:
The time complexity of a for loop with n as the input is O(n) from what I've understood till now but what about the code inside the loop?
while var in arr:
arr.remove(var)
arr is a list with n elements and var can be a string or a number.
How do I know if I should multiply or add time complexities? Is the time complexity of the above code O(n**2) or O(n)?
for i in range(n):
arr.remove(var)
arr.remove(var1)
What would the time complexity be now? What should I add or multiply?
I tried learning about time complexity but couldn't understand how to deal with code having more than one time complexity.
答案1
得分: 2
在循环内部内容中,你需要了解时间复杂度。
```python
for i in arr: # O(n)
print(sum(arr) - i) # O(n)
在这种情况下,.pop(0)
嵌套在循环内部,所以你需要将复杂度乘以循环的复杂度:O(n) * O(n) > O(n*n) > O(n²)。
for i in arr: # O(n)
print(sum(arr) - i) # O(n)
print(sum(arr) - i) # O(n)
在这种情况下,它是
O(n) * (O(n) + O(n))
O(n) * O(n+n)
O(n) * O(2n)
O(n) * O(n)
O(n*n)
O(n²)
查看更多关于时间复杂度计算中何时添加和何时相乘的信息,请参考 When to add and when to multiply to find time complexity。
对于 while 循环,它不会改变任何内容:将内容与 while 的复杂度相乘。
<details>
<summary>英文:</summary>
You need to know the time complexity of the content inside the loop.
```python
for i in arr: # O(n)
print(sum(arr) - i) # O(n)
In this case, the .pop(0)
is nested in the forloop, so you need to multiply the complexity to the forloop complexity: O(n) * O(n) > O(n*n) > O(n²).
for i in arr: # O(n)
print(sum(arr) - i) # O(n)
print(sum(arr) - i) # O(n)
In this case, it's
O(n) * (O(n) + O(n))
O(n) * O(n+n)
O(n) * O(2n)
O(n) * O(n)
O(n*n)
O(n²)
See When to add and when to multiply to find time complexity for more information about that.
For a while loop, it doesn't change anything: multiply content with the complexity of the while.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论