贪婪算法:
在每一个阶段,可以认为所做出的的决定是最好的,而不考虑将来的后果。通常,这意味着选择的是某个局部最优。当算法终止时,我们希望局部最优等于全局最优,如果是这样的话,这个算法就是正确的,否则我们将得到一个次最优解。
若我们得到的局部最优等于全局最优,则称这个问题是可绝对贪婪问题,否则它是一个近似贪婪问题,在不要求最优解时,我们可以使用此算法得到次最优解。
贪心法的设计思路:
1.创建数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
使用前提:局部最优策略能导致产生全局最优,所以谨慎使用贪心算法。
贪心算法典型例题:
1.Huffuman树 -------------来自蓝桥杯练习题BASIC-28。测试已通过
题目:
设计思路:
每次选择数组中最小的两个元素进行相加即可得到最优权值。
代码:
public class HuffmanTree {
/**
* 使用递归贪心计算每一次的最小权值。
* @param arr 需要计算最小权值的数组
* @param result 初始结果,一般传入0
* @return 返回最小权值
*/
public static int minPrice(int[] arr,int result) {
if(arr.length == 1)
return result;
int min1 = 0,min2 = 0;
Arrays.sort(arr);
min1 = arr[0];
min2 = arr[1];
int[] temp = new int[arr.length-1];
for(int i =0;i<temp.length - 1;i++) {
temp[i]