您的位置:首页 > 其它

算法导论学习笔记——第1部分

2015-05-07 22:43 190 查看
第1章

所谓算法,就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组值作为输出。亦即,算法是一系列的计算过程,将输入值转换成输出值。

一些常见的算法运行时间量级比较:对数级<多项式级<指数级<阶乘级

lgn < n1/2< n < nlgn < n2 < n3< 2n < n!


第2章

插入排序

1 INSERTION-SORT(A)
2 for j←2 to length(A)
3     do key←A[j]
4         ▷Insert A[j] into the sorted sequence A[1..j-1]
5         i←j-1
6         while i>0 and A[i]>key
7             do A[i+1]←A[i]
8                 i←i-1
9         A[i+1]←key


循环不变式

必须证明它的三个性质

初始化:循环不变式在循环的第一轮迭代开始之前,应该是正确的。

保持:如果在循环的某轮迭代之前它是正确的,那么在下一轮迭代之前,它也应该保持正确。

终止:当循环结束时,不变式给了我们一个有用的性质,有助于表明算法是正确的。

数学归纳法

证明某一性质是成立的,首先要证明基本情况是成立的,然后证明一个归纳步骤是成立的。

在数学归纳法中,归纳步骤是无穷的;在循环不变式中,当循环结束,归纳即终止。

伪代码的约定

1、使用缩进表示程序中的程序块结构。

2、循环计数器变量在循环退出时依然保持值。也就是循环计数器的值是第一个超出循环边界的值。

3、符号 ▷ 表示后面是注释。

4、多重赋值 i←j←e,是将e的值赋值给i和j

5、数组元素通过数组名[下标]的形式来访问,下标从1开始,而不是0

6、表示数组或对象的变量,被看做是一个指向数组或变量的指针,一个指针不指向任何一个对象,则它是NIL

7、参数采用按值传递的方式,一个被调用的过程接收到的参数是变量的一个副本;当对象被传递时,实际传递的是一个指针

8、布尔运算符and和or,具有“短路”能力,当表达式的值一旦可以被确定,就不再计算下去

等差数列

首项为1,公差为1,等差数列前n项和:n(n+1)/2

递归结构

为了解决一个给定的问题,算法要一次或多次的调用自身来解决子问题。

分治法

分解:将原问题分解成一系列的子问题

解决:递归解决各个子问题,需要子问题足够小,则直接解决

合并:将子问题的解合并成原问题的解

合并排序

1 MERGE(A,p,q,r)
2 n1←q-p+1
3 n2←r-q
4 create arrays L[1..n1+1] and R[1..n2+1]
5 for i←1 to n1
6     do L[i]←A[p+i-1]
7 for j←1 to n2
8     do R[j]←A[q+j]
9 L[n1+1]←∞
10 R[n2+1]←∞
11 i←1
12 j←1
13 for k←p to r
14     do if L[i]<=R[j]
15         then A[k]←L[i]
16             i←i+1
17         else A[k]←R[j]
18             j←j+1
19
20 MERGE-SORT(A,p,r)
21 if p<r
22     then q←floor((p+r)/2)
23         MERGE-SORT(A,p,q)
24         MERGE-SORT(A,q+1,r)
25         MERGE(A,p,q,r)


第3章

一些数学问题

1、对任意两个函数f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))和f(n)=Ω(g(n))

2、实数集有一个属性不能应用在渐进符号上

三分性:对于实数a和b,下列三种情况有且仅有一种情况成立,a>b,a=b,a<b

并不是所有的函数都可以进行渐进比较

3、近似的函数增长

对数<线性<多项式<指数<阶乘

第4章

解递归式

1、代换法substitution

1)猜测解的形式

2)用数学归纳法找出使解真正有效的常数

2、递归树

使用递归树时,可以忽略一些“小误差”,将递归产生的结果作为猜测,用代换法进行验证。

也可以严格计算每一层递归树的代价,加总成递归式的结果。

对于有两个子问题,子问题规模为1/2的递归树(二叉树),树的高度是lgn,叶级节点的数量是n

3、主方法master method

递归式形式T(n)=aT(n/b)+f(n),其中a>=1,保证有一个及以上子问题;b>1,保证问题的规模逐步变小,否则问题会趋向于无穷;f(n)渐进趋正。

从极限的角度比较aT(n/b)和f(n),更高阶的一项决定递归式的解

1)aT(n/b)比f(n)高阶,T(n)=Θ(nlogba)

2)aT(n/b)与f(n)同阶,T(n)=Θ(nlogbalgn)

3)aT(n/b)比f(n)低阶,T(n)=Θ(f(n))

并非所有的递归式都能应用这三种情况。

第5章

原地排列给定的数列,实现随机排列

1 RANDOMIZE-IN-PLACE(A)
2 n←length[A]
3 for i←1 to n
4     do swap A[i]↔A[RANDOM(i,n)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: