计算机程序设计的空间时间转换优化.docVIP

计算机程序设计的空间时间转换优化.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机程序设计的空间时间转换优化.doc

计算机程序设计的空间时间转换优化   在计算机程序设计中,两个最重要的指标是时间复杂度和空间复杂度。时间复杂度是指程序运行时所需要的时间,简称时间。由于计算机CPU执行指令时是由CPU内部的计算器单挑指令依次执行(多核计算机除外),因此时间复杂度可以简单的由指令的执行次数来决定,简称时间;通常我们通过输入数据的规模来表示,例如程序输入的规模是n个数据,n的线性倍数的时间复杂度:执行1n次运算,或者执行2n运算可以统称为O(n),而(n-1)*n次运算, n*n次运算则可以统称为O(n2)。空间复杂度是指在程序执行时,所需要的额外的临时存储空间来存储临时的运算结果,空间复杂度的衡量可以通过类似时间复杂度衡量的规则,这里不再赘述。   【关键词】转换优化 计算机 程序设计   通常在设计程序时,要考虑时间和空间的平衡以追求合理的时间和空间。通过合理的数据存储以及操作,空间复杂度可以有效地降低时间复杂度。单纯的追求时间或者空间之一,则有可能造成无法接受的错误。例如如果时间复杂度过于高,则程序的时间响应速度会非常慢,当输入问题的数据量达到一定规模,程序可能会无限长的运行下去。同样,由于计算机的内存空间是有限的,当空间要求过大时,程序可能会用光所有的内存空间,这样程序会因为空间不足无法继续运行。一下我们以一个简单的实际问题来表述时间和空间的转化, 以及平衡的复杂度安排的重要性。   假设我们有如下问题:输入n个整数(n1),返回这n个数据是否有重复。   1 首先我们考虑最简单不用临时存储的情况,程序数据如下:   对输入的每一个数据依次执行:   查看每一个其他的数字,对当前数据进行比较:   如果相同,则返回程序结果有重复。   如果不同,则对下一个数字进行分析。   我们对如上的设计进行分析,在最快的情况,前两个数就有重复,那么一次比较就知道有重复。在最坏的情况下,?即n个数字没有重复,对每一个数字,我们都要进行n(实际上是n-1次,我们用n来近似)次比较。所以当不用临时存储总的运算量是n*n次比较。在实际问题中,由于我们不知道问题的情况,无法预测有没有重复或者在哪里重复,所以我们要一直用最坏的情况进行分析。在此问题中时间复杂度是n*n,没有用到辅助空间。   2 程序优化   此程序可以进行优化,对每个数据和其他数据比较时,不用和该数之前的数据比较,因为该次比较已经被执行过了。比如:对1,2,3,这个问题进行比较,首先我们比较1与2,1与3,然后我们开始对第二个数分析,这时不用继续比较2与1,因为1与2已经执行过,只需要比较2与3程序修改   所以修改程序如下:   对输入的每一个数据依次执行:   查看每一个在此数据之后的数字,对当前数据进行比较:   如果相同,则返回程序结果有重复。   如果不同,则对下一个数字进行分析。   我们对如上的设计进行分析,在最坏的情况下,即n个数字没有重复,对第一个数字,我们要进行n(实际上是n-1次,我们用n来近似)次比较,第二个数字n-1次比较,第三个数字n-2次比较……所以当不用临时存储总的运算量是n(n+1)/2次比较,没有用到辅助空间。   最后我们用一个带有临时存储空间的算法:我们把每一个数据存到临时空间里(注:此临时空间能提供非常快的存储和查看操作,忽略存储和查看的操作时间),查看当前数据是否已经在存储空间内,如果有,则返回是,如果没有,则继续下一个数据:   3 创建一个临时的空存储空间   对输入的每一个数据依次执行:   查看存储空间是否有这个数据   如果有,则返回程序结果有重复。   如果没有,则对下一个数字进行分析,并且将当前数据储存到存储空间。   我们对如上的设计进行分析,在最坏的情况下,即n个数字没有重复,对每一个数字,我们都要进行1次查看,所以当使用临时存储总的运算量是n,额外的辅助空间大小也为n。   到此,我们的程序设计完毕,为什么利用辅助存储降低时间复杂度重要呢?我们进行如下分析:   假设有计算机A,每微秒执行一次指令,那么此计算机每秒钟可以执行106次指令。假设程序的输入为10个数,那么三个程序所需要的时间依次为T1=10*10/106=0.0001秒,T2=(10*11/2)/106=0.000055秒,T3=10/106=0.00001。在输入规模不大时候,相差不大。如果输入为10000个数,三个程序所需要的时间为T1=104*104/106=100秒,T2=(10000*10001/2)/106=0.000055=50.005秒,而T3=10000/106=0.01秒。可以计算,当输入为一百万个数字时,第一个程序需要运行27小时,而第三个程序只需要一秒钟!   我们换另外一种分析方

文档评论(0)

you-you + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档