最大团问题-回溯法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

04 代码示例
void Clique::Backtrack(int i) { //计算最大团 if(i>n) //到达叶子节点 { for(int j=1;j<=n;j++) bestx[j]=x[j]; bestn=cn; return; } //检查当前顶点是否与当前团连接 int ok=1; for(int j=1;j<i;j++) if(x[j]&&a[i][j]==0) { ok=0;break; } if(ok) //进入左子树 { x[i]=1; cn++; Backtrack(i+1); //回溯到下一层节点 x[i]=0;cn--; } if(cn+n-i>bestn) //通过上界函数判断是否减去 右子树 { x[i]=0; Backtrack(i+1); } }
1 2 3 4 5 4 5
MCP回溯法详细介绍
1
2 3
图1 无向图G
图2 无向图G的补图G’
代码运行结果
代码运行结果
修改了上界函数 cn+n-i>=bestn
1
2 3
01
问题描述
4
5来自百度文库
03 算法设计
无向图G的最大团问题可以看作是图G的顶点集V的子集选取问题。因此可 以用子集树表示问题的解空间。设当前扩展节点Z位于解空间树的第i层。在 进入左子树前,必须确认从顶点i到已入选的顶点集中每一个顶点都有边相连。 在进入右子树之前,必须确认还有足够多的可选择顶点使得算法有可能在右 子树中找到更大的团。 用邻接矩阵表示图G,n为G的顶点数,cn存储当前团的顶点数,bestn存 储最大团的顶点数。cn+n-i为进入右子树的上界函数,当cn+n-i<bestn时, 不能在右子树中找到更大的团,可将Z的右节点剪去。
1
2 3
4
5
i=3 cn=2 bestn=0 2
03
2 i=3 cn=1 bestn=3 2 3 3 3 3 4 4 4 4 4 4 4 4
1
i=2 cn=0 bestn=3
2 i=3 cn=1 bestn=3 3 3
i=4 cn=2 bestn=0
3 3
i=5 cn=2 bestn=0
i=4 cn=2 bestn=3 4 4 4 4
02
回 溯 法 基 本 思 想
02 问题描述
给定无向图G=(V,E)。如果U V,且对任意u,v U有(u,v) E,则称U是G的完全子图。 G的完全子图U是G的团当且仅当U不包含在G的更大的完 全子图中。 G的最大团是指G中所含顶点数最多的团。 下图G中,子集{1,2}是G的大小为2的完全子图。这 个完全子图不是团,因为它被G的更大的完全子图{1,2, 5}包含。{1,2,5}是G的最大团。{1,4,5}和{2,3,5} 也是G的最大团。
•解空间:子集树 •可行性约束函数:顶点i到已选入的顶点集中每 一个顶点都有边相连。 •上界函数:有足够多的可选择顶点使得算法有可 能在右子树中找到更大的团。
05 实例分析
MCP回溯法详细介绍
根节点i=1 cn=0 bestn=0 R i=1 cn=0 bestn=3 i=2 cn=1 bestn=0 1
4
4
4
4
5
5 5 5
5
5 5 5
5
5 5 5
5
5 5 5
5
5 5 5
5
5 5 5
5
5 5 5
5
5 5 5
i=6 cn=3 bestn=3
Company Logo
06 算法度量
1 时间复杂度
由于最大团问题是一个子集 树问题,每个可行叶结点都 做一次bestx更新,因此可 知算法的时间复杂度O(n2n)
2 空间复杂度
在程序中使用邻接矩阵才存储 图,用两个一维数组存储当前 解和最优解信息,因此可知所 用的存储空间O(n2)由于程序 采用递归搜索,因此递归也占 用了一定的栈空间
07 改进
•选择合适的搜索顺序,可以使得上界函数更有效的发挥作用。 例如在搜索之前可以将顶点按度从小到大排序。这在某种意义上 相当于给回溯法加入了启发性。 •定义Si={vi,vi+1,...,vn},依次求出Sn,Sn-1,...,S1的解。从 而得到一个更精确的上界函数,若cn+Si<=max则剪枝。同时注意 到:从Si+1到Si,如果找到一个更大的团,那么vi必然属于找到 的团,此时有Si=Si+1+1,否则Si=Si+1。因此只要max的值被更 新过,就可以确定已经找到最大值,不必再往下搜索了。
08 应用
最大团问题是图论中的一个经典组合优化问题,也是一类NP 完全问题,对最大团问题的研究具有很大的理论价值。
最大团问题也被称为最大独立集问题,在实践中有非常广泛
的应用,被应用于市场分析、方案选择、信号传输、计算机视觉、 故障诊断、人工智能、聚类分析、移动计算等不同领域。
概念补充
如果UV且对任意u,vU有(u,v)E,则称U是G的空子图。G的空子图 U是G的独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集 是G中所含顶点数最多的独立集。 对于任一无向图G=(V,E)其补图G=(V1,E1)定义为:V1=V,且(u, v)E1当且仅当(u,v)E。 U是G的最大团当且仅当U是G的最大独立集。
最大团问题
—回溯法
The author :王志红
One
Two Four
回溯法基本思 想 问题描述
Five
Six Eight
目录
实例分析 算法度量
改 进 应 用
contents
Three 算法设计
代码示例
Seven
01 回溯法基本思想.
回溯法按照深度优先策略,从根节点出发搜索解空间树。算法搜 索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果 肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点 回溯;否则,进入该子树,继续按深度优先策略搜索。 回溯法搜索解空间树时,根节点首先成为一个活结点,同时也成 为当前的扩展节点。在当前扩展节点处,搜索向纵深方向移至一个新 节点。这个新节点就成为一个新的活结点,并成为当前扩展节点。如 果当前扩展节点不能再向纵深方向移动,则当前的扩展节点就成为死 结点。此时,往回回溯至最近的一个活节点处,并使这个活结点成为 当前的扩展节点。 回溯法以这种方式递归地在解空间中搜索,直至找到所有要求的 解或解空间已无活结点为止。
相关文档
最新文档