贪心法--最小生成树的Prim算法和Kruskal算法

一,贪心法和分治法,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; //候选集以及参数调整

}

}

}




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值