- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算能力及其局限
* ①串行时间(简称时间)。它是计算过程中的总运算量,即把计算分成一些原始的步骤,完成这些步骤所需要的总时间。 ②空间。它是为了保存中间结果所需要的存储器的大小。例如在计算时用一块黑板来打草稿,每一单位面积假定可以写一个符号,不用了还可以擦掉。在计算时所需黑板面积就是空间。 ③并行时间。它是并行计算所需要的时间,亦即如果多人或多处理机协同计算,解决一个问题所需要的时间。 * 当然,与可计算性一样,复杂性总是对于一个特定的问题类来讨论的。讨论计算的复杂性问题还要考虑其问题的规模,即一个问题的大小。例如,对矩阵乘法这样一个问题类,相对地说,100阶矩阵相乘是个大问题,而二阶矩阵相乘就是个小问题。可以把矩阵的阶 n作为衡量问题大小的尺度。又如在图论问题中,可以把图的顶点数n作为衡量问题大小的尺度。 可以很容易的得出,当n很大时,这两个算法的效率差别是相当大的。这种复杂度的表示方法称为多项式时间表示,即运行时间是输入量的多项式函数。 * 函数变化图示? * * 即使是可计算的问题,它的算法设计也直接决定了它的可计算性,比如一个算法是可计算的,但它所消耗的时间空间是无法忍受的。 由于针对一个问题可能会有不同的算法去解决,不同的算法思路不同,有的执行速度很慢,效率低;有的执行速度很快,效率很高。这样也就出现了算法的“好”与“坏”之分,如何衡量一个算法的好坏呢? 选用的算法首先应该是“正确”的。此外,主要考虑如下三点: ① 执行算法所耗费的时间; ② 执行算法所耗费的存储空间,其中主要考虑辅助存储空间; ③ 算法应易于理解,易于编码,易于调试等等。 一个占存储空间小、运行时间短、其它性能也好的算法是很难做到的。原因是上述要求有时相互抵触:要节约算法的执行时间往往要以牺牲更多的空间为代价;而为了节省空间可能要耗费更多的计算时间。 归纳起来,评价算法的标准主要集中在以下几方面:。。。 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 一个算法的评价主要从时间复杂度和空间复杂度来考虑。 * * 这表明,当n充分大时,T(n)和n3之比是一个不等于零的常数。即T(n)和n3是同阶的,或者说T(n)和n3的数量级相同。 * 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O(log2n),线性阶O(n); 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3); k次方阶O(nk),指数阶O(2n)。 随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 * 按数量级递增排列,常见的时间复杂度有: 常数阶O(1),对数阶O(log2n),线性阶O(n); 线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3); k次方阶O(nk),指数阶O(2n)。 随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 * 如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。 * 一般情况下,对循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判别、控制转移等成分。因此,当有若干个循环语句时, * 存储算法本身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。 算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表由调用函数传递而来的,它不随算法的不同而改变。 算法在运行过程中临时占用的存储空间随算法的不同而异,有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是“就地”进行的,是节省存储的算法 * 分析一个算法所占用的存储空间要从各方面综合考虑。如对于递归算法来说,一般都比较简短,算法本身所占用的存储空间较少,但运行时需要一个附加堆栈,从而占用较多的临时工作单元;若写成非递归算法,一般可能比较长,算法本身占用的存储空间较多,但运行时将可能需要较少的存储单元。 * * 因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。算法的时间复杂度和空间复杂度合称为算法的复杂度。 * 数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。 算法设计的实质就是对实际问题要处理的数据选择一种恰当的数据结构,并在选定的数据结构上设计一个好的算法。 * 提问:下面的图中哪个是线性结构? * 文字太多。 * * * * * * * * * 队列在日常生活中应用很多。例如在解决主机与外部设备之间速度不匹配问题
原创力文档


文档评论(0)