概述
一,贪心法和分治法,DP法的本质不通在于: 只选择一个子问题求解
二,贪心法的特点:
①,快
②不能保证得到最优解
三,贪心法的关键是:分解方案和贪心选择方案
以最小生成树为例进行说明:
Prim算法(最近点策略):给定无向联通带全图 顶点集v={1,2,3,4,5..n.} 边集E={无向图中的所有边}
S为部分解 C候选集 w(s,i) (i∈C)是指候选集与S集合之间的权重
循环(终止条件是 所有的节点(1...n)全部被选入S集合 所以循环n-1次)
①初始化 S={1} c = E
②a. x = argmin(w(s,i)) i∈候选集
b. s = s∪{x}
c. c = c-{x}
Kruskal算法(最短边策略)给定无向联通带全图 v={1,2,3,4,5..n.} E集合
将所有的边从小到大排序(快速排序)
循环(终止条件是 ②中的b段循环执行n-1次)
①初始化:S = V,C = E
②a.x = argmin(w(e)) e属于C
b.if(X的两个端点分属于不同的联通分支)
T = T U {x};
c.c = c - {x}
贪心法的基本构件:
1.部分解 S
2.候选集C
3.贪心选择函数select()
4.约束函数 constraint() 判断贪心选择的结果是否满足约束
5.完整解的函数 complete(S) 判断当前解是否是完整解
贪心法框架:
返回值 贪心算法(参数列表){
//初始化
S= S0; C= C0;......
while(complete(S)){
x = select(c);
if(consitriant(X)){ //审查约束条件
S = S ∪ x; //解扩展
C = C - x; //候选集以及参数调整
}
}
}
最后
以上就是顺利便当为你收集整理的贪心法--最小生成树的Prim算法和Kruskal算法的全部内容,希望文章能够帮你解决贪心法--最小生成树的Prim算法和Kruskal算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复