X算法

✍ dations ◷ 2025-10-03 18:49:38 #搜寻算法

在计算机科学中,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算法无论在选择行时还是回溯错误的选择时效率都很高。

相关

  • α-变形菌门α-变形菌(Alphaproteobacteria)是变形菌门(Proteobacteria)下的一个纲。此纲的成员变异性极大,且共通点极少,但他们确实系出同源。α-变形菌大多都是革兰氏阴性菌,而有些包内寄生
  • 果糖果糖(C6H12O6,Jmol 立体图)是一种简单的糖(单糖),极易溶于水,在许多食品中存在,和葡萄糖、半乳糖一起构成了血糖的三种主要成分,可在如蜂蜜、树上的水果、浆果、瓜类以及一些根类蔬菜
  • 足部,为汉字索引中的部首之一,康熙字典214个部首中的第一百五十七个(七划的则为第十一个)。就繁体和简体中文中,足部归于七划部首。足部通常从左方、下方为部字。且无其他部首可
  • 印刷品印刷是指将影像或文字原稿迅速大量复制的一种技术。一般使用印刷机将油墨印在纸张上,它是出版的基本组成部分。印刷机是能够在承印物上印刷的机械。活字印刷术被称为中国古代
  • 2013年巴基斯坦国会选举米尔汗·哈萨·霍索 无党派人士纳瓦兹·谢里夫 巴基斯坦穆斯林联盟(谢里夫派)2013年巴基斯坦大选于2013年5月11日进行。其中选出巴基斯坦国会下院国民议会以及旁遮普省、信德
  • 台湾猕猴台湾猕猴,又称黑肢猴,台湾特有种,珍稀野生动物,属旧世界猴。也是除了智人外台湾唯一的灵长类动物,和日本猕猴、普通猕猴有血缘关系。台湾的原生种,分布于由海平面至海拔三千米以下
  • 潮安区潮安区在中国广东省东部、韩江下游,是潮州市下辖的一个市辖区。晋朝时置海阳县。1914年,因与山东省海阳县的县名同名而改名潮安县。曾多度被废立,1991年12月恢复县治。2013年6
  • 辅币辅币,即辅助货币,是本位币单位以下的小额货币,主要用来辅助大面额货币的流通,供日常零星交易或找零之用,通常以小数点形式计数;汇率较高的货币多半拥有辅币,如一角(一毫)、一分、一仙
  • 古罗马年表古罗马年表按照时间先后顺序,列举古罗马重要历史事件。时间跨度从古罗马建立至拜占庭帝国最后试图收复罗马。
  • 唇齿音唇齿音(古汉语:轻唇音)为发音部位的一种,借由唇与齿的咬合而发出的辅音(子音)。 当符号成对出现时,左边的是清音,右边的是浊音。阴影区域表示被认为是不可能的发音。