news 2026/6/13 19:19:48

说说什么是贪心算法什么是回溯算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
说说什么是贪心算法什么是回溯算法

目录

一、贪心算法 (Greedy Algorithm)

核心思想

图形化示例:找零钱问题

本题中的贪心应用

贪心算法特点

二、回溯算法 (Backtracking Algorithm)

核心思想

图形化示例:从 [0, 1, 4] 中选2个的所有组合

详细的回溯树(选2个处理器)

回溯算法代码执行流程

执行过程可视化

回溯算法特点

三、两种算法的对比

决策树对比图

实际应用场景对比表

四、本题中的综合应用


一、贪心算法 (Greedy Algorithm)

核心思想

每一步都做出当前看起来最优的选择,期望通过局部最优达到全局最优。

图形化示例:找零钱问题

假设你需要找零36元,有面值为[20, 10, 5, 1]的纸币,如何用最少的纸币数量?

目标:36元 可用纸币:[20, 10, 5, 1] 贪心策略:每次选择不超过剩余金额的最大面值 步骤图示: ┌─────────────────────────────────────┐ │ 剩余: 36元 │ │ ↓ 选择最大: 20元 │ │ 剩余: 16元 │ │ ↓ 选择最大: 10元 │ │ 剩余: 6元 │ │ ↓ 选择最大: 5元 │ │ 剩余: 1元 │ │ ↓ 选择最大: 1元 │ │ 剩余: 0元 ✓ │ └─────────────────────────────────────┘ 结果:[20, 10, 5, 1] = 4张纸币

本题中的贪心应用

申请1个处理器,可用处理器:[0, 1, 4, 5, 6, 7] 链路分组: ┌──────────────┐ ┌──────────────┐ │ 链路A (0-3) │ │ 链路B (4-7) │ │ 可用: [0,1] │ │ 可用: [4,5,6,7] │ │ 数量: 2 │ │ 数量: 4 │ └──────────────┘ └──────────────┘ 优先级顺序:[1, 3, 2, 4] ↓ 检查优先级1: 链路A(2个)❌ 链路B(4个)❌ ↓ 检查优先级3: 链路A(2个)❌ 链路B(4个)❌ ↓ 检查优先级2: 链路A(2个)✓ 链路B(4个)❌ ↓ 找到匹配!选择链路A,停止搜索

贪心算法特点

优点

  • 简单高效
  • 时间复杂度低
  • 代码实现简洁

缺点

  • 不一定能得到全局最优解
  • 需要问题满足"贪心选择性质"

二、回溯算法 (Backtracking Algorithm)

核心思想

通过试探性地构建解决方案,遇到不满足条件时就回退(撤销选择),继续尝试其他路径。

图形化示例:从 [0, 1, 4] 中选2个的所有组合

开始 [] | ┌─────────────┼─────────────┐ | | | 选0 选1 选4 | | | [0] [1] [4] | | | ┌───┴───┐ ┌───┴───┐ | | | | | | 选1 选4 选4 (无) (无) | | | [0,1]✓ [0,4]✓ [1,4]✓ 回溯过程: 1. 选择0 → 选择1 → [0,1]完成 ✓ → 回退到0 2. 从0 → 选择4 → [0,4]完成 ✓ → 回退到根 3. 选择1 → 选择4 → [1,4]完成 ✓ → 回退到根 4. 选择4 → 无法再选 → 结束 最终结果:[[0,1], [0,4], [1,4]]

详细的回溯树(选2个处理器)

[] start=0 | ┌───────────────┼───────────────┐ ↓ ↓ ↓ [0] [1] [4] start=1 start=2 start=3 | | | ┌───┴───┐ ┌───┴───┐ X (无后续) ↓ ↓ ↓ ↓ [0,1] [0,4] [1,4] X ✓ ✓ ✓ 图例说明: ↓ : 向下探索(选择元素) ✓ : 找到一个有效组合 X : 无法继续(已到数组末尾或长度已满) 回退: 撤销最后一次选择,尝试下一个选项

回溯算法代码执行流程

