簡體   English   中英

一維和二維陣列的時間復雜度

[英]Time complexity of one dimensional and two dimensional arrays

例如,從用戶那里獲取大小為n的一維數組的輸入,我們知道它的時間復雜度為O(n)。

for(i=0;i<n;i=i+1)
     {
         scanf("%d",&a[i]);
     }

現在,如果數組是二維的,則時間復雜度為O(n ^ 2)

for(i=0;i<n;i=i+1)
{
   for(j=0;j<n;j=j+1)
   {
       scanf("%d",&a[i][j]);
   }
}

但是,即使二維數組也以與一維數組相同的方式保存。 本質上,這只是大小上的增加,為什么會有區別?

時間復雜度的不同是由於要存儲的元素數量。

對於線性一維數組,您以線性方式存儲n元素,並且它也以線性方式存儲。 所以時間復雜度是O(n)

對於2D數組,假設您存儲了m元素,這些元素實際上僅以線性方式存儲在內存中。 但是,您要使用的是將元素划分為行(和列)。 現在,例如,每行和每列的大小為n ,則您正在讀取n*n元素,僅是m元素( m == n*n )。 所以復雜度是O(m)O(n^2)

某種感覺上的問題,因為如果您有n個元素,則任一種方式都將是O(n),但是如果基於數組維之一進行測量,除非它是方矩陣,否則您將不會是n ^ 2 (我看到你的了)...所以最好把它想成O(h * w)還是0(n)...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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