算法设计与分析考前

1.时间复杂度问题:

        事后分析法

        事前分析法:

                大O表示法:O(1),O(n),O(logn),O(n^2)一般分为常数级,线性级,对数级,平方级。

其中:O(logn)举例

 int number=1;
while(number<n){
number=number*2;
//时间复杂度为O(1)的算法
...
}

递归算法时间复杂度分析方法---迭代法

迭代法的步骤是:先将递归算法简化成对应的递归方程,然后反复迭代,将递归方程的右端变换成一个级数,最后进行级数求和,估计和的渐进和。

例子:

抽象的考虑以下递归方程,且假设n=2^k,则迭戴求解的过程如下:

T(n)=2T(n/2)+2

            =2(T(n/2^2)+2)+2

             .......

O(n)

2.递归设计要点:递归算法设计的关键在于找出递归关系和递归终止条件。

经典汉诺塔问题

                有三个基座A,B,C,开始的时候A基座上面放着从大到小n个盘子,先需要接住B盘,将其转移到C盘上面,且过程中需要保持盘子从大到小放置,每次只能移动一个盘子。

先看2阶(终止条件)的汉诺塔问题

A(1,2) B()  C()

A(2)  B(1 ) C()

A()B(1)C(2)

A() B() C(1,2)

再来考虑n阶(递归关系)的汉诺塔问题

A(n-1,n)  B()  C()

A(n)B(n-1) C()

A( ) B(n-1)  C(n)

A()  B()   C(n-1,n)

第一步:hanoi(n-1,a,b,c)  先将a盘n-1个盘子借助c盘移到b盘

第二步:把下面的一个盘子从A盘上面移到c盘;

第三步:hanoi(n-1,b,c,a) 将b盘的n-1盘借助a盘移到c盘

3.分治法

如折半查找,合并排序,快排,二叉树遍历

快排思想回顾:

如数组a[n],一般选择a[n/2]的值作为中值,将比其小的数放在左边的一个数组中,比其大的数放在右边的数组中,之后依次循环。

归并排序思想回顾:

将这些元素集合分为更多的集合,分别排序后,归并成一个集合。

棋盘覆盖问题

大整数的乘法(两个n位大整数相乘)

4.贪心法

最短路径问题,最小生成树问题等。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值