X算法

✍ dations ◷ 2025-08-21 07:39:11 #搜寻算法

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

相关

  • 蟠尾丝虫症蟠尾丝虫症或蟠尾丝虫病(拉丁语:Onchocerciasis),又名河川盲、河盲症(river blindness),是一种因感染蟠尾丝虫引起的疾病。病状包括严重搔痒、皮下肿块,以及失明。是全球仅次于沙眼
  • 垂直农法垂直农法(英语:Vertical Farming)也称垂直农业、垂直农场、立体农场,是在垂直堆叠的层面、垂直倾斜的表面,或集成在其他结构(如摩天大楼、二手仓库或运输集装箱)中种植食品和药物的
  • 端足类端足类(学名:Amphipoda),亦作片脚类,是一个没有甲壳及两侧扁平的目级甲壳类动物。其学名的意思是“不同的足”,是指它们拥有不同的附属肢形态。它们长1-340毫米不等,栖息在所有的水
  • 彼得·伊里奇·柴可夫斯基彼得·伊里奇·柴可夫斯基(俄语:Пётр Ильич Чайковский,1840年5月7日-1893年11月6日),俄罗斯浪漫乐派作曲家,其作品有民族乐派特征,但仍以浪漫风格为基准。其风
  • 鲜卑语鲜卑语在中国史书中称为夷言、国语、北语、胡语或者胡言,为中国与蒙古历史上鲜卑族使用的一种语言,较为保守的使用时期为2、3世纪交替至7世纪中叶,在东晋十六国至北朝时期被广
  • 促发促发 ,大陆译作启动效应,是一种内隐记忆的效应,而这个效果是指受到一种刺激 (即知觉模式)时,会影响到另一个刺激的反应。Meyer和Schvaneveldt在1970年代初期的生殖实验 中,让研究
  • I-4545号州际公路(Interstate 45,简称I-45)是美国州际公路系统的一部分。呈东南-西北走向,连接德克萨斯州达拉斯(与345号州际公路交汇)与加尔维斯顿(与德克萨斯州公路87交汇)。全长284.9
  • 苏联国歌《苏维埃社会主义共和国联盟国歌》(俄语:Государственный гимн СССР,罗马字转写:Gosudarstvenny Gimn SSSR)是苏联的国歌,其中文非正式曲名又依首句为《牢
  • 鳌江鳌江源于中国浙江省温州文成县桂山乡桂库村。《江南靖士诗稿·桂库村》诗:“新造砼途接古村,民居半旧见藤垣。涧流纵出廊桥下,高落鳌江是首源。”源流所生地南雁荡山吴地山南麓
  • 海牛属海牛(学名:)是一类大型水生哺乳动物,在淡水或浅海中生活,以草食为主。属于海牛目海牛科(Trichechidae)的唯一一个属。目前海牛科下有三个海牛物种,它们分别是:亚马逊海牛、西印度海牛