浅谈 Dancing Links X 算法

本文介绍了 Dancing Links X 算法,用于解决精确覆盖问题。文章通过数独和智慧珠游戏的例子引出问题,详细阐述了从暴力搜索到 Dancing Links 算法的优化过程,包括算法思想、操作步骤以及十字链表的数据结构,最后提到了算法在实际问题中的应用。
摘要由CSDN通过智能技术生成

博客园同步

前置知识:

  • 一维链表。(单向,双向,循环)
  • 部分集合运算,如 ⋂ \bigcap ⋃ \bigcup .

前言

在计算机科学中,X算法可用来求解精确覆盖问题。

精确覆盖问题 是哪一类问题呢? X X X 算法又是什么高深的算法呢?

背景

  • 你的同学通过某种算法迅速 AC \text{AC} ACP1784 数独,然后他兴致勃勃地 带领学生 1 s 1s 1s 搞定数独竞赛

小时候,你玩数独;长大了,数独玩你。你该怎么办?

小时候,你玩智慧珠;长大了,智慧珠玩你。你该怎么办?

定义

Dancing Links X \text{Dancing Links X} Dancing Links X 是优化后的 X X X 算法,用于解决 精确覆盖问题

精确覆盖问题 是这样一类问题:给定若干集合 S 1 , S 2 ⋯ S n S_1 , S_2 \cdots S_n S1,S2Sn 和一个集合 X X X,求出 T 1 , T 2 ⋯ T k T1 , T2 \cdots T_k T1,T2Tk 使得满足:

T i ⋂ T j = ∅ ( i ≠ j ) T_i \bigcap T_j = \varnothing (i \not = j) TiTj=(i=j)

⋃ i = 1 k T i = X \bigcup_{i=1}^k T_i = X i=1kTi=X

∀ i ∈ [ 1 , k ] , T i ∈ S 1 , S 2 ⋯ S n ∀ i \in [1,k] , T_i \in {S_1 , S_2 \cdots S_n} i[1,k],TiS1,S2Sn

翻译成人话 其实就是在 n n n 个集合中选出若干 两两不相交 的集合且 这些集合的并为 X X X.

比方说:

S 1 = 666 , 2 , 4 S_1 = {666,2,4} S1=666,2,4

S 2 = 2 , 4 , 8 , 119 S_2={2,4,8,119} S2=2,4,8,119

S 3 = 8 , 5 S_3={8,5} S3=8,5

S 4 = 666 , 2 , 4 , 119 S_4={666,2,4,119} S4=666,2,4,119

S 5 = 666 , 4 , 5 S_5={666,4,5} S5=666,4,5

X = 666 , 2 , 8 , 4 , 5 , 119 X={666,2,8,4,5,119} X=666,2,8,4,5,119

那么这时答案就应该是取

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值