X算法

✍ dations ◷ 2025-05-31 00:19:23 #搜寻算法

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

相关

  • 老婆妻,是男女婚姻中对女性配偶的称谓,与夫相对应。台湾话中将妻子雅称为牵手,清国初年台湾文献记载台湾原住民族、平埔人称妻为牵手,后受台湾不同族群广泛使用,向外人谦称自己配偶;而
  • 子午线经线也称子午线,和纬线一样是人类为度量而假设出来的辅助线,定义为地球表面连接南北两极的大圆线上的半圆弧。任两根经线的长度相等,相交于南北两极点。每一根经线都有其相对应
  • 1787年公元前1780年,最后的猛犸象在弗兰格尔岛灭绝,可能是由于气候变化和狩猎。
  • 四聚氧氧4分子(O4),也被称作四聚氧。1924年,吉尔伯特·牛顿·路易斯首先预测了它的存在,以解释液氧不符合居里定律(顺磁性物质的磁化率与热力学温度成反比)的原因。现在看来路易斯的预测
  • 董 晨董晨(1968年-),中国免疫学家,清华大学医学院教授、院长。2019年当选为中国科学院院士。1968年生于中国湖北武汉。1989年毕业于武汉大学细胞生物学专业,获学士学位。1996年毕业于美
  • 桂西僮族自治区 (1952–1956)桂西僮族自治区,中华人民共和国广西省旧行政区划名,在今广西壮族自治区境。1952年置(副省级),自治区人民政府驻南宁市。辖柳州、宜山、百色、宾阳、崇左5专区。1953年,撤销宾阳、
  • 葛优葛优(1957年4月19日-),河北饶阳人,中华人民共和国一级演员,现任中国电影表演艺术学会第十四届会长、中华全国总工会文工团名誉团长,享受国务院政府特殊津贴。1993年凭借电影《大撒
  • 博尔德博尔(法语:Bords)是法国滨海夏朗德省的一个市镇,位于该省中部,属于圣让当热利区。该市镇总面积15.47平方公里,2009年时的人口为1,347人。博尔(Bords)人口变化图示
  • 斯里福克斯斯里福克斯(英语:Three Forks)是美国西北部蒙大拿州的一座城镇。根据2010年美国人口普查,该城镇的人口为1,869人,在蒙大拿州排行第37。使用北美山区时区(UTC-7,夏季为UTC-6)作为标准
  • 绿色植生墙绿色植生墙或称垂直花园(英语:Green wall or Vertical Garden)可以是独立的墙面,或一栋建筑的墙面,墙上大部分或一部分种满花草或蔬菜,植物则种于土壤或非有机的生长介质上。绿色