贪心算法个人见解

目录

基本思想:

贪心算法的步骤:

示例:


贪心算法(Greedy Algorithm)是一种基于贪心策略的算法范式,它在每一步选择中都采取当前状态下的最优选择,而不考虑全局最优解。贪心算法通常适用于那些问题,局部最优策略能够导致全局最优解的情况。

基本思想:

  1. 建立贪心选择性质: 通过某种规则确定每一步的选择,使每一步都是当前状态下的最优选择。

  2. 无后效性: 一个阶段的状态一旦确定,就不受后续决策的影响。即,某个阶段的状态只与当前阶段的状态有关。

  3. 贪心选择和最优子结构性质: 当一个问题的整体最优解可以通过一系列局部最优的选择得到时,就称该问题具有贪心选择性质,并且具有最优子结构性质。

贪心算法的步骤:

  1. 建立数学模型: 明确问题的具体要求,并用数学模型来描述问题。

  2. 制定贪心策略: 根据问题的性质,选择一种贪心策略,确保每一步都是局部最优的选择。

  3. 证明最优子结构性质: 证明每一步的贪心选择确实是最优的,并且该选择不影响其他子问题的最优解。

  4. 设计算法: 根据贪心策略设计算法,并实现解决问题。

示例:

考虑一个经典的贪心算法问题:找零钱问题(Coin Change Problem)。

问题描述:给定不同面额的硬币和一个总金额,找到能够组成该金额的最少硬币数。

贪心策略:每次选择面额最大的硬币,直到达到总金额。

算法步骤:

  1. 将硬币按面额降序排序。

  2. 从面额最大的硬币开始,尽可能多地选择该硬币,直到达到或超过目标金额。

  3. 如果仍有剩余金额,重复步骤2,选择次大面额的硬币,直到凑够总金额。

    public class GreedyCoinChange {

    复制代码
     public static int minCoins(int[] coins, int amount) {
         // 将硬币按面额降序排序
         Arrays.sort(coins);
         int coinCount = 0;
         int index = coins.length - 1;
    
         while (amount > 0 && index >= 0) {
             if (coins[index] <= amount) {
                 int numCoins = amount / coins[index];
                 coinCount += numCoins;
                 amount -= numCoins * coins[index];
             }
             index--;
         }
    
         return (amount == 0) ? coinCount : -1; // 如果amount不为0,说明无法凑够总金额
     }
    
     public static void main(String[] args) {
         int[] coins = {1, 2, 5};
         int amount = 11;
    
         int result = minCoins(coins, amount);
    
         if (result != -1) {
             System.out.println("最少硬币数量:" + result);
         } else {
             System.out.println("无法凑够总金额。");
         }
     }

    }

这个例子中,贪心算法通过选择面额最大的硬币,逐步凑够总金额,实现了在最少硬币数量下凑够总金额的目标。在实际问题中,需要注意问题的性质以及贪心选择是否确保最优解。不是所有问题都适合贪心算法,有时需要动态规划等其他方法来解决。

相关推荐
lisw055 小时前
微分与积分的本质区别解析
算法·数学建模·极限编程
xys_6786 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code6 小时前
Java动态数组(一)
java·数据结构·windows
Interview Aid1126 小时前
Google SWE Intern VO 面经:两轮 Coding,Follow-up 考察 BFS 状态
算法
琳达爱分享6 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
range6 小时前
带TTL的LRU缓存的实现-字节手撕-26/10/19
算法
糖果豆豆7 小时前
n log n 到底从哪来?排序下界、2-SAT 与 3-SAT、停机问题,卡的是同一件事
算法·架构
地平线开发者7 小时前
【玩转 征程6 算法工具链:PTQ 工具篇】hb_verifier
算法·自动驾驶
171320330计算机毕设编程7 小时前
计算机毕业设计 基于springboot+vue的在线观鸟视频播放网站 LW PPT
java·大数据·vue.js·spring boot·算法·课程设计
himobrinehacken7 小时前
位运算揭秘:左右移与符号位陷阱
c语言·c++·算法·安全