第一篇 简单的算法
1.1通用最值算法
所谓最值,就是最大或最小的值。生活中,找全班考试成绩最低分和最高分时,我们可以用肉眼快速地判断,但假设是整个年级、整个学校,乃至整个国家学生的考试成绩,那么肉眼看就会变成一个愚蠢的方法,正确的方法是:让计算机解决。
想要交给计算机解决,就需要有一定的编程基础。本书我们不介绍编程语言的语法,一切以算法为主,遵循浅显易懂、添加注释的原则。
本书中我们的语言是python,因为python的门槛较低一些。
1.1.1 寻找最值的通用最值
给出序列nums = [3, 1, 2, 4, 5]
,求出序列的最小值和最大值。
我们首先通过直观的观察,1是最小值,5是最大值。但我们要想的是怎么确定是1和5。我们一个一个的看,首先看到3,所以现在的最小值是3,而3后面是1,1比3小,于是1变成最小值。最大值仍然如此。
这样我们就有了思路。
-
找到序列第一个元素,将它设为默认的最小值
-
遍历整个序列
-
如果新得到的元素比当前最小值小,那么将当前最小值更新
最大值同理。
我们将代码写成函数的形式(注意,我们在本书中会将所有算法以函数的形式给出,目的是让读者养成一个良好的习惯,以及记住所有的算法名称)。
函数签名如下:
def find_min
,def find_max
具体代码:
#最小值
def find_min(nums):
_min = nums[0]#找到第一个元素
for i in nums:
if i < _min:
_min = i#更新
return _min
#最大值
def find_max(nums):
_max = nums[0]
for i in nums:
if i > _max:
_max = i
return _max
整体代码结构类似,就是判断的地方要注意符号。python中也为我们提供了min
和max
函数。但是python都给我们内置函数,我们为什么要自己写呢?这里有两个要点:第一,通用最值是最基本的算法之一,只有掌握了基本的算法,你的基本功才能扎实,不然你会跟不上;第二,很多算法都有通用最值在其中,不过通常查找的不是值,而是索引,而我们max之后再找索引会提升时间复杂度;第三,你会被同学嘲笑。
把找到索引的通用最值留作作业,将会在1.1.2中解答。