当前位置:文档之家› 东北大学数据结构期末复习

东北大学数据结构期末复习

定义1.1 如果存在两个正常数c和N0,对于所有的N≥N0, 有f(N) ≤Cg(N),则记作:f(N)= O(g(N))。
当说一个算法具有O(g(n))的计算时间时,指的
就是如果此算法用n值不变的同一类数据在某台
机器上运行时,所用的时间总是小于g(n)的一个
常数倍。
g(N)
g(n)是计算时间f(n)的一个上界函数,f(n)的f(N数)
2.4合并排序
归并排序主程序伪代码
template<class Type>
void MergeSort(Type a[ ], int left, int right)
{// A[left:right]是一个全程数组,含有 right-left+1个待排 序的元素。
if ( left < right ) { //至少有2个元素
算法的五个重要特征
– 输入
有零个或多个由外部提供的量作为算法的输入
– 输出
算法产生至少一个量作为输出.
– 确定性
组成算法的每条指令是清晰的,无歧义的.
– 有限性
在执ቤተ መጻሕፍቲ ባይዱ了有穷步骤后运算终止
– 可行性
运算都是基本运算,原理上能在有限时间内完成。
渐进意义下的记号:O,Ω,θ,о
• f(N)和g(N)是定义在正整数上的正函数
int left= 0 ; int right=n-1 ; while( left<=right ){
int middle= (left+right)/2; if(x==a[middle]) return middle; if(x>a[middle]) left= middle+1 ; else right= middle – 1; } return –1; //未找到x }
1) 把它分成两个或多个更小的问题; 2) 分别解决每个小问题; 3) 把各小问题的解答组合起来,即可得到原
问题的解答。小问题通常与原问题相似, 可以递归地使用分而治之策略来解决。
例2-6 在[9,12,15,27,39]中分别查找27,12,14
0
1
9
12
2
3
15
27
4 mid = (left+right)/2
作业:
1. P34,2-2 中第二个和第 五个算法的正确性,错误 的说明原因或者给出反例
2. P35, 2-3
2-3:
二分搜索中当程序停止时,左右指针或者指 向同一个元素,此时该元素等于待查找元 素
或者left=right+1,此时right指向的为比待找 元素小的元素,left为比待找元素大的元素
指数时间算法 (exponential time algorithm):计算时间用 指数函数限界的算法 O(2n)<O(n!)<O(nn)
• 作业1-7
第2章
• 递归 • 分治法基本思想 • 二分搜索算法 • Strassen矩阵乘法 • 合并排序和快速排序
递归复杂度分析
汉诺塔移动次数
M(1)=1 M(n)=2M(n-1)+1
当n>1时,Tw(n)= Tw([n/2])+1, T(1) = 1 Tw(n) = Tw([n/2]) + 1
= Tw([n/4]) +1 +1 ……
=Tw(1)+1+...+1=1+k=1+logn
2.2二分搜索技术
二分搜索的时间复杂度
最坏情况下的成功检索计算时间Θ(logn) 最坏情况下的不成功检索计算时间Θ(logn) 最好情况下的成功检索计算时间Θ(1) 最好情况下的不成功检索计算时间Θ(logn) 每种不成功的检索时间都为Θ(logn)
39
=(0+4)/2=2
left
9
12
mid
15
27
9
left mid
9
12
right
12
mid left
15
27
15
27
left mid right
right
39
right
39
mid =(3+4)/2=3
查找27成功返 回3, left<right
39
查找12成功返 回1,left=right
9
12
15
27
39
right
left
查找14失败返 回-1,left>right
template<class T> int BinarySearch( T a[], const T& x, int n) {//在a[0]<=a[1]<=···<=a[n-1]中搜索x //如果找到,则返回所在位置,否则返回 –1
int mid = (left+right)/2; //求当前数组的分割点
= 2[2M(n-2)+1]+1 = 22M(n-2)+2+1 = 23M(n-3)+22+2+1 =…… =2iM(n-i)+2i-1+2i-2+……+2+1 =2iM(n-i)+2i - 1 令i= n -1 则M(n)= 2n-1 + 2n-1-1=2n-1
2.1 递归
分治法的基本思想
分而治之方法与软件设计的模块化方法非常 相似。为了解决一个大的问题,可以:
• o—— 如果对于任意给定的ε>0,都存在正整数N0,
使得当N ≥N0时有f(N)/g(N)<ε,则称函数
f(N)当N充分大时的阶比g(N)低,记为 f(N)=o(g(N)) • 例如:4NlogN+7=o(3N2+4NlogN+7)
1.2 算法分析初 步
多项式时间算法 (polynomial time algorithm):可用多项式 来对其计算时间限界的 算法 O(1)<O(logn)<O(n)<O( nlogn)<O(n2)<O(n3)
期末复习
题型
• 选择题(10分) • 填空题(10分) • 算法应用题(算法填空,简单问题回答)
(3-4个题,35-40分) • 算法设计(按照已知条件设计算法或为算
法补充完整)(3个题,45-50分)
第1章
• 算法的性质及其与程序的区别 • 算法复杂性分析
– 渐进意义下的四种记号 – 简单的程序段的复杂度分析
量级就是g(n)
N0
符号Ω的定义
• 定义1.2 如果存在两个正常数C和自然数N0, 使得当N ≥ N0时有f(N)≥Cg(N),则称函数f(N) 当N充分大时下有界;且g(N)是它的一个下界, 记为f(N)=Ω(g(N))。这时我们说f(N)的阶不低 于g(N)的阶。
θ ,o 的定义
• θ——
定义f(N)= θ(g(N))当且仅当f(N)=O(g(N))且 f(N)=Ω(g(N))。这时,我们说f(N)与g(N)同阶
相关主题