O(1) 和 O(n) 的區別


舉個簡單的例子,要從0加到n,我們會這么寫:
int sum = 0;
for(int i = 0; i<=n; ++i)
{
   sum += i;
}
一共算了n次加法,那么就說這個時間復雜度是O(n)。當然O(n)的精確的概念是,是n的最高次方,比如,某個計算共計算了3n + 2次,那么這個時間復雜度也是O(n),因為3n + 2中的最高次方是n。

如果代碼這么寫:
int sum = 0;
for(int i = 0; i<=n; ++i)
{
   for(int j = 0; j <=n; ++j)
   {
      sum += (i + j);
   }
}

很顯然一共算了n^2次加法,那么就說這個時間復雜度是O(n^2),和上面類似,如果某個算法計算了3*n^2 + n + 1次,其時間復雜度仍然是O(n^2),因為3*n^2 + n + 1中最高的次方是n^2

所謂O(1)就是計算的次數是個常量,我們還以上面從0加到n的例子來說,如果我們用等差數列的公式,那么,代碼可以這么寫:
int sum = n * (n + 1) / 2
不管n有多大(當然不能溢出了),通過上面的公式只需計算一次,也就說計算的次數是不變的,這種情況的時間復雜度就可以說成O(1)。 再比如如果某個計算,不管其他條件怎么變化,均只需計算5次即可得出結果,那么這種情況的時間復雜度,也是O(1)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM