我坐在回家的火车上,现在的心情应该可以用百感交集来形容了,我甚至不知道现在的自己算个啥。
对于c这一阵子的学习,只能说比以前更吃力了吧,题目也没有按时按量完成,说实话真的不知道自己一天天的在忙啥。
上次学了贪心算法,寒假刚放假的时候也有看过,晚自习的时候也有看过例题,看完就很懵。我所了解的贪心,也就是找最优解,这个最优解并不是一次性在全局里找到的,而是通过将整体分解为若干部分,通过相同的方式,找到每个部分的最优解,再从这些最优解中通过比较找到全局的最优解。也许这些不是很准确,但是我感觉还是比较好理解的吧。
//A是问题的输入集合即候选集合
Greedy(A)
{
S={ }; //初始解集合为空集
while (not solution(S)) //集合S没有构成问题的一个解
{
x = select(A); //在候选集合A中做贪心选择
if feasible(S, x) //判断集合S中加入x后的解是否可行
S = S+{x};
A = A-{x};
}
return S;
}
贪心算法的典型例题就是背包问题,记得之前学长也讲过,有性价比,还有喜爱程度。背包问题又分为两种,一种是不能分割,还有一种就是可以分割,也就换为背包装满,和可以不满的问题。在处理贪心问题时,也就是找到一种最好的一种方法,这就要求排序,这又要看要按照什么排序,用什么排序方法,当然这些只是完善程序的注意的小问题。最主要的还是找最优解的过程,也就是最优子结构。
例如,背包问题可能是按照自己的喜爱程度,但又要考虑背包的承重量,因此现在要比较的就是单位重量内的喜爱程度,从大到小排序,同时考虑背包最大承重即可。最后求出的就是最优解。
贪心,也就是自己在最少的给予中得到最多的东西,像之前的加油站问题,龟兔赛跑,都有贪心的思想,相似的贪心问题有很多,但是它们的思想其实都是一样的。
每个人都是贪心的,用自己的贪心去为自己获得最大的利润。