二分搜索,合并排序及快速排序

第一章:算法引论

通俗的讲,算法是解决问题的方法或过程;严格的讲,算法是满足以下性质的指令序列:
1.输入:有另个或者多个外部量作为算法的输入。
2.输出:算法产生至少一个量作为输出。
3.确定性:组成算法的每条指令是清晰的,无歧义的。
4.有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。
程序不同与算法,程序是算法用某种程序设计语言的具体实现。
对于一个明确的数学问题,设计它的算法,总是选用该问题的一个数据模型。接着弄清楚该问题是数据模型在已知条件下的初始状态和要求的结果状态,以及这连个状态之间的隐含关系。然后探索从数据模型的已知状态到达要求的结果状态所需的运算步骤。这些运算步骤就是求解该问题的算法。
抽象数据类型是算法设计的重要概念。描述算法可以有很多种,如自然语言方式,表格方式,以及程序设计语言方式等方式。
算法复杂性的高低天现在勋兴该算法所需要的计算机资源的多少上,所需要的资源越多,则算法的复杂性越高;反之,该算法的复杂性越低。
由于计算机的资源最重要的是时间和空间资源,因此算法的复杂性有时间复杂性和空间复杂性之分。
更确切的说,算法的复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性。这个量应该集中反映算法的效率而从运行该算法的实际计算机中抽象出来。这个量应该只依赖于算法要解的问题的规模,算法的输入和算法本身函数。

第二章:递归与分治策略

任何可以用计算机求解的问题所需要的计算时间都与其规模有关,问题的规模越小,解题所需要的计算时间往往也越少。故此,分治法的设计思想是,将一个难以直接解决的的问题,分割成一些规模比较小的相同问题,以便各个击破,分而治之。
分治法的基本思想是讲一个规模为n的问题分解成k个规模较小的子问题,这些子问题互相独立且与原问题相同。递归的解这些子问题,然后将各个子问题的解合并得到原问题的解。它的一般算法设计模式如下:

divide-and-conquer(P)
{
    if(|P|<=n0) adhoc(P);
    divide P into smaller subinstances P1,P2,P3...,Pk;
    for(i=1;i<=k;i++)
    yi=divide-and-conquer(Pi);
    return merge(y1,...,yk);
}

|P|表示问题的规模,n0表示一个阈值,adhoc(P)表示解决小规模问题的基本算法。该代码段的含义即为:当给定问题的规模大于确定的阈值时,通过分治法将其划分为多个相同的子问题,且子问题的规模小于确定的阈值,通过给定的子问题解决算法将所有子问题一一求解,最后合并多个子问题的解,即为最初给定问题的解。

二分搜索技术

给定已排好序的n各元素a[0:n-1],现在要在这n各元素中找出一特定元素x。
二分搜索的基恩思想是将n个元素分成大致相同的两半,取a[n/2]与x进行比较。如果x=a[n/2],则找到x,算法中止。如果x

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值