跳至內容

精確覆起問題

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

佇一个全集 X 中間若干子集的集合做 S,精確覆起是講,S 的子集 S \ *,滿足 X 每一个元素佇咧 S \ * 中拄仔好出現一改。

佇計算機科學內底,精確覆起問題指頭仔揣出按呢的一款崁,抑是證明其實無存在。這是一个 NP-完全問題,原仔是卡普的二十一个 NP-完全問題之一。

定義

滿足以下的條件的集合做一个精確覆起:

  • S \ * 中任意兩个集合無交集,即 X 中元素佇咧 S \ * 中出現上濟一改
  • S \ * 中集合的全集為 X,即 X 中元素佇咧 S \ * 中出現上少一改合二為一,即 X 中元素佇咧 S \ * 中出現拄好一擺。

舉例

令 $ { \ mathcal { S } } $={ _ N _ , _ O _ , _ E _ , _ P _ } 是集合 _ X _={ 一 , 二 , 三 , 四 } 的一个子集的集合,並滿足:

  • _ N _={ }
  • _ O _={ 一 , 三 }
  • _ E _={ 二 , 四 }
  • _ P _={ 二 , 三 } .

其中一个子集 { _ O _ , _ E _ } 是 _ X _ 的一个精確崁去,因為乎 _ O _={ 一 , 三 } 而且 _ E _={ 二 , 四 } 的併集拄好是 _ X _={ 一 , 二 , 三 , 四 }。同理,{ _ N _ , _ O _ , _ E _ } 嘛是啦 _ X _ . 的一个精確崁去。空集並無影響結論。

關係表示

通常阮用 S 的逐个子集佮 X 的元素之間包含關係的二箍關係來表示精確覆蓋問題。

矩陣表示法

包括關係會當用一个關係矩陣表示。. 矩陣逐家表示 S 的一个子集,逐列表示 X 中的一个元素。矩陣行列交點元素為一表示對應的元素佇對應的集合中,無佇咧無咧共零 .

通過這个矩陣表示法,求一个精確確定欲轉化做求矩陣的若干焦個行的集合,使逐列有而且干焦一个一。同時,該當問題嘛是確定欲改變的典型例題之一。

下圖為其中一个例:


S \ *={ _ B _ , _ D _ , _ F _ } 就是一个精確崁去。

圖論表示法

包含關係嘛會當用一个二分圖表示。

二分圖倒爿每一个節點表示 S 的逐个集合,正爿每一个節點表示 X 的逐个元素,精確確認改做就是一款匹配,滿足正爿的每一个點拄好有一條邊。

求解方法

X 算法是高德納提出的解決該問題的算法,猶閣舞蹈鍊算法 ( Dancing Links,DLX ) 算法是 X 算法咧算機頂的一種高效實現。

應用舉例

  • 數獨求解

參考文獻