簡體   English   中英

確定程序的時空復雜度

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

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