您的位置:首页 > 其它

算法导论第一,第二部分总结

2017-01-23 19:51 197 查看
最近正在看一部大著《算法导论》,这本书无论从严密还是从思维上面都达到了一个难以企及的高度。里面的算法分析与设计基本上都在理论性上,如果想实用的话自己还需要看点其它的东西。接下来,就自己学了的前两章做一个总结。

第一章:算法在计算中的作用:算法可以理解为把输入转化为输出的计算步骤的序列。算法的重要性不言而喻,不仅给你找工作,从事某些行业带来便利,而且这代表这一种思维方式,去解决问题的做法。学习本书的目的不仅仅是了解这些算法,更重要的是学会自己去设计算法,分析自己设计的算法。分析算法主要是分析算法的正确性,及算法的效率,本书中的算法分析主要分析时间复杂度。

第二章:算法基础,在上一章对算法有了一个大概的了解之后,这一章开始讲述一些简单的算法。首先是插入排序,先上伪码:

for i=2 to A.length
key=A[i]
j=i-1
while(A[j]>key and j>0)
A[j]=A[j-1]
j=j-1
A[i+1]=key


这个插入排序的代码比较简单,不需要多解释,然后利用循环不变式证明了插入排序的正确性,循环不变式类似于数学归纳法,找到初始条件,即循环迭代开始之前是否满足条件,之后用数学归法的思想去证明能够逐步递推,最后判断结束的时候能否满足条件即可。接下来是算法分析,需要一定的数学基础,插入排序的时间复杂度为O(n^2)。

接下来是归并排序,其思想是:先将数据看成每组数据只有一个元素,然后将两组合并起来,相当于把两组有序的数据排序。需要开辟一组临时空间,然后逐个比较,赋值到新开辟的空间即可。

MERGE_SORT(A,p,r)
if  p<r
q=(p+r)/2                 //将数组分解成两个数组
MERGE_SORT(A,p,q)         //递归归并
MERGE_SORT(A,q,r)
MERGE(A,p,q,r)


归并排序是一种分治的思想,就是将大问题逐步分解成小问题,解决小问题之后,将这些合并起来,便将整个问题解决了。归并算法的时间复杂度可以用二叉树的思想分析,得到时间复杂度为O(nlgn)。

在思考题中,出现了一道冒泡排序的题,这是一个比较常见的排序算法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论 算法