算法分析----基础知识点

1.算法分析主要分析什么?
时间复杂度和空间复杂度??

2.算法分析的目的是什么?
分析算法占用计算机资源的情况,对算法做出比较和评价,设计出更好的算法。

3.算法的时间复杂度与问题的什么因素相关?
算法的时间复杂性与问题的规模相关,是问题大小n的函数。

4.算法的渐进时间复杂度的含义?
当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。时间复杂度T(n)的**数量级(阶)**称为渐进时间复杂性。

5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?
最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度,平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和。

6、渐近时间复杂度分析的一般步骤
a. 决定用哪个(或哪些)参数作为算法问题规模的度量
b. 找出算法中的基本语句
通常是最内层循环的循环体。
c. 检查基本语句的执行次数是否只依赖于问题规模
如果基本语句的执行次数还依赖于其他一些特性,则需要分别研究最好情况、最坏情况和平均情况的效率。
d. 建立基本语句执行次数的求和表达式
计算基本语句执行的次数,建立一个代表算法运行时间的求和表达式。
e. 用渐进符号表示这个求和表达式
7、三个渐近符号的含义
大O符号(<=)用来描述增长率的上界,当输入规模为n时,算法消耗时间的最大值。(当问题规模足够大的时候 )
大Ω(>=)符号用来描述增长率的下界,当输入规模为n时,算法消耗时间的最小值。
(渐进下界 渐进上界都不是唯一的)
大θ(=)符号——渐近紧界记号,用来描述增长率的准确界。(准确!!)
通常只求最坏情况运行时间,因为给出了任何输入的运行时间的上界。对某些算法,最坏情况经常出现“平均情况”往往与最坏情况一样差
8、什么是最优算法
如果我们能够知道一个问题的计算复杂性下界,也就是求解这个问题的最少工作量,就可以较准确地评价该问题的各种算法的效率,进而确定已有的算法还有多少改进的余地。(排序算法的时间复杂性下界是nlgn)
9、递归方程及其求解方法:
迭代法:从初始递归方程开始 反复用右边等式代入 最终用数学函数(汉诺塔问题)
代入法:猜测一个解 然后用数学归纳法证明
递归树法:猜测估计解的一个方法 用树的形式给出一个递归方程执行的成本模型
利用递归方程逐步展开的步骤构造对应的递归树(直到递归树中不再含有函数权值的点) 将每层代价相加

主方法:形如T(n)=aT(N/b)+f(n)
建立递归方程 求解该递归方程 用渐进符号表示函数的阶
主方法:
算法分析----基础知识点_第1张图片
证明:算法分析----基础知识点_第2张图片
算法分析----基础知识点_第3张图片
习题:
1.给定以下两个算法:
算法A:
for(int i = 0; i < N; i++)
for(int j = 0; j< N; j++)
{
S;
}
算法B:
for(int i = 0; i < N; i++)
for(int j = i; j< N; j++)
{
S;
}
其中N是一个比较大的自然数,S是有若干基本语句组成的程序段。
1)在相同的计算机上,算法A比算法B运行速度慢?
2)算法A的时间复杂度比算法B要高?
请判断以上两个命题是否正确?并说明理由。
1)正确 A的语句多
2)错误 还与问题规模有关

2、判断
给定问题的不同算法,时间复杂度低算法所需要的执行时间肯定比时间复杂度高算法少。
错误

3.设n是描述问题规模的非负整数,下面程序片段的时间复杂度是(C )
x=2;
while(x x=2*x;
A.O(log2n) B.O(n) C.O(nlog2n) D.O(n^2)

4、填空
以下程序段的时间复杂度为( n )。
s = 0;
i = 0;
do {
i = i+1;
s = s+i ;
}while(i<=n)

5、填空
给定以下算法:
long FN( long n )
{
if (n<=1)
return 1;
return n + FN(n-1);
}
该算法的时间复杂度为O( n)

6.求整数n(n≥0)阶乘的算法如下,请写出递归方程并给出求解过程。
int fact(int n)
{ if(n<=1) return1;
return n*fact(n-1);
}
T(n)=T(n-1)+C=…T(1)+(n-1)C = O(n)

  1. 采用递归树求解以下递归方程:
    T(n)=1 当n=1时
    T(n)=4T(n/2)+n 当n>1时
    算法分析----基础知识点_第4张图片

你可能感兴趣的:(算法设计与分析)