算法设计与分析:贪心算法与动态规划实战解析
1. 算法设计与分析期末备考指南作为计算机科学专业的核心课程算法设计与分析一直是学生们既期待又畏惧的考试科目。2025年HNU的期末考试将全面检验学生对各类算法思想的理解和实际应用能力。根据往年经验这次考试很可能会重点考察贪心算法、动态规划、分支限界法和回溯法等经典算法范式。重要提示算法考试不是死记硬背关键在于理解算法思想并能灵活应用到不同场景中。建议同学们通过大量练习来培养算法思维。1.1 考试重点解析从往届试题和教学大纲分析本次考试可能包含以下核心内容贪心算法活动选择问题、霍夫曼编码、最小生成树Prim和Kruskal算法动态规划01背包问题、最长公共子序列、矩阵链乘法、独特路径问题分支限界法旅行商问题、作业调度问题回溯法N皇后问题、图的m着色问题、子集和问题每种算法类型都有其特定的应用场景和解题思路理解这些差异对考试至关重要。2. 核心算法深度剖析2.1 贪心算法实战技巧贪心算法以其简洁高效著称特别适合解决最优化问题。它的核心思想是每一步都做出局部最优选择希望最终达到全局最优。典型例题活动选择问题假设有一组活动每个活动都有开始和结束时间。如何选择最多的互不冲突的活动def activity_selection(start, finish): n len(finish) selected [] # 首先按照结束时间排序 activities sorted(zip(start, finish), keylambda x: x[1]) # 总是选择第一个活动 i 0 selected.append(i) # 考虑剩余活动 for j in range(1, n): # 如果当前活动的开始时间大于等于上一个选中活动的结束时间 if activities[j][0] activities[i][1]: selected.append(j) i j return selected注意事项贪心算法并不总是能得到全局最优解只有在具有贪心选择性质的问题中才适用证明贪心选择的正确性通常需要数学归纳法活动选择问题必须先按结束时间排序这是解题的关键2.2 动态规划精要动态规划是解决重叠子问题和最优子结构问题的利器。与贪心算法不同DP会考虑所有可能的解并选择最优的一个。01背包问题解析给定一组物品每个物品有重量和价值在限定总重量的情况下如何选择物品使总价值最大。def knapsack(W, wt, val, n): K [[0 for x in range(W 1)] for x in range(n 1)] for i in range(n 1): for w in range(W 1): if i 0 or w 0: K[i][w] 0 elif wt[i-1] w: K[i][w] max(val[i-1] K[i-1][w-wt[i-1]], K[i-1][w]) else: K[i][w] K[i-1][w] return K[n][W]DP解题步骤定义子问题状态表示建立状态转移方程确定初始条件和边界情况计算顺序自底向上或带备忘录的自顶向下构造最终解经验分享动态规划问题中最难的部分往往是正确识别子问题和建立状态转移方程。建议多练习经典问题来培养直觉。3. 分支限界法与回溯法对比3.1 分支限界法核心思想分支限界法是一种系统搜索解空间的方法通过限界函数剪枝来提高效率。它特别适合解决组合优化问题。旅行商问题(TSP)应用计算当前路径的下界最小可能代价如果下界大于已知最优解则剪枝否则继续分支搜索from queue import PriorityQueue class Node: def __init__(self, path, cost, matrix, level): self.path path self.cost cost self.matrix matrix self.level level def __lt__(self, other): return self.cost other.cost def reduce_matrix(matrix): # 实现矩阵约减 pass def solve_tsp(adj_matrix): n len(adj_matrix) pq PriorityQueue() # 创建根节点 root Node([0], 0, adj_matrix, 0) root.cost reduce_matrix(root.matrix) pq.put(root) min_cost float(inf) best_path [] while not pq.empty(): min_node pq.get() if min_node.level n - 1: # 完整路径 current_cost min_node.cost min_node.matrix[min_node.path[-1]][0] if current_cost min_cost: min_cost current_cost best_path min_node.path [0] continue for i in range(n): if i not in min_node.path: # 创建子节点 child_matrix [row[:] for row in min_node.matrix] # 更新矩阵 # ... child Node(min_node.path [i], min_node.cost min_node.matrix[min_node.path[-1]][i], child_matrix, min_node.level 1) child.cost reduce_matrix(child.matrix) if child.cost min_cost: pq.put(child) return best_path, min_cost3.2 回溯法精要回溯法通过尝试分步的方式解决问题当发现当前分步不能得到有效解时就取消上一步或几步的计算。N皇后问题示例def solve_n_queens(n): def could_place(row, col): for i in range(row): if board[i] col or \ board[i] - i col - row or \ board[i] i col row: return False return True def backtrack(row0): if row n: result.append(board[:]) return for col in range(n): if could_place(row, col): board[row] col backtrack(row 1) board[row] -1 result [] board [-1] * n backtrack() return result两种方法对比特性分支限界法回溯法搜索方式广度优先/最佳优先深度优先内存使用较高需要存储活结点较低递归栈解的质量通常能找到最优解能找到所有解适用问题优化问题决策问题/枚举问题剪枝策略限界函数约束函数4. 其他重要算法考点4.1 图算法精要图算法是算法课程的另一大重点Dijkstra、Prim、Kruskal等算法几乎每年都会以某种形式出现。Dijkstra算法实现要点import heapq def dijkstra(graph, start): distances {vertex: float(infinity) for vertex in graph} distances[start] 0 pq [(0, start)] while pq: current_distance, current_vertex heapq.heappop(pq) if current_distance distances[current_vertex]: continue for neighbor, weight in graph[current_vertex].items(): distance current_distance weight if distance distances[neighbor]: distances[neighbor] distance heapq.heappush(pq, (distance, neighbor)) return distances常见错误忘记初始化距离为无穷大没有处理负权边Dijkstra不适用于有负权边的图优先级队列中未更新更优路径4.2 字符串匹配算法KMP算法是字符串匹配中的经典理解其失效函数(next数组)的计算是关键。def compute_lps(pattern): lps [0] * len(pattern) length 0 i 1 while i len(pattern): if pattern[i] pattern[length]: length 1 lps[i] length i 1 else: if length ! 0: length lps[length-1] else: lps[i] 0 i 1 return lps def kmp_search(text, pattern): lps compute_lps(pattern) i j 0 n, m len(text), len(pattern) positions [] while i n: if text[i] pattern[j]: i 1 j 1 if j m: positions.append(i-j) j lps[j-1] else: if j ! 0: j lps[j-1] else: i 1 return positions5. 备考策略与实战建议5.1 高效复习方法分类练习法按算法类型分类练习比较同类算法的异同手写代码考试通常要求手写代码平时要多练习时间管理模拟考试环境限时完成题目错题分析建立错题本分析错误原因5.2 考试应对技巧审题要仔细明确题目要求选择最合适的算法先设计再编码先写出伪代码或算法步骤再转化为具体代码边界条件特别注意空输入、极端值等边界情况复杂度分析准备好解释算法的时间和空间复杂度5.3 常见问题解答Q如何判断一个问题适合用动态规划还是贪心算法A看问题是否具有最优子结构和贪心选择性质。如果能证明局部最优解能导致全局最优解就用贪心如果需要考虑所有可能的解组合就用DP。Q分支限界法中如何设计好的限界函数A限界函数应该能够1) 快速计算2) 尽可能紧地估计最优解3) 保证不会剪掉可能的最优解。通常可以从松弛问题如忽略某些约束获得下界。Q回溯法的效率很低有什么优化方法A1) 尽早剪枝在递归树的浅层就判断出不可行2) 改变搜索顺序先尝试更可能成功的分支3) 使用记忆化技术避免重复计算。在实际考试中我建议先快速浏览所有题目判断难易程度和所需算法然后合理分配时间。对于不确定的题目先写出思路和关键步骤也能获得部分分数。记住清晰的表达和正确的算法思想往往比完美的代码更重要。

