其实在前面函数和递归一节中,我们使用递归算法来求斐波那契数列。就已经使用到了算法这一知识。今天我们来具体了解一下什么叫算法。
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
这一段是不是看起来很难理解,其实算法就是一种使用程序实现的,解决某个具体问题的方法。因为计算机的内存是有限的,所以我们说一个好的算法占用的计算机资源越少越好。当然时间上也是用时越少越好。今天我们来学习Python实现的一些基本算法。
一、穷举算法
穷举算法又称列举法,其基本思想是逐一列举问题所涉及的所有情况。理论上,穷举法可以解决可计算领域中的各种问题。尤其是在计算机速度非常高的今天,穷举的应用领域非常广阔。在实际应用中,通常要解决的问题规模不大,用穷举设计的算法其运算速度是可以接受的。此时,设计一个更高效的算法代价不值得。
鸡兔同笼是一个非常著名的数学问题,我们来看一下如何使用穷举算法解决这个问题。
鸡兔同笼问题最早记载于1500年前的《孙子兵法》,这是一个非常有名的问题。鸡兔同笼的原文如下:今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几只?
这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头,从下面数共有94只脚。问笼中鸡和兔的数量各是多少?
接下来我们在来看一下使用穷举算法解决百钱百鸡问题。
已知:公鸡5元一只,母鸡3元一只,小鸡一元3只。现用100元钱买了100只鸡。
问:公鸡母鸡小鸡各几只?
二、排序算法
今天我先学习选择排序算法,其他的排序算法,冒泡排序、插入排序、桶排序等,大家可以自行查找资料了解。
选择排序,每次选择当前序列的最小值,将其与当前序列的第一个元素交换位置,每迭代一次,当前序列长度减一。迭代结束,即可得到有序序列。
首选我们要找到列表中的最小值。
我们可以通过逐个比较列表中的数来找到列表中的最小值。每次比较将小的那个数赋值min_num。
我们可以将排序的过程打印出来,我们可以看到,每次都是要找到列表中的最小值,然后将最小值放到列表的最前面,这样就实现了从小到大的排序,那如果想要实现从大到小,则只需要每次找到最大值就可以了。这里为了print每次排序的过程,所以没有选择使用函数,下面的代码则是使用函数后的效果。