
算法与最优解对比图
|------------------------------------|----------------|---------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
| 问题类型 / 应用场景 | 大纲中的算法 | 王者级算法 (最优解) | 核心对比 (为何更优) |
| 对一组数据进行排序 | 冒泡排序、选择排序、插入排序 | 快速排序 / 归并排序 (Java中 Arrays.sort()) | 决定性差异在于时间复杂度 。当前算法为 O(n²) ,效率极低。最优算法基于分治 思想,复杂度为 O(n log n),速度呈指数级提升,是通用排序领域的绝对王者。 |
| 在无序数据中查找、插入、删除 | 枚举 (暴力搜索) | 哈希表 (Java中 HashMap, HashSet) | 查找速度的天壤之别 。当前算法为 O(n) ,需逐个对比。最优算法通过哈希函数直接定位,平均复杂度为 O(1),几乎是瞬时完成。在不关心顺序的极速查找场景下,哈希表是无敌的。 |
| 在 有序 数据中查找 | 二分查找 | 二分查找 (静态数据) 或 <br> 平衡二叉搜索树 (动态数据) | 动态与静态的权衡 。二分查找 O(log n) 的效率已极高,但要求数据静态。若数据需频繁增删,平衡树在保持 O(log n) 查找效率的同时,增删操作也是高效的 O(log n)。 |
| 求解 无权重 图的最短路径 | 广度优先搜索 (BFS) | 广度优先搜索 (BFS) | 术业有专攻。在此特定问题上,BFS本身就是最优解。其逐层扩展的特性天然保证了找到的路径一定是最短的。BFS就是该领域的王者。 |
| 求解 有权重 图的最短路径 | (BFS/DFS 无法解决) | Dijkstra 算法 | 能否处理"代价"是关键 。BFS/DFS只关心连通性。Dijkstra算法能处理每条边的不同权重(代价),总是选择离起点总代价最小的路径扩展,确保找到全局最优解。只要无负权边,它就是单源最短路径的王者。 |
| 求解具有最优子结构的问题 (例如:背包问题、最长递增子序列) | 贪心算法 | 动态规划 (DP) | 局部最优 vs. 全局最优。贪心算法只顾眼前,选择快但不保证正确。动态规划通过记录和利用所有子问题的解,系统性地推导出全局最优解,严谨且保证正确。在贪心失效的领域,DP是王者。 |
| 进行超大整数的运算 (超过 long 范围) | 手动用数组模拟计算 | Java 的 BigInteger 类 | 专业工具 vs. 手造轮子。手动实现代码量大且极易出错。Java内置的 BigInteger 类经过高度优化,使用方便,代码简洁且绝对准确。在Java环境中,它是处理大数运算无可争议的王者。 |
| 线性数据的存储与操作 | 数组, 链表 | 数组 (ArrayList) vs. 链表 (LinkedList) | 读写场景的对决 。数组的王者领域 :频繁的随机访问和遍历,get(i) 操作为 O(1) 。链表的王者领域 :频繁的插入和删除,操作为 O(1) ,远胜于数组的 O(n) 效率。 |