自 1997 年左右以來,我沒有看過大 O 表示法,所以我希望能進行一點意義檢查。
想象一個簡單的演算法可以暴力破解 Caesar Cipher 加密文本。它使用一個簡單的 Caesar Cipher 演算法,該演算法嵌套在 for 1 到 26 回圈中,使用回圈計數器作為密鑰,并輸出所有可能的結果,其中一個是解密的純文本。
這會是 O(N) 的復雜性(而不是 O(N2) 嗎?)
我相當確定它是 O(N)。我知道嵌套回圈可以將復雜度的順序增加 N2,但它需要重復的次數固定為 26。如果有的話,復雜度的順序可以描述為 O(N 26)?
uj5u.com熱心網友回復:
只要您明確說明Nin的含義,答案就會變得顯而易見O(N)。在您的情況下,唯一合理的含義N是輸入字串的長度。
Big-O 表示法是關于運行時間的漸近增加(有時也適用于記憶體消耗)隨著輸入大小的增加(但是您定義“大小”)。
因此,如果您將一個字符的翻譯定義為使用 1 個“時間單位”,那么您的演算法將進行26*N翻譯,加上一些(或多或少)恒定開銷C,所以它是26*N C時間單位。在 Big-O 表示法中,我們忽略任何常數因子和加法,并得出 的最終結果O(N)。
獎勵答案:
如果還對不同大小字母(例如中文)的演算法行為感興趣,字母的大小為M,您將獲得M*N C時間單位,表示為O(M*N)。
uj5u.com熱心網友回復:
我認為您是對的:由于您有恒定數量的鍵,因此此外部回圈不會考慮更多復雜性:O(26*N) = O(N),因為在 Big O 中忽略了常量。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/427977.html
上一篇:當我的模態表單中出現驗證錯誤時,為什么我的資料表無法加載?
下一篇:如何評估這個決議樹的最終結果?
