」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 例:確定大 O

例:確定大 O

發佈於2024-08-10
瀏覽:662

本節給出了幾個確定重複、序列和選擇語句的 Big O 的例子。

實施例1

考慮以下循環的時間複雜度:

for (int i = 1; i k = k 5;
}

這是一個常數時間,c,用於執行

k = k 5;

由於循環執行了n次,所以循環的時間複雜度為

T(n) = (常數 c)*n = O(n).

理論分析預測了演算法的性能。為了了解演算法的執行情況,我們執行下面程式中的程式碼來取得 n = 1000000、10000000、100000000 和 100000000 時的執行時間。

Image description

我們的分析預測了該循環的線性時間複雜度。如範例輸出所示,當輸入大小增加 10 倍時,運行時間約增加 10 倍。執行結果證實了預測。

實施例2

以下循環的時間複雜度為何?

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

這是一個常數時間,c,用於執行

k = k i j;

外循環執行n次。對於外循環中的每次迭代,內循環都會執行 n 次。因此,循環的時間複雜度為

T(n) = (常數 c)*n*n = O(n^2)

時間複雜度為 O(n^2) 的演算法稱為二次演算法,它表現出二次成長率。隨著問題規模的增加,二次演算法會快速成長。如果將輸入大小加倍,演算法的時間就會增加四倍。具有嵌套循環的演算法通常是二次的。

實施例3

考慮以下循環:

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

外循環執行n次。對於 i = 1, 2, c ,內循環執行一次、兩次和 n 次。因此,循環的時間複雜度為

Image description

實施例4

考慮以下循環:

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

內循環執行20次,外循環執行n次。因此,循環的時間複雜度為

T(n) = 20*c*n = O(n)

實施例5

考慮以下序列:

for (int j = 1; j k = k 4;
}

for (int i = 1; i for (int j = 1; j k = k i j;
}
}

第一個迴圈執行10次,第二個迴圈執行20 * n次。因此,循環的時間複雜度為

T(n) = 10*c 20*c*n = O(n)

實施例6

考慮以下選擇語句:

if (list.contains(e)) {
System.out.println(e);
}
別的
for (物件 t: 列表) {
System.out.println(t);
}

假設清單包含n個元素。 list.contains(e) 的執行時間為 O(n)。 else 子句中的迴圈需要 O(n) 時間。因此,整個語句的時間複雜度為

Image description

實施例7

考慮整數 n 的 a^n 計算。一個簡單的演算法將 a 乘以 n 次,如下所示:

