算法分析的基本模型

2章 算法分析原理

2.1 函数增长类型(2013.7.23

函数增长类型分为以下类型:

2.1.1 1(常数关系) :

大部分程序的大部分指令执行一次,或者至多执行多次。如果程序的所有指令都具有该性质,我们就说程序的运行时间为常数。

具有该时间复杂度的算法有:

l 基于键值索引的搜索算法,

l Hash法的理想情况。

2.1.2 logN(对数关系) :

当程序的运行时间具有对数属性时,则程序运行时间增长比N增长稍慢一些。将一个大问题转换成一系列小问题,每一步都把问题规模分解为恒定的小部分,这样的程序通常具有这种运行时间。

具有该时间复杂度的算法有:

l 对有序序列进行二分查找,

l 在堆中插入或者删除一个元素,

l BST(二叉搜索树)、随机BST或者分裂BST中搜索、插入或者删除某一个元素,

l 2-3-4树、红黑树、B树中搜索、插入、删除一个元素,

l 位搜索树、trie或者p-trie中搜索、插入、删除一个元素。

2.1.3 N(线性关系) :

当程序的运行时间为线性时,一般情况是,对每个输入元素只进行少量的处理。N等于106,运行时间也是这么多。只要N加倍, 运行时间也加倍。这种情况对于必须处理N个输入(或生成N个输出)的算法最理想。

具有该时间复杂度的算法有:

l 一般循环遍历算法(顺序搜索算法),

l 基于键值索引的计数排序算法(这个好像是我见到的唯一一种O(n)级别的排序算法,但是由于该算法对输入数据的大小敏感并且空间负责度也为O(n),所以不能普遍使用)。

2.1.4 NlogN (线性对数关系linearithmic):

当问题分解成较小的子问题,每个子问题独立解决,然后再综合这些解决方案时,解决此类问题的算法就具有NlogN运行时间。当N等于106时,NlogN约为2 * 107,当N加倍时,运行时间比其倍数更大( 但不会大很多)

具有该时间复杂度的算法有:

l 希尔排序(Nlog2N):因为当N很大时Nlog2N更接近于NlogN而不是N2。

l 快速排序(一般情况),

l 归并排序,

l 堆排序,

l 基数排序、MSD基数排序、LSD基数排序,

l 二叉排序树。

l 求第K个最大或者最小值(时间复杂度为O(KlogN))

l 创建搜索树,例如:BST、分裂BST、随即BST2-3-4树、红黑树、位搜索树,trie树,p-trie树,B树。

2.1.5 N2(平方关系) :

当算法的运行时间为二次性时,该算法只对相对较小的问题实用。处理所有数据项对的算法具有二次性运行时间(大概位于双重嵌套的循环中)。当N等于1000时,运行时间为106。只要N加倍,运行时间久增加4倍。

具有该时间复杂度的算法有:

l 插入排序,

l 选择排序,

l 冒泡排序。

2.1.6 N3(立方关系) :

N2相似,处理三次方数据项的算法具有立方性运行时间(大概处于三层嵌套的循环中),这种算法只对于小问题实用。当N100,运行时间为106。N加倍,运行时间增加到8倍。

具有该时间复杂度的算法有:

2.1.7 2N(指数关系):

具有指数关系运行时间的少数算法适合于实际应用,尽管这种算法是在使用蛮力手法解决问题时自然得出来的。当N等于20时,运行时间为106。N加倍,运行时间增加到原值平方!

具有该时间复杂度的算法有:

2.2 基本递推式

2.2.1 当程序循环遍历输入删除某个项,就会用到如下公式

CN = CN – 1 + N ,其中 N >= 2, C1 = 1

求解:CN约等于N2/2

适合于该递推式的算法有:

2.2.2 用一个步骤来对分输入的递归程序中用到递推式

CN = CN/2 + 1, 其中 N >=2C1 = 1

求解:CN约等于lgN

适合于该递推式的算法有:

l BST插入、BST查找、BST删除、BST合并,

2.2.3 对分输入,但也许必须检查输入中的每一项的递归程序要用如下递推式

CN = CN/2 + N ,其中 N >= 2C1 = 0

求解:CN约等于2N

l 适合于该递推式的算法有:

2.2.4 在等分输入之前,之中或之后,必须线性遍历输入的递归程序要用到如下递推公式

CN = 2CN/2 + N, 其中N>= 2,C1 = 0

求解:CN约等于NlgN

l 适合于该递推式的算法有:

2.2.5 等分输入,然后执行其他定量工作的递归程序适用如下递推公式

CN = 2CN/2 + 1,其中N >= 2,C1 = 0

求解:CN约等于2N

l 适合于该递推式的算法有:

参考文献:《C算法第一卷》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值