摘要: 原文链接:http://sqybi.com/works/dlxcn/ (只转载过来一部分,全文请看原文,感觉讲得很好~)正文 精确覆盖问题 解决精确覆盖问题 舞蹈步骤 效率分析 应用于六形组 一个失败的试验 应用于四形条 应用于皇后问题 结语 致谢 历史注记 程序正文我写这篇论文的目的,是觉得这个简单的程序技巧理应得到广泛认可。假设x指向双向链的一个节点;L[x]和R[x]分别表示x的前驱节点和后继节点。每个程序员都知道如下操作:L[R[x]] ← L[x], R[L[x]] ← R[x](1)是将x从链表删除的操作;但是只有少数程序员意识到如下操作:L[R[x]] ← x, R[L[x]]. 阅读全文
posted @ 2013-10-09 16:25 _sunshine 阅读(922) 评论(0) 推荐(0) 编辑
摘要: 问题描述:给定一个n*m的矩阵,有些位置为1,有些位置为0。如果G[i][j]==1则说明i行可以覆盖j列。Problem:1)选定最少的行,使得每列有且仅有一个1.2)选定最少的行,使得每列至少一个1.DLX原理:这类属于NP问题的问题,可以使用搜索解决。但是普通的搜索必超时无疑。因此我们要设法加优化来加快速度。Dancing Links从数据结构方面对此类搜索进行了优化,通过仅保留矩阵中有用的部分提高了搜索速度。DLX的存储结构采用循环十字链表,在搜索过程中不断将不需要的部分切除,随着迭代深度的增加,矩阵迅速变得稀疏。甚至一些你想不到的优化,DLX都替你想好了。对于Problem1)的解: 阅读全文
posted @ 2013-10-09 12:02 _sunshine 阅读(2276) 评论(0) 推荐(0) 编辑