1. 算法学习的第一块敲门砖
翻开《算法笔记》的第一章,就像推开计算机科学殿堂的第一扇门。作为算法入门的第一课,这一章往往承载着构建思维框架的重任。我至今记得第一次接触算法概念时的困惑与兴奋——那些看似简单的排序和查找背后,隐藏着改变程序效率的魔法。
算法本质上是一系列解决问题的清晰指令。就像烹饪食谱详细说明了从准备食材到装盘的每个步骤,算法也明确规定了计算机执行任务的顺序和方法。但不同于普通菜谱的是,算法的每个步骤都需要精确到让机器能够无歧义地执行,这就是为什么我们需要特别关注算法的描述方式。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 算法基础概念全解析
2.1 什么是算法?
算法不只是教科书上的抽象概念。在实际编程中,我们每天都在使用和创造算法——从简单的数组遍历到复杂的机器学习模型。一个合格的算法必须具备五个基本特性:
-
输入:算法必须有零个或多个输入。比如二分查找需要输入有序数组和目标值,而生成随机数的算法可能不需要任何输入。
-
输出:算法必须产生至少一个输出结果。没有输出的算法就像没有终点的跑步机,毫无意义。
-
明确性:每个步骤必须有确切的定义。比如"将变量增大一些"这样的描述就不合格,应该说"将变量i增加1"。
-
有限性:算法必须在有限步骤后终止。无限循环的"算法"在实际中无法使用。
-
有效性:每个步骤必须能够被执行。要求计算机"预测明天的彩票号码"就不是有效步骤。
2.2 算法效率的衡量标准
评估算法优劣时,我们主要关注两个维度:
时间复杂度:表示算法运行时间随输入规模增长的变化趋势。常见的有:
- O(1):常数时间,如数组按索引访问
- O(log n):对数时间,如二分查找
- O(n):线性时间,如遍历数组
- O(n²):平方时间,如简单排序算法
空间复杂度:表示算法需要的额外存储空间随输入规模的变化。有时我们会用空间换时间,比如哈希表就是典型的例子。
实际工程中,我们通常更关注时间复杂度,因为现代计算机的内存通常比CPU时间更充裕。但在嵌入式系统等资源受限环境,空间复杂度同样重要。
3. 算法描述方法详解
3.1 自然语言描述
初学者最容易理解的方式就是用自然语言描述算法步骤。比如描述冒泡排序:
"重复遍历数组,比较相
