X算法

✍ dations ◷ 2025-07-07 22:41:25 #搜寻算法

在计算机科学中,X算法可用来求解精确覆盖问题。此名称最早在高德纳的论文《舞蹈链》中出现,他认为此算法是“试错法中最显而易见”的。 就技术而言,X算法是一个深度优先的不确定性回溯算法。由于X算法是一个解决精确覆盖问题的简洁方法,高德纳希望通过该算法体现舞蹈链数据结构的高效性,他把使用后者的X算法称为DLX。

X算法用由0和1组成的矩阵来表示精确覆盖问题,目标是选出矩阵的若干行,使得其中的1在所有列中出现且仅出现一次。

X算法的步骤如下:

选择的不确定性意味着算法将派生出若干独立的子算法,每个子算法都从其父算法中继承了去除部分行列的矩阵。如果其中有一列全为零,则当前情况无解,子算法返回失败,但不一定意味整个问题无解。

实际上,所有子算法形成了一棵搜索树,其中原问题为根节点,树的第层由子算法在第次所选择的行组成。整个算法即用回溯法对搜索树深度优先遍历。

第二步中,无论用什么方法选择列最终都可以得到解,但有的方法效率明显较高。为减少迭代次数,高德纳建议每次都选取1最少的列。

例如,考虑以下精确覆盖问题:全集 = {1, 2, 3, 4, 5, 6, 7} ,现有U的六个子集 S {\displaystyle {\mathcal {S}}} , , , , , },其中:

此问题可用矩阵表示为:

根据高德纳的建议,每次都选取1最少的列,则X算法的执行步骤如下:

第0层

第一步:矩阵非空,故算法继续执行。

第二步:1最少的列为第一列,含有两个1。所以选择第一列:

第三步:A行和B行第一列均为1,所以依次选择这两行继续搜索。

于是算法开始搜索树的第1层第一个分支:

第0层没有其他可选择的行,算法最终停止。

综上所述,用X算法得出本问题只有一个解: S {\displaystyle {\mathcal {S}}^{*}} , , }。

高德纳主要想通过X算法体现舞蹈链的实用性。他发现了使用舞蹈链的X算法效率极高,并把这一过程称为DLX。DLX用矩阵来表示精确覆盖问题,在内部的存储结构为舞蹈链。舞蹈链是一个双向环形链表,每个矩阵中的1都有一个指针指向其左、右、上、下的1。因为精确覆盖问题中的矩阵一般都是稀疏的,所以舞蹈链中的元素很少,既很省时间,又很省空间。可见使用舞蹈链的DLX算法无论在选择行时还是回溯错误的选择时效率都很高。

相关

  • 外来偶蹄类脑病外来偶蹄类脑病(英语:Exotic ungulate encephalopathy,缩写为EUE),传染性海绵状脑病的一种,由普利昂蛋白质引起的脑病变,主要侵袭在动物园中被人类饲养的动物。在1990年代开始,在英
  • 中国皇后及妃嫔列表中国皇后及妃嫔列表列出中国历史上所有的君主配偶。本页面仅仅是一个索引,请根据时代不同选择以下不同列表:
  • 黄斑部黄斑(Macula lutea,源自拉丁语macula,“斑”+lutea,“黄”),是人眼视网膜中央附近一卵圆形染色区域,直径约5.5mm。黄斑还可再细分为黄斑凸、黄斑凹、黄斑凹无血管区(foveal avascula
  • 研究所研究生院(英国英语:Postgraduate Schools、美国英语:Graduate Schools、日语:大学院),是本科之后的进阶教育研究机构,一般设于大学中,以“某大学某研究生院”的形式存在,也有独立设立
  • 乡民乡民有以下的意思:
  • 梅弗劳尔村梅弗劳尔村(英语:Mayflower Village)是位于美国加利福尼亚州洛杉矶县的一个人口普查指定地区。梅弗劳尔村的座标为34°07′04″N 118°00′34″W / 34.11778°N 118.00944°W /
  • 定海大英帝国第一次定海之战发生于清道光二十年(公元1840年)7月5日,是第一次鸦片战争初期,英国远征军为攻打定海与清军发生的一场战役。这场战事最终以定海陷落英军获胜而告终,定海总
  • 首席品牌官首席品牌官(英语:Chief Brand Officer,英文简称:CBO,台湾称品牌长或品牌总监;中国大陆称首席品牌官),为企业、组织中,专门负责品牌管理事务、具决策权责的高阶管理人员。通常担任此一
  • 怪味豆怪味豆是重庆一种典型小吃,本身为蚕豆,以甜、咸、麻、辣等多种调味粉制成粉层,将蚕豆包裹,吃时百味杂陈,故有“怪味”之称。有说怪味豆是1949年后才于重庆出现,但真正起源仍有待考
  • 杂贺礼史杂贺礼史(日语:雑賀 礼史),日本轻小说作家。代表作是曾经漫画化与改编成电视动画的《武侠派女高校生(日语:召喚教師リアルバウトハイスクール)》(插图:井上空,角川书店/富士见书房)。199