[英]Determining Time and Space Complexity of program
因此,我在實習方面遇到了編碼方面的挑戰,其中一部分是確定程序的時空復雜性。 該程序大致如下。
while(A){
int[][] grid;
// additional variables
while(B){ //for loop involves iterating through grid
// additional variables
for(...)
for(....)
}
for(...) //for loop involves iterating through grid
for(....)
}
所以我說的是該程序總體上具有(A N ^ 2 + B N ^ 2)的時間復雜度,因此得出結論,它的攤銷時間為O(N ^ 2)。
至於空間的復雜性,我是否應該對所有變量使用的數字空間求和? 假設每個變量都是一個int並且循環A中有3個,循環B中有兩個,那么空間復雜度是(A * 24 + B * 16)嗎?
為避免錯誤,我傾向於使用一種方法,使您在每行做一個旁注,以表示該行被執行了多少次(更准確地說,可以包括最佳情況和最壞情況)。
考慮到示例,該想法可能如下所示:
num_exec
| while(A){
A | int[][] grid;
A | additional variables
|
| while(B){ //for loop involves iterating through grid
AB | additional variables
ABN^2 | for(...)
| for(....)
| }
|
AN^2 | for(...) //for loop involves iterating through grid
| for(....)
| }
要估算代碼的時間復雜度,只需簡單地累加這些邊注的數字即可(您可能已經做過了,盡管您得到的結果與我的略有不同):
至於您的內存復雜性 ,您的直覺是正確的8位整數。 但是,如果我們正在談論原始數據類型,則可以簡單地將它們視為常量。 因此,您應該非常關注復雜的數據類型,即數組,因為它會聚合多個原語。 總結起來,您要考慮指定用於保留數據的元素的數據大小。
因此,應用於示例:
memory
| while(A){
ANk | int[][] grid;
A3k | additional variables
|
| while(B){ //for loop involves iterating through grid
AB2k | additional variables
| for(...)
| for(....)
| }
|
| for(...) //for loop involves iterating through grid
| for(....)
| }
假設該grid
的大小 ,大小為的原始數據類型
外部循環中附加變量的總數為3 ,內部循環中附加變量的總數為2 ,那么總空間復雜度總計為:
注意,假設上面給出的復雜性 和
必須都大大小於
並完全獨立於它 。
您可能有興趣進一步解釋此鏈接上提供的問題。 希望能對您有所幫助(即使由於您提供的詳細信息而只是近似值),並祝您好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.