时间复杂性1:时间复杂度定义,如何计算

def1:时间复杂度(计算复杂性)

设M是一个处处停机的DTM(确定性图灵机),定义函数time_{m} :N\rightarrow N(N是非负整数集合)。

time_{m}(n)=M在长度为n的输入上的最大运行步数,把此函数叫做M的时间复杂度。

(时间复杂度:time_{m}(n)是一个自变量为输入长度n,因变量是最大运行步数的函数。)

注:这里考虑的是最大运行步数,如果考虑的是平均运行步数则对应着“平均时间复杂度”

概念:输入长度与输入规模

 以一个图G=来说,输入规模就是问题中的自然参数,这里指的是顶点数和边数。

而输入长度是指图灵机将输入对象编码成串的串的长度,所以输入长度会与编码有关。

1:将图以顶点表,边表形式编码(顶点本身一个集合,每条边用两个顶点表示)

n=|V|,m=|E|=O(n^{2})

I|=O(|V|log|V|+|E|2log|V|)  每一个顶点二进制编码要log|v|,每条边用两个点表示

            =O(nlogn+2mlogn)=O(n^{2}logn)

2:以邻接矩阵来表示,则输入长度:O(n^{2})

一般而言:输入长度与输入规模是多项式相关的。


下面给出实例具体分析算法的时间复杂性。

识别:

①:采用单带图灵机

算法1:

M_{1_{}}="对于输入串w:

         1):扫描一遍带,若在1的右边发现0则拒绝;(输入合法性

         2):若0和1都在带上则重复下一步;(这里通常是循环操作的条件

         3):扫描带子,删除一个1和一个0;

         4):若所有的1删除后还有0,或所有0删除后还有1,就拒绝;否则,带子上没有0和1,接受。"

 分析最大运行步数

第一次来回扫描输入合法性:2n

每次删除一个0和一个1,由于最多需要带子输入长度的一半n\2:n*n/2

最后检查带子是否剩0和1:n

采用大O记法:O(2n+n*n\2+n)=O(n^{2})

 算法2:

M_{2}="对于输入串w:

         1):扫描带,若在1右边发现0就拒绝;

         2):若带上还有0和1就重复下一步;

         3):扫描带,检查剩余的0和1的总数,若总数为奇数则拒绝;

         4):再次扫描带,删除最开头的0然后隔一个删一个0,同样的删除第一个1然后隔一个删除一个1;

         5):若带子上没有留下1和0,接受;否则拒绝。

        "

如图,经过操作4,每次使得0和1的个数减半,要是0和1的个数一样多,2m(m表示带子目前0的个数)一定为偶数,所有有了判断3.

分析最大步数:

第一次合理性检查:O(n)

每次隔一个删0或1,长度减半,最多:log_{2}n+1次,每次运行n,故:O(nlogn)

最后检查带子是否剩0和1:O(n)

总之:本算法的时间复杂度为:O(nlogn)

②多带图灵机

M_{3}是有两个带子的多带图灵机。

M_{3}=“对输入串w:

   1):扫描带,在1右边发现0就拒绝;

   2):扫描带1上的0把每个0复制到带2上,直到带一出现第一个1;

   3):扫描带1上的1直到输入结尾,每次从带1上读到一个1就在带2上删除1个0,如果读完带1的1之前,已经删完了带2上所有的0,拒绝。

   4):带2所有的0被删除则接收,否则拒绝。

这个方法很简单,把带1的0复制到呆上,然后带1每读一个1就删带2一个0,。

运行步数

输入合法性检查为O(n),把带一的0复制到带二上为O(n),同时比较两个带子的1与0的匹配O(n),最后扫描剩不剩0:O(n).  本算法时间复杂度:O(n)线性时间

结论:模型的选择会影响时间复杂度的计算 


时间复杂性类(一类能被O(t(n))判定的语言的集合)

如:               


  • 模型间的时间复杂度的关系
  • 多带TM与单带TM:平方
  • 非确定性NTM与确定性DTM:指数

TH1:设函数(由于输入至少为n,运行步数必须大于等于输入长度),则每个t(n)时间的多带TM都与某个时间的单带TM等价。

证明思路:前文提过了,将单带图灵机分段来模拟多带图灵机,开始时,把多带图灵机各个带子内容复制到单带图灵,耗时:O(n),接下来多带图灵机一次操作,单带图灵机需要两步:1:扫描带子确定当前虚拟读写头位置。2:更新内容与读写头移动。故而模拟一次操作,单带图灵机最多耗费O(t(n))(每个带头都要右移空出一格最费时间)。由于多带图灵机的运行步数是t(n),所以单带图灵机要模拟t(n)次,即:

Def:非确定图灵机(NTM)而且必须是个判定机的时间复杂度:

函数f:N\rightarrowN,f(n):任何长度为n的输入上,N的所有计算分支的最大步长。

说白了:从所有可能分支中,选一个最长的运行步数,作为处处停机的NTM的时间复杂度。

TH2:设函数(由于输入至少为n,运行步数必须大于等于输入长度),则每个t(n)时间的单带NTM都与某个时间的单带TM等价。

证明思路:每模拟一个分支需要O(t(n))时间,一共要模拟的分枝数相当于求树叶的个数,设结点最多b个子女,则t(n)长度的树最多:个叶子。故:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值