《算法设计与分析》--《贪心算法》--随笔

1、定义:贪心算法其实就是自己通过一系列的选择得到问题的解,取数每次做的选择就是当前状态下局部最好的选择。

尽管这种方式不一定能够获得最优解,但是在许多情况下是能够达到预期的目的的。活动安排问题就是典型的贪心算法。

2、 性质:满足贪心算法求解必须满足贪心选择性质和最优子结构性质。

3、和动态规划的区别: 其实贪心算法就是通过所求问题的整体最优解可以通过一系列的局部最优的选择来达到。动态规划算法中每步做出的选择是依赖于自己子问题的解。只有我们自己把子问题解决了才能够做动态规划的相关操作,所以是自底向上的。

但是贪心算法是仅仅在当前的一个状态下面做出最好的选择,不会去依赖其他的部分,所以贪心算法也是自顶向下的一种算法,迭代的方式做出相应的贪心选择,在作出了选择之后都是将当前问题简化为规模更小的问题!

4、贪心选择的思考: 对于一个具体的问题,要确定其是否具有贪心选择性质,我们就必须去证明每一步做出的贪心选择最终会导致整个问题的整体最优解,做出贪心选择后,原问题才会简化为规模更小的子问题,最终通过每一步的贪心选择,最终得到问题的整体最优解!

5、最优子结构性质: 当一个问题的最优解包含子问题的最优解时,称此问题具有最优子结构性质。

6、两个背包例子: 其实0-1背包问题和背包问题都是具有最优子结构性质的,但是背包问题是可以使用贪心算法求解,0-1背包却是使用动态规划算法求解(背包问题是能够装入物品的一个部分,但是0-1是不能装入部分物品进去)。

7、 背包问题步骤:首先计算每种物品的单位重量的价值Vi/Wi,然后根据贪心选择策略,尽可能装入单位价值最高的物品进入背包。如将该种物品全部装入背包后,包内的物品重量没有超过C,那么选择单位价值次高的物品装入,直到背包装满位置。

具体算法如下:

public static float knapsack(float c,float[] w,float[] v,float[] x){

 int n = v.length;
Element[] d = new Element[n];

for(int i = 0;i<n;i++){
d[i] = new Element(w[i],v[i],i);
MergeSort.mergeSort(d);
int i;
float opt = 0;
for(int i =0;i<n;i++)x[i] = 0;
for(int i =0;i< n ;i++){
if(d[i].w> c)break;
x[d[i].i] =1;
opt+=d[i].v;
c-=d[i].w;
}
if(i<n
{
x[d[i].i] = c/d[i].w;
opt+=x[d[i].i]*d[i].v;
}
return opt;
}


}

说明:该算法其实最主要在于计算了将单位重量的价值从大到小的排序。对于0-1背包问题,因为贪心选择不能保证最终可以把背包填满,部分闲置的背包空间使每公斤背包的价值降低了。

 

全部评论

相关推荐

最近群里有很多同学找我看简历,问问题,主要就是集中在明年三月份的暑期,我暑期还能进大厂嘛?我接下来该怎么做?对于我来说,我对于双非找实习的一个暴论就是title永远大于业务,你在大厂随随便便做点慢SQL治理加个索引,可能就能影响几千人,在小厂你从零到一搭建的系统可能只有几十个人在使用,量级是不一样的。对双非来说,最难的就是约面,怎么才能被大厂约面试?首先这需要一点运气,另外你也需要好的实习带给你的背书。有很多双非的同学在一些外包小厂待了四五个月,这样的产出有什么用呢?工厂的可视化大屏业务很广泛?产出无疑是重要的,但是得当你的实习公司到了一定的档次之后,比如你想走后端,那么中厂后端和大厂测开的选择,你可以选择中厂后端(注意,这里的中厂也得是一些人都知道的,比如哈啰,得物,b站之类,不是说人数超过500就叫中厂),只有这个时候你再去好好关注你的产出,要不就无脑大厂就完了。很多双非同学的误区就在这里,找到一份实习之后,就认为自己达到了阶段性的任务,根本不再投递简历,也不再提升自己,玩了几个月之后,美其名曰沉淀产出,真正的好产出能有多少呢?而实际上双非同学的第一份实习大部分都是工厂外包和政府外包!根本无产出可写😡😡😡!到了最后才发现晚了,所以对双非同学来说,不要放过任何一个从小到中,从中到大的机会,你得先有好的平台与title之后再考虑你的产出!因为那样你才将将能过了HR初筛!我认识一个双非同学,从浪潮到海康,每一段都呆不久,因为他在不断的投递和提升自己,最后去了美团,这才是双非应该做的,而我相信大部分的双非同学,在找到浪潮的那一刻就再也不会看八股,写算法,也不会打开ssob了,这才是你跟别人的差距。
迷茫的大四🐶:我也这样认为,title永远第一,只有名气大,才有人愿意了解你的简历
双非本科求职如何逆袭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务