← 返回知识库

基础知识:算法

一、什么是算法

算法是一组明确、有限、可执行的步骤:给定输入,经过一系列规则,得到期望输出。写程序并不总是在实现复杂算法,但排序、搜索、推荐、路径规划和调度都离不开它。

一个好的算法至少要回答三件事:结果是否正确、运行是否足够快、在边界条件下是否仍然可靠。

二、常见的解题方式

方法核心想法常见用途
枚举尝试所有或大部分可能性规模较小、验证思路
分治把问题拆成更小的同类问题,再合并结果归并排序、二分查找
贪心每一步选择当前看起来最优的方案区间选择、部分调度问题
动态规划保存子问题结果,避免重复计算路径、背包、序列问题
回溯逐步构造方案,不满足条件就撤回组合、排列、棋盘问题
图搜索沿节点和边探索关系最短路径、依赖分析、社交网络

没有一种方法永远最好。关键是识别问题是否有可拆分的子问题、局部最优是否能推出整体最优,以及状态是否会被重复计算。

三、用复杂度评估方案

算法需要在正确之外,考虑输入规模。比如在有序数组中找一个数:顺序查找是 O(n),二分查找是 O(log n)。当数据量足够大时,差异会非常明显。

除了时间复杂度,也要观察空间复杂度:为了更快而额外保存的数据是否值得。实际工程常常是在时间、内存、实现难度和可维护性之间取平衡。

四、形成算法思维的练习方式

  1. 先用最直接的方法写出能工作的版本;
  2. 写下输入、输出和边界条件,例如空数组、重复值和极端规模;
  3. 估算时间与空间成本;
  4. 再寻找能减少重复计算、缩小搜索范围或改进数据结构的地方。

先保证正确,再讨论优化。能清楚解释每一步为什么成立,比记住某个题目的答案更重要。