相关新闻

从零到上线:Vercel与Docker Compose实现网站一键部署实战

从零到上线:Vercel与Docker Compose实现网站一键部署实战

1. 背景与核心概念:为什么“一句话部署”成为可能? 对于很多刚接触后端开发或运维的同学来说,网站部署常常是学习路上的第一道高墙。传统的部署流程涉及服务器购买、环境配置、域名解析、Nginx/Apache配置、SSL证书申请等一系列繁琐步骤&…

2026/9/25 23:14:05 阅读更多 →
基于Codex框架快速构建AI Agent桌面宠物:从环境配置到技能开发全流程

基于Codex框架快速构建AI Agent桌面宠物:从环境配置到技能开发全流程

1. 先搞清楚 Codex 自定义宠物到底能做什么如果你在找“AI Agent 小宠物”的教程,大概率是想做一个能放在桌面上、有互动能力、还能帮你干点活的智能助手。Codex 这个平台,简单说,它提供了一个框架,让你能像“组装”一样&#xff…

2026/10/10 11:32:11 阅读更多 →
PR预览黑屏问题排查与解决方案

PR预览黑屏问题排查与解决方案

1. PR预览黑屏问题全面解析刚接触视频剪辑的新手遇到PR预览黑屏时,往往会手忙脚乱。作为从业8年的影视后期制作人,我处理过上百例类似问题。PR(Premiere Pro)预览黑屏看似简单,实则可能涉及硬件、软件、设置、素材等多…

