常用算法详解
文章平均质量分 89
算法太难?面试没底?我是阿扩!这个专栏,专为想系统提升算法能力的你打造。精选面试高频、项目实用算法,用最生动的方式讲透核心,Java/Python双语实战。跟我一起,告别死记硬背,玩转算法,让面试官眼前一亮,项目效率起飞!
杨小威v
我是阿扩,一位拥有超10年一线大厂经验的后端架构师。我曾长期深耕于Java/Python技术栈,对Oracle、MySQL等数据库的复杂应用与性能调优有丰富的实战心得。
顺应技术浪潮,我近三年将重心全面转向AI领域,专注于大语言模型(LLM)的工程化落地与性能优化。
在这里,我会将实践中踩过的坑、总结的思考、提炼的干货一一分享。希望我的文章能为你点亮一盏灯,让我们在AI时代共同成长。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
章节十五:面试通关“最终形态”:算法思维大串讲与实战模拟
首先系统回顾了快速排序、DFS/BFS、动态规划等十余种核心算法,强调算法思维比代码记忆更重要。文章提出解题七步法:1)抽象问题本质;2)分解子问题;3)识别算法模式;4)权衡时空复杂度;5)处理边界条件;6)选择数据结构;7)验证优化思路。面试实战部分强调沟通技巧,建议分步骤展示思考过程,从暴力解法逐步优化,并通过示例验证思路。最后指出算法学习无止境,需持续练习将知识内化为能力。原创 2025-06-18 12:00:00 · 814 阅读 · 0 评论 -
章节十四:乱序中的“指挥家”:堆排序奥义 - (堆排序 / Heap Sort)
堆排序是一种高效的基于堆数据结构的排序算法,具有O(N log N)的时间复杂度和原地排序特性。算法分为两步:首先将无序数组构建为大顶堆(保证父节点大于子节点),然后反复将堆顶元素(最大值)与末尾元素交换并调整堆,最终完成排序。堆排序通过数组模拟完全二叉树,利用堆的性质高效提取最大值,适用于内存受限场景。文章详细图解了建堆和排序过程,并提供了Java和Python的代码实现,展示了堆排序如何从乱序数据中逐步建立有序序列。原创 2025-06-18 10:15:00 · 597 阅读 · 0 评论 -
章节十三:海量数据“显微镜”:布隆过滤器 - (布隆过滤器 / Bloom Filter)
布隆过滤器是一种高效的空间概率型数据结构,用于快速判断元素是否存在于集合中。其核心特点是:若判断元素不存在则一定不存在(无假阴性),但可能存在误判(有假阳性)。它通过位数组和多个哈希函数实现:添加元素时将哈希对应的位设为1,查询时检查所有位是否为1。相比传统哈希表,布隆过滤器节省大量内存空间,查询速度快,但不支持删除操作。典型应用包括网页爬虫去重、数据库查询优化、缓存穿透防护等。虽然存在误判可能,但在海量数据处理场景中,其空间和时间效率优势明显,是系统设计中重要的优化工具。原创 2025-06-17 11:00:00 · 1019 阅读 · 0 评论 -
章节十二:搜索框的“联想词”:Trie树揭秘 - (字典树 / Trie)
本文介绍了Trie树(字典树)这一高效字符串管理数据结构。Trie树通过共享前缀的方式存储字符串,其核心结构包含字符节点和单词结束标记。文章详细讲解了Trie树的插入、查找和前缀匹配操作,并通过Java代码示例展示了具体实现。Trie树在搜索联想、自动补全等场景性能优异,时间复杂度为O(L),其中L为字符串长度。原创 2025-06-17 09:30:00 · 614 阅读 · 0 评论 -
章节十一:棋盘上的“试探”:回溯解N皇后 - (回溯算法 / Backtracking)
【算法精讲】回溯算法解N皇后问题 本文以生动的比喻介绍了回溯算法(Backtracking)的核心思想——通过"试探-失败-回退"的递归过程寻找问题解。回溯算法采用深度优先搜索策略,但会通过剪枝优化避免无效搜索。文章以经典N皇后问题为例,详细讲解解题思路:每行放置一个皇后,使用三个集合记录已占用的列和对角线,实现高效合法性检查。通过4皇后问题的决策树图解,直观展示了回溯算法"前进-碰壁-回退"的工作机制。原创 2025-06-16 19:42:02 · 636 阅读 · 0 评论 -
章节十:地图导航的“最优路径”:Dijkstra - (迪杰斯特拉 / Dijkstra‘s Algorithm)
本文介绍了迪杰斯特拉(Dijkstra)算法,这是一种用于计算带权图中单源最短路径的经典算法。文章通过地图导航的类比,生动说明该算法如何寻找起点到所有其他地点的最低成本路径。其核心采用贪心策略:将节点分为已确定和待探索两个集合,通过优先队列选择当前最短路径节点,逐步向外扩展并更新邻居距离。文中包含详细图解演示(从A出发的6步执行过程)以及Java/Python代码实现,特别强调算法仅适用于非负权边的情况。原创 2025-06-16 19:33:15 · 1167 阅读 · 0 评论 -
章节九:二叉树的“观光指南”:四大遍历 - (树的遍历 / Tree Traversal)
这篇技术博客详细介绍了二叉树的四种核心遍历方式: 前序遍历(根-左-右)适用于复制树结构和生成波兰表达式 中序遍历(左-根-右)是二叉搜索树获取有序数据的关键 后序遍历(左-右-根)常用于释放内存和计算逆波兰表达式 层序遍历(按层访问)使用队列实现广度优先搜索,适合寻找最短路径 文章通过图解和代码示例(Java/Python双语言)展示了每种遍历的实现方式,特别强调了递归在深度优先遍历中的应用,以及队列在层序遍历中的重要作用。作者还用家族族谱的比喻帮助读者理解不同遍历顺序的差异。原创 2025-06-15 16:00:35 · 721 阅读 · 0 评论 -
章节八:缓存“新陈代谢”:LRU的巧妙实现 - (最近最少使用 / LRU Cache)
本文介绍了LRU缓存淘汰算法的核心思想和高效实现。LRU策略通过优先淘汰最近最少使用的数据来优化缓存性能,其关键在于哈希表与双向链表的结合——哈希表实现O(1)快速查找,双向链表维护访问顺序。新访问数据移至链表头部,淘汰数据从尾部删除。文章详细解析了get/put操作流程,并通过Java代码示例展示了虚拟头尾节点的实现技巧。该设计完美满足了缓存系统对快速查询、插入、删除和顺序维护的核心需求。原创 2025-06-14 23:06:11 · 693 阅读 · 0 评论 -
章节七:动态“取景框”:滑动窗口解难题 - (滑动窗口 / Sliding Window)
本文介绍了滑动窗口算法这一高效解决子数组/子串问题的技巧。通过动态调整窗口大小(双指针控制),算法能在O(N)时间内完成搜索,优于暴力解法的O(N²)。文章提供了一个通用模板,并详细解析了LeetCode 209题(最小长度子数组)的解题思路:维护窗口内元素和,根据与target的比较来扩展或收缩窗口,同时更新最小长度。最后用Java代码展示了具体实现,通过示例验证了算法的正确性。滑动窗口的关键在于确定窗口维护的数据、扩展/收缩条件及结果更新时机。原创 2025-06-14 09:29:14 · 789 阅读 · 0 评论 -
章节六:数组双雄:左右指针的华尔兹 - (双指针 / Two Pointers)
该算法能将部分O(N²)问题优化至O(N),显著提升效率。典型应用包括两数之和II和删除排序数组重复项,通过指针的默契配合,实现优雅解题。原创 2025-06-13 12:30:00 · 816 阅读 · 0 评论 -
章节五:小偷的“最优决策”:背包与DP - (动态规划 / Dynamic Programming)
本文通过一个小偷背包偷宝物的故事,生动讲解了动态规划的核心思想和经典0/1背包问题的解法。文章首先形象地阐述了动态规划的本质是"聪明地穷举",通过存储子问题答案避免重复计算,并详细介绍了状态定义、转移方程和初始化三个关键步骤。最后用Java代码展示了如何实现背包问题的动态规划解法,帮助读者理解如何通过填表法得出最优解。全文以通俗易懂的方式将复杂算法问题转化为生活场景,适合算法初学者入门动态规划概念。原创 2025-06-13 10:30:00 · 1424 阅读 · 0 评论 -
章节四:“不撞南墙不回头”的DFS探秘 - (深度优先搜索 / DFS)
本文介绍了深度优先搜索(DFS)算法的核心思想和实现。DFS是一种"不撞南墙不回头"的探索方式,会沿着一条路径尽可能深入,直到尽头才回溯。原创 2025-06-12 22:26:50 · 618 阅读 · 0 评论 -
章节三:图上涟漪:BFS层层推进解迷宫 - (广度优先搜索 / BFS)
本文介绍了广度优先搜索(BFS)算法的核心概念与应用。通过迷宫探险的生动比喻,阐述了BFS如何利用队列实现层级扩散搜索,确保找到无权图中的最短路径。文章详细解析了BFS的工作原理、时间复杂度(O(V+E))和空间复杂度(O(V)),并通过流程图直观展示搜索过程。最后提供了Java和Python的代码实现示例,展示如何使用邻接表完成BFS遍历。该算法适用于社交网络分析、路径规划等多种场景,是图论中最基础且重要的遍历方法之一。原创 2025-06-10 22:04:02 · 665 阅读 · 0 评论 -
章节二:有序数组的“导航犬”:二分查找 - (二分查找 / Binary Search)
本文介绍了二分查找算法(Binary Search),这是一种在有序数组中高效搜索特定元素的算法。其核心思想是通过不断将搜索范围对半分割来快速定位目标,时间复杂度为O(log n)。文章通过字典查找的类比生动说明算法原理,并详细图解了搜索路径。性能分析指出二分查找在大型数据集上的显著优势,同时比较了迭代与递归实现的空间复杂度差异。最后提供了Java和Python的迭代实现代码示例,展示了算法的实际应用。该算法适用于有序数据,能极大提升搜索效率。原创 2025-06-09 23:53:14 · 766 阅读 · 0 评论 -
章节一:排序界的“闪电侠”为何快?- (快速排序 / Quick Sort)
俗话说得好,天下武功,唯快不破。在算法江湖里,排序算法的地位举足轻重,而提到“快”,有一个名字几乎是所有开发者绕不开的——那就是快速排序 (Quick Sort)!这家伙就像排序界的“闪电侠”,凭借其卓越的平均性能,在各种面试和实际项目中频频亮相。原创 2025-06-09 23:33:04 · 983 阅读 · 0 评论
分享