算法设计与分析--回溯法

一、解决哪些问题。

二、设计算法关键点。

三、时间复杂性分析。

问题一:m着色问题

问题描述:给定一个无向图G=(V,E),需要对图G中的每个顶点用m种颜色中的一种进行着色,使得相邻的两个顶点有不同高的颜色。

分析:着色问题一个或者多个序列可以得到一个解,也可能得不到,因此m着色问题可以用回溯算法求解(不解,难道此种类类型解就可以用回溯??)。着色问题不是优化问题,限界函数不起作用,约束函数为当前的着色不与相邻节点的颜色相同。着色问题的解空间是个多叉树。

伪代码:

BacktrackColoring(i)
	if i > n then
		SolNum = SolNum + 1
	else for j<-i to m do 
			x[i] <- j
			if OK(i) == TRUE then BacktrackColoring(i+1)
其中,SolNum表示可行着色方案的数目,约束函数OK(i)代码如下:
OK(i)
	for j<-1 to i-1 do
		if w[i,j] == 1 and x[j] == x[i] then return False
	retrun TRUE

时间复杂度:

每个节点需判断与相邻的n个顶点的着色是否相同,因此需O(mn),而整个解空间共有1+m^1+m^2...+m^(n-1),因此BacktrackColoring算法时间复杂度为O(m^n*n)


分支限界与回溯算法的比较:

分支限界主要用于解决离散最优化实际问题。


算法设计与分析--回溯法_第1张图片

你可能感兴趣的:(ACM)