“学习笔记”之《算法导论》----第一部分----基础知识----第一章到第五章

本人大四上即将结束,于2018年12月18日购《算法导论》这本书,慢慢看,第一阶段先主要理解各个章节说的算法都是什么意思,书上的课后习题先不做,用得上什么算法我再详细学习。这是官方课后答案的链接。

 放在开头:没有好的算法,坏的算法之说,重点是针对不同的情况,针对不同的数据,针对不同的需求,去选择算法,改良算法。我的数学功底不强,太难的公式我看不懂,太高深的思想我理解不了,我主要以应用为主,不以解释数学公式为主。

第一章

什么是算法?算法有啥用?

第二章

以排序算法为例子,介绍了贯穿本书的一些程序写法,表达规范。提到了分治算法,在第四章会有详细的介绍。 

第三章 

介绍了一些用来表示函数运行时间的符号。弄清楚O(n),Θ(n),Ω(n),这三个是什么含义就行了。

第四章

 讲了分治算法的核心思想,如下:

分解:将大问题划分为一些子问题,子问题的形式与原问题一样,但是规模更小。比如我想研究100个人身高排序,那么我先研究2个人身高怎么排序。

解决:递归的求解子问题,如果子问题的规模足够小,则停止递归,直接求解。这是分治思想最关键的地方,这个地方写程序的时候会遇到的问题是,函数的形参怎么设置,函数的返回值怎么设置。

合并:根据递归函数返回的数据,进行整合,从而求解整个问题。

这个章节的Strassen方法吸引着我,它的作用是求解矩阵相乘,比一般的行×列求和时间快。但是也有一些缺点,有兴趣研究的自行百度。

第五章

本章介绍了概率分析和随机算法。介绍了一些概率问题的书写规范,表达方式。

(1)雇佣问题:每天要面试一个应聘者,这个应聘者比现在工作岗位上的人能力强,就用他,但是会产生昂贵的费用......我们希望计算雇佣一个新的办公助理的期望次数。通过用随机算法,得到答案是Inn次。

介绍了两个产生随机数组的方法:随机优先级法,随机交换法(better,产生的内存小,速度快一些),原则上是产生一个均匀随即排列。

(2)生日悖论(概率分析,下面这三个例子都是概率分析问题):一个屋子里的人数必须要达到多少人才能使其中两个人生日达到50%。

(3)球与箱子: 有若干个球,b个箱子,要投多少次球,才能使每个箱子里至少有一个球?

(4)特征序列:假设抛投一枚标准的硬币n次,最长连续正面的序列的长度期望(平均)是多少?(没看懂推导过程,难)

(5)在线雇佣:对于上面的雇佣问题, 如何尽量实现最小化花费与雇到最好的人(没看懂推导过程,难)

(6)查找一个无序数组:这是思考题里面的一个问题,如何快速的在一个n元数组中,找到某一个数。题目中说的第三种算法我比较赞同,但是我没有进行数学验证。

                                                                                                     2019/1/4 

你可能感兴趣的:(算法导论)