2025-11-20 06:19:45
首先说正确算法,像动态规划、贪心算法、分治法这些,都是设计得特别稳的。比如动态规划,它像搭积木一样,每一步都建在之前的基础上,专门解决最优子结构问题。贪心算法就简单,每一步都选当前最好的,像赶地铁选最近的车站。分治法是把大问题切成小块,先解决小问题再拼起来,像切蛋糕分三块烤。回溯法、DFS/BFS这些搜索算法也稳,像找迷宫出口先试一条路,走不通就回头换条。Dijkstra算法找最短路径,KMP算法查字符串特别快,快速排序、归并排序这些排序方法都算正确,B+树存数据像放书架,找东西又快又好。
为什么这些算法对呢?因为它们都有数学证明,比如动态规划的时间复杂度通常比暴力法降几个数量级。比如书中说动态规划处理斐波那契数列,暴力法要指数级时间,动态规划只要线性时间。贪心算法正确的前提是问题有贪心性质,像背包问题选最大价值物品就稳。分治法像归并排序,每次对半切分,总时间复杂度O(n log n)。回溯法用递归+剪枝,像八皇后问题,虽然时间复杂度高,但能保证找到解。DFS/BFS在图论里找连通分量,Dijkstra用优先队列每次挑最近节点,KMP用前缀函数跳步查字符串,这些都有理论保证。错误算法像NP完全问题没有明确解法,暴力枚举复杂度爆炸,朴素BFS可能重复走重复路,冒泡排序O(n²)效率低,链表反转容易漏节点。比如书中说冒泡排序在n=1000时,时间比慢100倍以上。所以正确算法要么有数学证明,要么在特定场景效率碾压,像B+树在数据库里每秒能处理百万级查询,而错误算法要么不解决问题,要么效率太低用不了。
本题链接: