首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >那些耳熟能详的经典算法,到底在做什么?

那些耳熟能详的经典算法,到底在做什么?

作者头像
Crossin先生
发布2026-03-11 18:57:03
发布2026-03-11 18:57:03
390
举报

在你学编程的过程中,总有一些算法的名字反复出现,像 “A*算法”、“贪心算法”、“动态规划”等等,听起来高深莫测,不明觉厉。

其实这些算法解决的,都是我们开发中常见的问题。你可能在无意间已经用到过很多。

今天,Crossin 就来讲几个经典算法:它们是干什么的,怎么做的,以及为什么重要。我们不扣代码细节,只讲思路,让你读完对这些算法有一个更直观的认识。

二分查找:猜数字的智慧

想象你在玩“猜数字”游戏,范围是 1 到 100,你会怎么猜?

二分查找(Binary Search)就是这个游戏的编程版:在一个有序数组里快速定位某个元素。比如找一本按字母排序的书,你不会一本本翻,而是先翻到中间,判断目标在前半还是后半,然后继续对半缩小范围。

它每次都把搜索范围砍一半,效率极高,时间复杂度只有 O(log n)。前提是:数据必须有序。数据库索引、搜索提示补全,背后都在悄悄用着它。

广度优先搜索:像水波一样扩散

广度优先搜索(BFS,Breadth-First Search)就像在迷宫里找最近的出口。它从起点出发,像水波一样一圈圈扩散:先看一步能到的,再看两步的,层层推进。算法里用一个队列来记录“待探索”的点。

它特别适合找“最短路径”,比如无权图里的最少步数,或者检查网络里哪些节点相互连通。社交软件里的“共同好友”、游戏里的迷宫解法,BFS 都是常客。

深度优先搜索:一条路走到黑

深度优先搜索(DFS,Depth-First Search)更像一个探险家:选一条路一直走到底,走不通了再回头换路。它常用栈(或递归)来记录路径。

DFS 的风格是深入挖掘,可能很快找到答案,也可能绕很远的路。它比 BFS 更节省空间,因为只需要存一条路径,但也容易走进死胡同。它常用在遍历所有可能的场景,比如数独、N 皇后问题,或者任务排序、检测图中环路。

迪杰斯特拉算法:规划最短路线

迪杰斯特拉算法(Dijkstra’s Algorithm)由荷兰科学家 Dijkstra 在 1956 年提出,用来寻找带权重图的最短路径。比如地图 App 上规划开车路线,道路的长短或拥堵程度就是“权重”。

算法的思路是:从起点出发,每次都选择当前能到达的最近节点,再从那里继续。为了加速,通常配合优先队列使用。它能保证找到的路径一定是最优解,只要权重不为负。GPS 导航、游戏里的寻路系统,都少不了它。

A* 算法:带直觉的探索

A* 算法可以看作 Dijkstra 的“升级版”。它不仅考虑已经走过的距离 g(n),还会估算离终点还有多远 h(n),并以 f(n) = g(n) + h(n) 来决定下一个探索方向。

这就像探路时,既记下脚程,又凭直觉朝出口走。好的估算能让它少走许多弯路。A* 广泛用于游戏开发,比如《星际争霸》里单位如何绕开障碍找到最近的路。

快速排序:分而治之的效率王

快速排序(Quick Sort)由 Tony Hoare 在 1959 年提出。它的思路是:挑一个“枢轴”,把比它小的放左边,比它大的放右边,再递归地处理左右两边。

这种“分而治之”的方式让它平均效率达到 O(n log n),堪称高效。但如果枢轴选得不好(比如数据本来就有序),性能可能降到 O(n²)。很多语言的排序函数(如 Java 的 Arrays.sort)都在底层使用快速排序,可见它的实用性。

动态规划:记住过去,优化未来

动态规划(Dynamic Programming,DP)由 Richard Bellman 在上世纪 50 年代提出。它的核心思想是:把大问题拆成小问题,把小问题的解保存下来,下次直接复用。

比如背包问题(有限空间装最值钱的物品)、最长公共子序列(衡量字符串相似度)等,都能用 DP 高效解决。它就像是做题时把中间结果写在草稿纸上,避免一遍遍重算,从指数级的复杂度降到多项式级。很多缓存机制、策略优化,都在借助它的思路。

结语:算法是解题的伙伴

二分查找、BFS、DFS、Dijkstra、A*、快速排序、动态规划……这些名字听起来抽象,其实都是从现实问题中提炼出的智慧。它们就像工具箱里的瑞士军刀,各自擅长不同的场景,却都能在关键时刻派上用场。

学习算法,不必死记硬背。先理解:它们到底解决了什么问题。等到下次遇到类似情境,实际使用过它们,就会有种恍然大悟的感觉。

如果本文对你有帮助,欢迎点赞、评论、转发。你们的支持是我更新的动力~

感谢转发点赞的各位~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档