华信清明节放假,所以不用去上课,而我又不想出去,所以就用了一点时间去研究算法。
我今天开始看王晓华写的《算法的乐趣》,把它当做教材。
看到贪心算法,因为大一的时候C语言没学好,所以作者写的C实现代码不是看得很懂,但是基本思想还是能够掌握的。
接下来我总结一下我今天学到的贪心算法:
贪心算法是寻找最优解问题的常用方法。
基本思想是分三个步骤:
1.建立对问题精确描述的数学模型,包货定义最优解的模型。
2.将问题分成一系列的子问题,同时定义子问题的最优解结构。
3.应用贪心算法原则可以确定每个子问题的局部最优解,并根据最优解模型,用子问题的局部最优解堆叠出全局最优解。
然后我用java实现了书上贪婪法的例子:0-1背包问题
这是贪婪法的一个经典案例,有N件物品和一个承重C的背包,每件物品重量wi,价值pi,求解将那几件物品放入背包价值最大而又不超过负重。
书上举了一个例子:物品重量{35,30,60,50,40,10,25}
物品价值{10,40,30,50,35,40,30}
策略一:取最小重量的包负重140,价值155
策略二:取最大价值的包负重130,价值165
策略三:取价值密度最大的包负重150,价值170
然后作者给了C语言的策略一的实现方法。
我不太看得懂C,但是我看了几次作者的思想,自己渐渐也有点思路了。
于是我就用java自己实现了贪心算法,其中策略三这里卡了有半个小时了,原因是算法出了问题。