贪心算法思想和例题讲解

本文介绍了贪婪算法的基本概念、步骤,并通过买卖股票的最佳时机问题进行实例解析。同时,探讨了贪婪算法与动态规划的区别,强调贪婪算法在决策时仅关注当前最优,不考虑全局最优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贪婪的商人总是想获得最大的利润,每一次交易都想获得最大利润,而不为长远考虑。

定义

贪婪算法:总是做出在当前最好的选择。而不是从整体上考虑,它所做出的仅仅是在局部上的最优解。所以贪婪算法必须保证无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

步骤

  • 把求解的问题分成若干个子问题;
  • 对每一子问题求解,得到子问题的局部最优解;
  • 把子问题的解局部最优解合成原来解问题的一个解。

例题:买卖股票的最佳时机问题

在这里插入图片描述
根据题目的意思,当天卖出以后,当天还可以买入,所以其实可以第三天卖出,第三天买入,第四天又卖出((5-1)+ (6-5) === 6 - 1)。所以算法可以直接简化为只要今天比昨天大,就卖出。所以我们只要保证今天比昨天大这一条件,就可以保证我们的结果是最优的

public class Solution {
    public int MaxProfit(int[] prices) {
        int ans=0;
        for(int i=1;i<=prices.Length-1;i++)//对应上述步骤一
        {
            if(prices[i]>prices[i-1])//对应上述步骤二
            {
                ans+=prices[i]-prices[i-1];//对应上述步骤三
            }
        }
        return ans;
    }
}

贪婪算法和动态规划的区别和联系

相同点:

  1. 都分解为子问题
  2. 都为推导算法

不同点:

  1. 动态规划中每一步的解往往需要依赖其及子问题的解,而贪婪算法只与当前这一步有关,只求出这一步的最优解。
  2. 动态规划往往是自下而上,贪婪算法往往是自上而下。

贪婪算法的其它例题:

欢迎评价和指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值