[英]How do i analyze the running time of a function with a for loop with an if statement?
[英]How to Analyze the Running Time of a Python For-Loop?
考慮以下對經典 for 循環的逐行分析:
1 for (int i = 0; i < N; i++) { | 1 + N + (N - 1)
2 |
3 //do something | c
4 |
5 } |
在此示例中,for 循環的初始化采用一個原始操作,循環條件被檢查N
次並且變量i
遞增N - 1
次,而循環主體采用c
原始操作,對於某個常量c
。 這意味着第1
行執行了1 + N + (N - 1)
次,而循環體執行了N
次。 但是,在 Python 中,此分析不起作用,因為 Python 中的 for 循環是使用迭代器實現的。 考慮以下簡單示例:
1 for i in range(len(N)): | ?
2 //do something | c
如果我想像上面那樣逐行分析這個代碼片段的運行時間,我該怎么做? 我應該假設第 1 行像在經典的 for 循環中一樣執行N
次,還是說在 Python 中第 1 行執行一次並且只有循環體執行N
次更有意義?
range()
給你一個迭代器。 從迭代器獲取下一個值是一個O(1)
操作。 for 循環僅從迭代器中獲取下一個值N
次,這使得它成為N * O(1)
或O(N)
。 當迭代器引發由 for 循環處理的StopIteration
以退出循環時,循環退出。 這也是O(1)
。
python中的高階運算不能像C中的那樣完全算出來。
好像你在嘗試計算漸近線,但你不明白它是如何工作的:(
你不能說,經典的 for 循環(例如 c++)執行T(C * (1 + N + (N - 1))
,因為一切都取決於 1000 和 1 個其他東西,例如編譯器......
如果你想計算漸近(在我們這個時代)——最好使用 O 表示法,它表示兩個代碼都使用O(C * N)
操作執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.