首页 > 其他 > 详细

Dancing Links X

时间:2021-08-11 23:29:50      阅读:24      评论:0      收藏:0      [点我收藏+]

Dancing Links X

概述

用来解决精确覆盖问题。

给定集合\(X\)与集合的集合\(S\)

\(T \subseteq S\)使得

\[\bigcap_{A \in T} A = \empty \\bigcup_{A \in T} A = X \]

X算法

先转化为矩阵:矩阵\((i, j)\)位置为1当且仅当\(X_j \in S_i\),否则为0

然后我们每次按1的个数从小往大枚举选择的行,那么这一行为1的位置对应的列上为1的位置的行都要删去,这些列也应删去。然后重复上述过程。

最后一次删除的行如果是满的则找到一个解,否则就继续枚举。

可以预见上述算法有优化的余地。

这时就该请出双向十字循环链表了,链表能向上走、向下走、向左走、向右走走到下一个为1的位置。同时每行每列都有指针指向起始位置。

发现这种数据结构能够帮助我们优化删除矩阵行列的时间。

虽然还是指数级别的时间。这种东西只有\(O(TLE)\)\(O(Not\ TLE)\)

Dancing Links X

原文:https://www.cnblogs.com/BunnyLutts/p/15130531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!