X算法

✍ dations ◷ 2025-06-01 07:28:43 #搜寻算法

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

相关

  • CDK周期蛋白依赖性激酶或周期素依赖性激酶(英语:Cyclin-dependent kinases,CDKs)是一个蛋白质激酶家族,因其在细胞周期中的调控作用而首次被发现,该蛋白家族也涉及转录调控、mRNA加工
  • font style=color:#888small汉更始帝 23–25/small/font汉更始帝刘玄(?-25年),字圣公,南阳郡蔡阳县(今湖北省枣阳市西南)人,两汉之际绿林军拥立的皇帝(玄汉政权),或被视为西汉的最后一位皇帝。刘玄原本是西汉宗室,是汉景帝刘启的后代、汉光武帝
  • 望厦条约《望厦条约》,又称《中美五口贸易章程》、《中美望厦条约》,英文正式名称为《美利坚合众国与中华帝国之和平,友好,通商条约》(英语:Treaty of peace, amity, and commerce, betwee
  • 法令《国会纵火法令》(德语:Reichstagsbrandverordnung),全称《保护人民和国家的总统法令》。1933年2月27日国会纵火案后,总统保罗·冯·兴登堡签署了这一法令。该法令废除了许多《魏
  • 谱代大名谱代大名,为德川家康根据关原合战后全日本大名对幕府的亲密度所作的分类之一,多由自父祖辈便侍奉德川家数代的元老家族担任,少数为关原合战之前愿意从属德川家的实力派大名。谱
  • 芥川龙之介赏芥川奖,正式名称为芥川龙之介奖,乃是纪念日本大正时代的文豪芥川龙之介(1892-1927)所设立的文学奖,并由主办单位文艺春秋颁发给“雅文学(纯文学)”新人作家的一个奖项;现今的主办单
  • 卡利斯坐标:45°09′58″N 67°14′33″W / 45.166045°N 67.242434°W / 45.166045; -67.242434卡利斯(英语:Calais)是美国缅因州华盛顿县的一个城市,位于圣克洛伊河西岸,对岸是加拿大
  • 东安东安可以指:
  • 凯里凯里市是贵州省黔东南苗族侗族自治州州政府所在地,是一个以苗族为主体,多民族聚居的城市。“凯里”系苗语黔东方言北部土语音译,意为木佬人的田地。苗语称木佬人为“凯”,田为“
  • 南堡经济开发区南堡经济开发区,是中华人民共和国河北省唐山市曹妃甸区下辖的一个类似乡级单位。下辖以下地区:三友社区、新苑社区、硕秋园社区、东苑社区、西苑社区、海月社区。