算法分析与设计期末复习

第一章  算法概述

1.算法:解决问题的一种方法或过程;由若干条指令组成的有穷指令。

2.算法的性质:

  1. 输入:有零个或多个输入
  2. 输出:有至少一个输出
  3. 确定性:每条指令是清晰的、无歧义的
  4. 有限性:每条指令的执行次数和时间都是有限的

3.算法与程序的区别

  • 程序是算法用某种程序设计语言的具体实现
  • 程序可以不满足算法的有限性

4.算法复杂性分析

  1. 算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性
  2. 三种时间复杂性:最坏情况、最好情况、平均情况
  3. 可操作性最好且最有实际价值的是最坏情况下的时间复杂性

5.f(N)<=Cg(N), f(N)为上界,反之下界;

6.P类问题:所有可以在多项式时间内求解的判定问题

  NP问题:所有非确定性多项式时间可解的判定问题;

7.主定理

 

 

第二章  递归与分支策略

1.递归概念:直接或间接调用自身的算法

2.递归函数:用函数自身给出定义的函数

3.递归要素:边界条件、递归方程

4.递归的应用

  • 汉诺塔问题

void Hanuo(int n,int a,int b,int c)

{

    if(n==1) return;

    Hanuo(n-1,a,c,b);

    move(a,b)

    Hanuo(n-1,c,b,a);

}

  • 全排列问题

void Perm(Type list[],int k,int m)

{   //产生list[k,m]的所有排列

    if(k == m)

    {

       for(int i = 0;I <= m;i++) cout<<list[i];

       cout<<endl;

}

else

{

    for(int i = j; i<=m;i++)

    {  

       Swap(list[k],list[i]);

       Perm(list,k+1;m);

       Swap(list[k],list[i])

}

}

   

}

5.分治法的基本思想(简答题):将一个规模较大的问题分成若干个规模相同的较小的子问题,这些子问题互相独立且与原问题相同,一般递归地解决这些子问题,可以将各个子问题的解合并得到原问题的解。

6.分治法的使用条件:

  • 问题的规模缩小到一定程度可以容易地解决
  • 问题可以分解为若干个规模较小的相同问题
  • 利用原问题分解出的子问题的解可以合并为原问题的解
  • 各个子问题是相互独立的

7.分治法的时间复杂度

8.分治法的应用

  • 二分搜索
  1. 时间复杂度 O(logn)
  2. 参考算法
  • 快速排序:(步骤:分
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值