結果 = 1;
for (int i = 1; i 結果*=a;

此演算法需要 O(n) 時間。不失一般性,假設 n = 2^k。您可以使用以下方案改進演算法:

結果 = a;
for (int i = 1; i 結果 = 結果 * 結果;

此演算法需要 O(logn) 時間。對於任意的n,可以修改演算法,證明複雜度仍然是O(logn)。

為了簡單起見,由於 0(logn) = 0(log2n) = 0(logan),所以省略了常數基數。

版本聲明 本文轉載於:https://dev.to/paulike/examples-determining-big-o-430b?1如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • C ++如何實現類型的擦除:技術的比較?
    C ++如何實現類型的擦除:技術的比較?
    在c 虛擬函數使用模板功能,將實際對象存儲在void*指針中。 boost.function利用此技術隱藏函數的真實類型。 基於template基於template的類型擦除而無需虛擬函數或void* manipulation ,Gman的方法利用模板隱藏實際類型不訴諸虛擬函數或void*操縱。 ...
    程式設計 發佈於2025-02-07
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    Exploiting Regular ExpressionsA more efficient solution involves leveraging regular expressions.正則表達式允許您定義復雜的搜索模式並在單個操作中執行文本轉換。 示例示例usage 接下來,您可以使用匹配...
    程式設計 發佈於2025-02-07
  • 如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    如何使用char_length()在mySQL中按字符串長度對數據進行排序?
    [2使用內置的char_length()function。 char_length()和length() 此查詢將從指定的表中檢索所有行,並基於上升順序對它們進行排序指定列的字符長度。帶有更長字符串的行將出現在結果的底部。
    程式設計 發佈於2025-02-07
  • 如何從PHP捲曲響應中提取cookie中的cookie?
    如何從PHP捲曲響應中提取cookie中的cookie?
    從php curl響應中檢索cookie在某些情況下,在某些情況下,在某些情況下,外部API響應可能會不足地嵌入HTTP Header中的cookie ,而不是利用諸如肥皂或休息之類的常規通信協議。為了促進這些cookie將這些餅乾提取到結構化的陣列中而無需求助於艱辛的解析,可以採用以下技術。 *...
    程式設計 發佈於2025-02-07
  • 'exec()
    'exec()
    Exec對本地變量的影響: exec function,python staple,用於動態代碼執行的python staple,提出一個有趣的Query:它可以在函數中更新局部變量嗎? python 3 Dialemma 在Python 3中,以下代碼shippet無法更新本地變量,因為人...
    程式設計 發佈於2025-02-07
  • 如何使用PHP顯示在MySQL中存儲的圖像?
    如何使用PHP顯示在MySQL中存儲的圖像?
    檢索並顯示在php 答案:是的,使用PHP有幾種方法可以實現此轉換,取決於已安裝的圖像庫。 使用GD庫:Using the ImageMagick (iMagick) Library:
    程式設計 發佈於2025-02-07
  • 如何使用替換指令在GO MOD中解析模塊路徑差異?
    如何使用替換指令在GO MOD中解析模塊路徑差異?
    克服go mod中的模塊路徑差異 coreos/bbolt:github.com/coreos/ [email受保護]:解析go.mod:模塊將其路徑聲明為:go.etcd.io/bbolt `要解決此問題,您可以在go.mod文件中使用替換指令。只需在go.mod的末尾添加以下行:[&& &...
    程式設計 發佈於2025-02-07
  • 如何在Java列表中有效計算元素的發生?
    如何在Java列表中有效計算元素的發生?
    計數列表中的元素出現在列表 中,在java編程中,列舉列表中列舉元素出現的任務來自列表。為此,收集框架提供了全面的工具套件。 在這種情況下,Batocurrences變量將保持值3,代表動物列表中的“ BAT”出現的數量。 &&& [此方法是簡單的,可以得出準確的結果,使其成為計算列表中元素出現的...
    程式設計 發佈於2025-02-07
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣?使用openssl? 答案:可以使用mcrypt數據加密數據,可以使用openssl。關於如何使用openssl對McRypt進行加密的數據: openssl_decryp...
    程式設計 發佈於2025-02-07
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    使用(1)而不是(;;)會導致無限循環的性能差異? 現代編譯器,(1)和(;;)之間沒有性能差異。 是如何實現這些循環的技術分析在編譯器中: perl: S-> 7 8 unstack v-> 4 -e語法ok 在GCC中,兩者都循環到相同的彙編代碼中,如下所示:。 globl t_時 ...
    程式設計 發佈於2025-02-07
  • 在映射到MySQL枚舉列時,如何確保冬眠保留值?
    在映射到MySQL枚舉列時,如何確保冬眠保留值?
    在hibernate中保存枚舉值:故障排除錯誤的列type ,他們各自的映射至關重要。在Java中使用枚舉類型時,至關重要的是,建立冬眠的方式如何映射到基礎數據庫。 在您的情況下,您已將MySQL列定義為枚舉,並在Java中創建了相應的枚舉代碼。但是,您遇到以下錯誤:“ MyApp中的錯誤列類型...
    程式設計 發佈於2025-02-07
  • 版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    版本5.6.5之前,使用current_timestamp與時間戳列的current_timestamp與時間戳列有什麼限制?
    在默認值中使用current_timestamp或mysql版本中的current_timestamp或在5.6.5 這種限制源於遺產實現的關注,這些限制需要為Current_timestamp功能提供特定的實現。消息和相關問題 `Productid` int(10)unsigned not ...
    程式設計 發佈於2025-02-07
  • 如何可靠地檢查MySQL表中的列存在?
    如何可靠地檢查MySQL表中的列存在?
    在mySQL中確定列中的列存在,驗證表中的列存在與與之相比有點困惑其他數據庫系統。常用的方法:如果存在(從信息_schema.columns select * * where table_name ='prefix_topic'和column_name =&...
    程式設計 發佈於2025-02-07
  • 如何使用PHP將斑點(圖像)正確插入MySQL?
    如何使用PHP將斑點(圖像)正確插入MySQL?
    在嘗試將image存儲在mysql數據庫中時,您可能會遇到一個可能會遇到問題。本指南將提供成功存儲您的圖像數據的解決方案。 easudy values('$ this-> ; image_id','file_get_contents($ tmp_imag...
    程式設計 發佈於2025-02-07
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決“一般錯誤:2006 MySQL 服務器已消失”介紹:將數據插入MySQL 數據庫有時會導致錯誤“一般錯誤:2006 MySQL 服務器已消失”。當與服務器的連接丟失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變量之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2025-02-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3