2026/10/11 6:57:10 阅读更多 →

最新新闻

Vue 3 响应式原理是什么?Proxy、ref 和 reactive 有什么区别?

Vue 3 响应式原理是什么?Proxy、ref 和 reactive 有什么区别?

Vue 3 响应式原理是什么?Proxy、ref 和 reactive 有什么区别? Vue 3 的 reactive 为对象创建响应式代理。依赖执行时读取属性,系统记录这段逻辑依赖哪个属性;属性改变后,再通知相关依赖更新。 Proxy 负责拦截操作&am…

2026/10/14 3:35:37 阅读更多 →
如果你想拥有自己的 Agent,为什么值得从 rpi 开始

如果你想拥有自己的 Agent,为什么值得从 rpi 开始

如果你只是想找一个好用的 coding agent,直接安装一个现成产品通常是最省事的选择。 但如果你要把 Agent 放进自己的产品、服务或开发工具里,问题就变了:你需要的可能不是一个只能通过命令行使用的工具,而是一套自己能够拥有和控制…

2026/10/14 3:35:37 阅读更多 →
2026年免费AIGC检测工具实测:每天两次免费查AI率,20万字一次测完!

2026年免费AIGC检测工具实测:每天两次免费查AI率,20万字一次测完!

2026年免费AIGC检测工具实测:每天两次免费查AI率,20万字一次测完! 2026年做论文,AIGC检测几乎成了必经的一关。市面上免费的检测工具有一些,但能整篇测、报告又详细的不多。 我实测了今年的一款免费AIGC检测工具Pape…

2026/10/14 3:35:37 阅读更多 →
逻辑严谨吗?8款AI论文软件势力榜,毕业无忧秘籍!

逻辑严谨吗?8款AI论文软件势力榜,毕业无忧秘籍!

写论文时是否总感觉思路混乱,无从下手?文献资料太多,却理不出逻辑脉络?查重反复修改,格式调整又耗时费力? 别担心!AI论文写作工具正成为高校学子的得力助手。本文将围绕学术规范性、文献整合能力…

2026/10/14 3:35:37 阅读更多 →
文章封面批量生成:一条命令产出 1200×675 专属封面(PIL 实战)

文章封面批量生成:一条命令产出 1200×675 专属封面(PIL 实战)

文章封面批量生成:一条命令产出 1200675 专属封面(PIL 实战) 写技术博客的人大多经历过这一刻:文章发了,列表页却挂着一张灰蒙蒙的默认图。点率差一截,还以为是自己标题起得不好。 这篇文章做一件事&#x…

2026/10/14 3:35:37 阅读更多 →
一张 RTX 3060 12GB 跑三元 27B + 128K 上下文——NInfer Fusion KVMem 实测

一张 RTX 3060 12GB 跑三元 27B + 128K 上下文——NInfer Fusion KVMem 实测

一、项目说明本项目意图在低成本平台上;运行开源框架Qwen3.8 27B的开源模型,本项目的可行性来源于B站大佬推出的NInfer引擎以及得益于三元量化模型的极低权重;并且保留了全精度原模型百分之九十八的能力(B站UP口径)。在…

2026/10/14 3:34:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →