贪心算法是一种常用的算法,本文会以详细介绍贪心算法的基本思想及其代码实现例子@mikechen
贪心算法定义
贪心算法,英文名为Greedy Algorithm,又名贪婪法,是指在对问题求解时,总是做出在当前看来是最好的选择,从而希望能够导致结果是最好或者最优的算法。
也就是说,贪心算法中,无需考虑全局最优解,仅考虑每一步最优即可,这就是贪心算法。
贪心算法原理思想
贪心算法的基本思路,主要分为如下4步:
基本思路:
1)建立数学模型来描述问题;
2)把求解的问题分成若干个子问题。
3)对每一子问题求解,得到子问题的局部最优解。
4)把子问题的解局部最优解合成原来解问题的一个解。
贪心算法的优缺点
1.优点
直观、易懂,实现简单,算法一旦做出决定,就不用回过头来去重新检查前面计算过的那些值。
2.缺点
并非所有问题都能那么解决,对于很多问题,在某个小范围内所做的最优决策,未必是整个问题的最优决策。
贪心算法经典例子
1.找零钱的例子
1)题目
指定币值和相应的数量,用最少的数量凑齐某金额。
2)思路
利用贪心算法,基本思路:我们优先选择面值大的钱币,以此类推,直到凑齐总金额。
3)算法实现
2.活动选择例子
1)题目
有这么一堆数,按照金字塔排列下来,如下图所示:
我们从顶点开始,求从顶部到底部的最大路径之和。
2)思路
利用贪心算法,基本思路:要是用眼瞅,比较容易能看出来最佳路径是9-7-3-4-5,但是如果数一多,眼瞅就不好使了,此时就得靠代码去算。
3)算法实现
// 注意,下面的代码只是表意,不能直接扒过去用 // a[i][j]表示数组,maxJ表示数组的最大层数,temp表示临时数值 // maxJ表示总列数,maxI表示当前列的最大行数 for(j=0; j<maxJ; j++){ for(i=0; i<maxI; i++){ temp1 = a[i][j] + a[i][j+1]; temp2 = a[i][j] + a[i+1][j+1]; temp = max(temp1, temp2); } maxSum = maxSum + temp; } return maxSum;
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》