news 2026/4/18 7:28:45

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

作者头像

张小明

前端开发工程师

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/4/17 18:39:45

GLM-4.6V-Flash-WEB能否识别医疗处方图像内容?

GLM-4.6V-Flash-WEB 能否识别医疗处方图像内容&#xff1f; 在数字医疗加速发展的今天&#xff0c;医生手中的纸质处方正逐渐被智能系统“读懂”。然而&#xff0c;一张看似简单的处方图——潦草的手写体、不规则的排版、缩写的医嘱术语——对传统OCR来说仍是巨大挑战。即便能提…

作者头像 李华
网站建设 2026/4/18 3:15:50

Obfuscar代码保护终极指南:快速上手完整教程

Obfuscar代码保护终极指南&#xff1a;快速上手完整教程 【免费下载链接】obfuscar Open source obfuscation tool for .NET assemblies 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscar 想要保护你的.NET应用程序不被轻易反编译和逆向工程吗&#xff1f;Obfusca…

作者头像 李华
网站建设 2026/4/17 12:45:04

语音时间戳精准定位技术深度解析与实战指南

语音时间戳精准定位技术深度解析与实战指南 【免费下载链接】whisper-timestamped Multilingual Automatic Speech Recognition with word-level timestamps and confidence 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-timestamped 在多媒体内容制作和语音分…

作者头像 李华
网站建设 2026/4/17 13:44:53

百度网盘免登录下载工具完整使用指南

还在为百度网盘的下载速度而烦恼吗&#xff1f;这个免费的PHP工具能够帮助您获取百度网盘分享链接的下载地址&#xff0c;无需繁琐的登录流程即可享受便捷的文件下载体验。 【免费下载链接】baiduwp-php A tool to get the download link of the Baidu netdisk / 一个获取百度网…

作者头像 李华
网站建设 2026/4/18 6:29:46

多渠道招聘优化指南:HR 招聘管理系统的高效运用技巧

在当下的招聘场景中&#xff0c;多渠道招聘已成为 HR 获取人才的核心方式&#xff0c;但渠道分散、信息杂乱、筛选低效等问题也随之而来&#xff0c;让不少 HR 陷入困扰。HR 招聘管理系统作为整合招聘资源的关键工具&#xff0c;其对多渠道招聘的优化作用愈发重要。本文将从多渠…

作者头像 李华
网站建设 2026/4/18 2:40:17

Kodi中文插件库:三步教你打造专属智能家庭影院

Kodi中文插件库&#xff1a;三步教你打造专属智能家庭影院 【免费下载链接】xbmc-addons-chinese Addon scripts, plugins, and skins for XBMC Media Center. Special for chinese laguage. 项目地址: https://gitcode.com/gh_mirrors/xb/xbmc-addons-chinese 还在为Ko…

作者头像 李华