马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
贪默算法普通表明
贪默算法是一种"每一步都选择当前最优解"的算法战略。它不关心全局是否最优,而是通过局部最优的累积来迫近终极解。长处是简朴高效,缺点是大概无法得到全局最优解。
一句话秒懂
自动售货机找零钱:用最少数量的硬币凑出指定金额。比如找零198美分,它会优先用25美分的大硬币,不敷再用小的,直到凑够金额。
配景故事
想象你在加拿大超市当收银员(CAD场景):
- 顾客买了东西
- 你须要快速找出零钱198分
- 收银台硬币有:50分、25分、10分、5分、1分
- 目的:用最少的硬币数量凑出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;
- }
- }
复制代码
代码表明阐明:
- Array.Sort(coins, (a, b) => b.CompareTo(a))
将硬币按面额从大到小排序,这是贪默算法的焦点——优先使用大面额硬币
- while (amount >= coin)
只要当前硬币可以用就一连使用,体现贪婪的"局部最优"特性
- 时间复杂度为 O(n log n),重要来自排序操纵
- 贪默算法特点总结
特性阐明长处实现简朴,运行服从高缺点不肯定得到全局最优解实用场景题目具有贪婪选择性子CAD 应用场景路径规划、元件结构、自动布线等
|