簡體   English   中英

如何分析Python For循環的運行時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM