|
|
|
|
移动端

2.4.1 一个简单的例子

《数据结构与算法分析:Java语言描述(原书第3版)》第2章算法分析,本章对如何分析程序的复杂性给出一些提示。遗憾的是, 它并不是完善的分析指南。简单的程序通常给出简单的分析, 但是情况也并不总是如此。本节为大家介绍一个简单的例子。

作者:冯舜玺/陈越 译来源:机械工业出版社|2016-04-13 11:30

人工智能+区块链的发展趋势及应用调研报告


2.4.1 一个简单的例子

这里是计算∑Ni=1i3的一个简单的程序片段:

对这个程序段的分析是简单的。所有的声明均不计时间。第1行和第4行各占一个时间单元。第3行每执行一次占用4个时间单元(两次乘法, 一次加法和一次赋值), 而执行N次共占用4N个时间单元。第2行在初始化i、 测试i≤N和对i的自增运算隐含着开销。所有这些的总开销是初始化1个单元时间, 所有的测试为N+1个单元时间, 而所有的自增运算为N个单元时间, 共2N+2个时间单元。我们忽略调用方法和返回值的开销, 得到总量是6N+4个时间单元。因此, 我们说该方法是O(N)。

如果每次分析一个程序都要演示所有这些工作, 那么这项任务很快就会变成不可行的负担。幸运的是, 由于我们有了大O的结果, 因此就存在许多可以采取的捷径并且不影响最后的结果。例如, 第3行(每次执行时)显然是O(1)语句, 因此精确计算它究竟是2、 3还是4个时间单元是愚蠢的; 这无关紧要。第1行与for循环相比显然是不重要的, 所以在这里花费时间也是不明智的。这使我们得到若干一般法则。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

网络工程师考试考前冲刺预测卷及考点解析

本书依据最新版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点进行了提炼,并...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