[算法] 最易理解的贪心算法讲解(带实例)

一、定义

贪心算法,定义为:将一个大的问题拆解为若干个小问题,在求解问题的每一步中,不管当前这一步的决策会对未来有什么影响,都只将眼前的决策取到最优即可。如此反复,直至最终得到最优解。

缺陷:只是希望得到最优解,尽管每一步都是最优解,但在整体上并不一定能够得到最优解。

优点:时间复杂度通常都比较,也就是花的时间比较少。整体可能不是最优,但也八九不离十


二、举例

有这么一堆数,按照金字塔排列下来,如下图所示。我们从顶点开始,求从顶部到底部的最大路径之和;换句话说就是从顶到底每层依次加一个数,令这个数字最大。

要是用眼瞅,比较容易能看出来最佳路径是9-7-3-4-5,但是如果数一多,眼瞅就不好使了,此时就得靠代码去算。

有一种解法就是把每一种可能全算出来,暴力爆破,写起来也简单。但显然这样非常耗时耗内存,分分钟卡死计算机,所以这里我们就用到贪心算法


三、代码

我们将此金字塔数组用a[i][j]表示,简单的写个代码如下:

// 注意,下面的代码只是表意,不能直接扒过去用
// 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;

猜你喜欢

转载自blog.csdn.net/m0_55080712/article/details/124675250