function getCombinations(arr, k) { const result = []; function backtrack(start, current) { // 递归终止条件 if (current.length === k) { result.push([...current]); return; } // 从start开始遍历 for (let i = start; i < arr.length; i++) { current.push(arr[i]); // ① 做选择 backtrack(i + 1, current); // ② 递归探索 current.pop(); // ③ 撤销选择(回溯) } } backtrack(0, []); return result; }

执行过程可视化

输入: arr=[0,1,4], k=2 调用栈变化: ┌─────────────────────────────────────────┐ │ backtrack(0, []) │ │ i=0: current=[0] │ │ ├─ backtrack(1, [0]) │ │ │ i=1: current=[0,1] → 保存✓ │ │ │ 回退: current=[0] │ │ │ i=2: current=[0,4] → 保存✓ │ │ │ 回退: current=[0] │ │ 回退: current=[] │ │ i=1: current=[1] │ │ ├─ backtrack(2, [1]) │ │ │ i=2: current=[1,4] → 保存✓ │ │ │ 回退: current=[1] │ │ 回退: current=[] │ │ i=2: current=[4] │ │ ├─ backtrack(3, [4]) │ │ │ (i=3 >= arr.length, 循环结束) │ │ 回退: current=[] │ └─────────────────────────────────────────┘ 结果: [[0,1], [0,4], [1,4]]

回溯算法特点

优点

  • 能找到所有可能的解
  • 适合求解组合、排列、子集等问题
  • 通过剪枝可以优化性能

缺点

  • 时间复杂度较高(指数级)
  • 需要额外的栈空间

三、两种算法的对比

决策树对比图

贪心算法(只走一条路): 根节点 ↓ 选最优选项 ↓ 选最优选项 ↓ 结束 ✓ 特点:一条路走到底,不回头 回溯算法(探索所有路径): 根节点 / | \ 路径1 路径2 路径3 / \ / \ / \ ✓ ✓ ✓ X X ✓ 特点:尝试所有可能,遇到死路就回退

实际应用场景对比表

特性贪心算法回溯算法
决策方式局部最优全局搜索
是否回退
解的数量1个所有可能
时间复杂度O(n) ~ O(n log n)O(2^n) ~ O(n!)
典型应用霍夫曼编码、最小生成树、活动选择N皇后、数独、组合总和

四、本题中的综合应用

完整流程图: 输入: [0,1,4,5,6,7], num=1 第一步:分组 ┌──────────────┐ ┌──────────────┐ │ 链路A: [0,1] │ │ 链路B: [4,5,6,7] │ └──────────────┘ └──────────────┘ 第二步:贪心选择最优链路 优先级: [1, 3, 2, 4] ↓ 检查长度2: 链路A匹配 ✓ 第三步:回溯生成组合 从[0,1]中选1个: [] / \ [0] [1] ✓ ✓ 输出: [[0], [1]]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 17:40:53

百度网盘免登录下载工具:三步实现高速文件获取

还在为百度网盘分享文件的繁琐下载流程而烦恼吗&#xff1f;现在&#xff0c;一款革命性的百度网盘免登录下载工具应运而生&#xff0c;让文件获取变得前所未有的简单快捷。无论是个人用户还是团队协作&#xff0c;这个解决方案都能为你带来极致的下载体验。 【免费下载链接】b…

作者头像 李华
网站建设 2026/6/13 2:25:00

百度网盘免登录直链下载:告别繁琐登录流程的智能解决方案

还在为百度网盘分享文件的下载流程而烦恼吗&#xff1f;每次面对朋友分享的重要文件&#xff0c;都需要经历注册、登录、验证码、限速下载的漫长折磨&#xff1f;现在&#xff0c;一款创新的免登录下载工具将彻底改变你的文件获取体验。 【免费下载链接】baiduwp-php A tool to…

作者头像 李华
网站建设 2026/6/12 20:17:06

C# WinForm程序调用Python接口运行GLM-4.6V-Flash-WEB模型

C# WinForm 调用 Python 接口运行 GLM-4.6V-Flash-WEB 模型 在智能制造、医疗影像和工业质检等场景中&#xff0c;越来越多的企业希望将前沿 AI 视觉能力嵌入到现有的本地化系统中。然而&#xff0c;许多关键业务系统仍基于 C# WinForm 构建——这类桌面应用稳定可靠&#xff…

作者头像 李华
网站建设 2026/6/11 21:18:40

Whisper时间戳技术终极指南:从入门到精通

Whisper时间戳技术终极指南&#xff1a;从入门到精通 【免费下载链接】whisper-timestamped Multilingual Automatic Speech Recognition with word-level timestamps and confidence 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-timestamped 在当今数字化时代…

作者头像 李华
网站建设 2026/6/13 15:36:04

VutronMusic技术架构解析:构建跨平台音乐播放的专业解决方案

VutronMusic技术架构解析&#xff1a;构建跨平台音乐播放的专业解决方案 【免费下载链接】VutronMusic 高颜值的第三方网易云播放器&#xff0c;支持本地音乐播放、离线歌单、桌面歌词、Touch Bar歌词、Mac状态栏歌词显示、Linux-gnome桌面状态栏歌词显示。支持 Windows / macO…

作者头像 李华
网站建设 2026/6/13 0:01:41

无损音乐下载工具:网易云高品质音频获取指南

还在为找不到高品质音乐而烦恼吗&#xff1f;想要轻松获取专业级别的无损音乐文件吗&#xff1f;今天就来介绍这款实用的无损音乐下载工具&#xff0c;让你从标准音质到Hi-Res母带都能随心下载&#xff0c;打造专属的顶级听觉盛宴&#xff01; 【免费下载链接】Netease_url 网易…

作者头像 李华