X算法

✍ dations ◷ 2025-10-25 11:59:47 #搜寻算法

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

相关

  • 热力学自由能热力学自由能(英语:Thermodynamic free energy)是指一个热力学系统的能量中可以用来对外做功的部分,是热力学态函数。自由能可以作为一个热力学过程能否自发进行的判据。对限定
  • 准确性准确度(英语:accuracy)与精密度(英语:precision)是科学、工程学、工业及统计学等范畴的重要概念。准确度是每一次独立的测量之间,其平均值与已知的数据真值之间的差距(与理论值相符
  • 维尼纶维尼纶(英语:Vinylon或Vinalon),也称维纶,是一种合成纤维。维尼纶纤维的主要成分聚乙烯醇缩甲醛(polyvinylalcohol dimethylformal,有时简称为PVDF)。其生产过程是先将聚醋酸乙烯酯
  • 温带低压温带气旋,亦称为锋面气旋或中纬度气旋,是一种发生在地球中纬度地区的大尺度低压系统。温带气旋附带锋面,一段时间后将合并成为囚锢锋。“气旋”一词适用于各种各样的低压区,其中
  • 中华民国已消失岛屿本列表系指台澎与附属岛屿,因为填海工程及兴建港口而成为陆地或港口的一部分:
  • 弗里德里希一世 (符腾堡)腓特烈一世(Friedrich I.,1754年11月6日-1816年10月30日),全名腓特烈·威廉·卡尔(Friedrich Wilhelm Karl),1798年继承父位成为符腾堡公爵,称腓特烈三世;1803年升为符腾堡选侯,1806年
  • 免费素食主义免费素食主义(英语:Freeganism,又译飞根主义)是一种反消费主义生活方式,指通过消费已经或将要被其他人(如超级市场)扔掉的食物的方法来使人对环境的影响最小化的行为习惯。如果食物
  • 龙湾区龙湾区是中国浙江省温州市下辖的一个市辖区,面积279平方千米,人口30万人。龙湾区成立于1984年。温州经济技术开发区位于该区。龙湾区政府驻地为永中街道,目前辖10个街道。龙湾
  • 鄱阳鄱阳可以指:
  • 2014年国际足联世界杯争议问题 2014年国际足联世界杯产生了各种争议,包括多次游行示威(有些游行甚至在开赛前)。大多数争议和批评与比赛判罚有关。最显著的违规个案是乌拉圭前锋苏亚雷斯在比赛中咬伤意