算法学习之路(一)算法的概念

一,算法是什么?

算法就是计算或解决问题的步骤,例如:菜谱,  是一种对按步骤解决问题的实现方式的描述,不同的是算法是严密的,而且算法的步骤都是用数据方式来描述,十分的明确

二,如何选择算法

最重要的是算法的运行时间,即从输入数据到输出结果这个过程所花费的时间。当然计算器内存的大小也是考量之一。

三,初识算法

1,实现一个有50个不同数字组成的数列中从小到大排列  

1),全排列算法

全排列算法的一个重要思路,就是将数列中的元素的排列,与某种顺序建立一一映射的关系,按照这种顺序,将集合的所有排列全部输出。这种顺序需要保证,既可以输出全部的排列,又不能重复输出某种排列,或者循环输出一部分排列。

假设数列为 :321          

          321, 312,231,  213,  132, 123     6种方式

如果是:12345             那么将有    120

               1。。。10       那么将有    3628800

               。

               。

               1。。。50      大概有10^40种

2),实现思路

  ① 生成一个由n个数字构成的数列(不和前面生成的数列重复);

  ②如果①中生成的数列按从小到大的顺序排列就将其输出,否则回到步骤①。.

3),引入阶乘概念

运气好一次就行,假设运气不好,最后一次实现,n个数字就有n!中不同的排列方式(n! = 1*2*3...(n-2)(n-1)n)。

n! = 1*2*3...(n-2)(n-1)n

阶乘:自然数n的阶乘写作n!。
一个正整数的阶乘是所有小于及等于该数的正整数的积,并且有0的阶乘为1。

2,那么我们换一种方式,选择排序算法

1)选择排序算法

选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

 

2)实现思路

①从数列种寻找最小值

②将最小值和数列的最左边的数字进行交换,排序结束。回到①

 

首先,为了在第一轮找到最小的数字,需要从左往右确认数列数字,只要查询n个数字即可。在接下;来的第2轮中,需要从n-个数字中寻找最小值,所以这个步骤进行到第n轮的时候,需要查询的次数如下。

n+(n-1)+(n-2)+...3+2+1=n(n+1)/2  <= n^2

n=50的时候 ,最多2500。假设一个数需要一秒,那显然选择排序比全排列算法效率要高的多。

 

四,计算运行时间的方法

 

单单考虑不同算法在运行时间上的区别,还要了解根据数据量的大小,算法的运行时间具体会产生多大的变化。

如果是一个两位数的数列呢?那显然全排列算法的2步要比选择排序算法的3步更省时间。

 

1,如何求得运行时间

如果我们使用“步数”来描述运行时间,“1步”就是计算的基本单位。通过计算“计算从开始到结束总共执行了多少步”来算出运行时间。

①从数列种寻找最小值

②将最小值和数列的最左边的数字进行交换,排序结束。回到①

如果数列种有n个数字,那么①种“寻找最小值”的不走只需要确认n个数字即可,将“确认1个数字的大小”作为操作的基本单位,需要的时间设为T1  ,那么步骤①的运行时间就是  : n * T1

接下来,把“对连个数字进行交换”也作为操作的基本单位,需要的时间设为T2。那么①和②总共重复n次,每经过“1轮”,需要查找的数字就减少1个,因此总的运行时间如下

(n*T1 + T2)+(  (n-1)*T1 +T2)+...(2*T1 +T2)+(T1+T2)
=  1/2 T!n(n+1) + T2n
= 1/2 T1*n^2 + (1/2T1 +T2)n

我们已经得到了运行时间,但这个结果并不直观,还可以简化。T1,T2都是基本单位,与输入无关。会根据输入变化而变化的只有数列的长度n,所以接下来考虑n变大的情况。n越大,n^2也就越大,其他部分相对变小.所以说对结果影响最大的是n^2
1/2 T1*n^2 + (1/2T1 +T2)n = O(n^2)
o 这个符号表示忽略重要项目以外的内容,O(n^2)的含义就是:算法的运行时间最长也就是n^2的常数倍。
比如,当我们知道选择排序的时间复杂度为O(n^2),快速排序的时间复杂度为O(nlogn)时,很快就能判断出快速排序的运算更为告诉,二者的运行时间根基输入的n产生的变化程度也一目了然。

快速排序的时间复杂度

 

 

 

 

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章