当前位置: 首页 > news >正文

贪心算法——c#

贪心算法通俗解释

贪心算法是一种"每一步都选择当前最优解"的算法策略。它不关心全局是否最优,而是通过局部最优的累积来逼近最终解。优点是简单高效,缺点是可能无法得到全局最优解。

一句话秒懂

自动售货机找零钱:用最少数量的硬币凑出指定金额。比如找零198美分,它会优先用25美分的大硬币,不够再用小的,直到凑够金额。


背景故事

想象你在加拿大超市当收银员(CAD场景):

  1. 顾客买了东西

  2. 你需要快速找出零钱198分

  3. 收银台硬币有:50分、25分、10分、5分、1分

  4. 目标:用最少的硬币数量凑出198分

using System;
using System.Collections.Generic;

public class GreedyAlgorithm
{
    [CommandMethod("xx")]
   public static void 贪心算法之硬币找零()
    {
        // 场景模拟:在 CAD 系统中自动计算最优找零方案
       List<int> coins = new List<int> { 1, 5, 10, 25,50 }; // 硬币面额(美分)
        int amount = 198; // 需要找零的金额(美分)

        List<int> result = CoinChange(coins, amount);

        Env.Editor.WriteMessage($"找零 {amount} 美分需要的最少硬币:");
        foreach (int coin in result)
        {
            Env.Editor.WriteMessage(coin + " "); 
        }
    }

    /// <summary>
    /// 贪心算法实现硬币找零
    /// </summary>
    /// <param name="coins">可用硬币面额数组</param>
    /// <param name="amount">目标金额</param>
    /// <returns>硬币组合列表</returns>
    static List<int> CoinChange(List<int> coins, int amount)
    {
        var sortCoins = coins.OrderByDescending(x=>x).ToList();
       // Array.Sort(coins, (a, b) => b.CompareTo(a)); // 降序排序(关键贪心步骤)
        List<int> change = new List<int>();

        foreach (int coin in sortCoins)
        {
            while (amount >= coin)
            {
                // 在 CAD 系统中,这里可以记录交易日志
                change.Add(coin);
                amount -= coin;
            }
        }

        return change;
    }
}

 

代码注释说明:

  1. Array.Sort(coins, (a, b) => b.CompareTo(a))
    将硬币按面额从大到小排序,这是贪心算法的核心——优先使用大面额硬币

  2. while (amount >= coin)
    只要当前硬币可以用就持续使用,体现贪心的"局部最优"特性

  3. 时间复杂度为 O(n log n),主要来自排序操作

  4. 贪心算法特点总结

    特性说明
    优点实现简单,运行效率高
    缺点不一定得到全局最优解
    适用场景问题具有贪心选择性质
    CAD 应用场景路径规划、元件布局、自动布线等

 

相关文章:

  • Ubuntu24.04下管理自己的ssh连接
  • 关于ISP Pipeline LSC(镜头阴影校正)位置的一些想法
  • Java 大视界 -- 基于 Java 的大数据实时流处理中的窗口操作与时间语义详解(135)
  • Elastic Stack 8.16.0 日志收集平台的搭建
  • Java 中的序列化和反序列化是什么?
  • IntelliJ IDEA 快捷键系列:重命名快捷键详解
  • Tailwindcss开启黑夜模式
  • 数据结构-----初始数据结构、及GDB调试
  • python爬虫Scrapy(6)之增量式
  • 2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题E卷
  • OpenGL
  • AIDD-人工智能药物设计-Nat. Comput. Sci. | 利用机器学习引导的对接筛选,实现快速遍历广阔化学空间
  • 商品详情页
  • Spring AI整合DeepSeek、Ollama本地大模型
  • 队列+宽度优先搜索,力扣.662.二叉树最大高度 力扣515.在每个数行中找最大值力扣703.数据流中第k大元素力扣692.前k个高频词
  • Python的types库学习记录
  • todolist docker 小工具
  • 【零基础入门unity游戏开发——进阶篇】unity中配合VideoClip和VideoPlayer组件实现视频播放
  • 给单片机生成字库的方案
  • Android中实现多线程的几种方式
  • 设计好 英文网站/网站流量
  • 岳阳网站建设方案/百度指数的主要用户是
  • 深圳横岗网站建设/厦门seo网站管理