首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

漫談算法(五):問題複雜度下界分析——決策樹與對手論證法

     編輯:關於C語言

作者:劉子韜

為什麼需要下界?

上界告訴我們「能做到什麼程度」,下界告訴我們「絕對做不到什麼程度」。Lower bounds tell us what cannot be done, guiding search for what can be done.

例:歸並排序 O(n log n),但能否更快?需證明 Sorting = Ω(n log n)。


兩大下界證明方法

  1. 決策樹法:分析算法決策過程樹高度下界(《算法導論》標準法)
  2. 對手論證法:構造對手策略,迫使算法執行更多步驟,往往能得更緊確下界

經典案例:基於比較的排序下界

決策樹法證明 Ω(n log n)

  • n 個元素全排列 n! 種 → 決策樹葉子 ≥ n! 個
  • 二叉樹高度 h,葉子 ≤ 2ʰ
  • n! ≤ 2ʰ → h ≥ log(n!) = Ω(n log n)
  • 對任意比較排序算法成立

對手論證法證明 Ω(n log n)

  • 對手維護候選排列集合 S,初始 |S| = n!
  • 每次比較詢問,對手回答使剩餘候選集盡可能大(≥ 半數)
  • 需將 |S| 從 n! 縮減至 1 → 至少 log(n!) 次詢問
  • 若詢問 < log(n!) 次,|S| ≥ 2,對手總能給出反例令算法失敗

平均情況下界同為 Ω(n log n)

  • 平均情況 = 決策樹所有葉子深度平均值
  • 平均深度最小的樹是完全平衡二叉樹
  • 非平衡樹可將最深葉子接到最淺分支降低平均深度
  • ∴ 平均深度 ≥ 平衡樹深度 = Ω(n log n)

隨機化算法下界同為 Ω(n log n)

雅翁原理:對任意輸入分布,確定性算法期望代價 ≥ 最壞情況下界。隨機算法本質是確定性算法的概率分佈,下界同理成立。


更多下界證明例題

例 1:合併兩個有序列表(長度均為 n)

下界:2n - 1 次比較

對手論證:

  • 假設只比較 2n-2 次
  • 存在某 aᵢ 未與 bⱼ 或 bⱼ₊₁ 比較
  • 設 aᵢ = 2i-1 (奇數),bⱼ = 2j (偶數)
  • 對手交換 aᵢ 和 bⱼ (或 bⱼ₊₁) 值,保持有序性但改變合併結果
  • 算法輸出錯誤 → 矛盾 → 至少需 2n-1 次比較

例 2:有序表查找元素 x

下界:⌈log₂(n+1)⌉ 次比較

決策樹法:

  • n 個可能答案 → n 個葉子
  • 二叉樹高度 h,最多葉子 2⁰+2¹+...+2ʰ⁻¹ = 2ʰ - 1
  • 2ʰ - 1 ≥ n → h ≥ log₂(n+1)


總結

下界分析是算法理論皇冠上的明珠。決策樹法直觀通用,對手論證法靈活強大。關鍵洞見:

  • 比較模型下排序 Ω(n log n) 是鐵律
  • 平均/最壞/隨機化下界往往同階
  • 對手策略設計是藝術:需構造具體輸入族迫使算法「盲區」暴露
  • 掌握下界思維,才能知道何時停止優化、接受現狀或尋找新模型(如非比較排序)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved