码迷,mamicode.com
首页 > 编程语言 > 详细

2.4算法分析-运行时间计算

时间:2020-07-18 22:23:04      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:判断   分析   ati   部分   循环   static   public   int   array   

一般法则

法则1——for循环

一个for循环的运行时间至多是该for循环内部语句的运行时间乘以迭代次数

法则2——嵌套的for循环

从里向外分析循环,一组嵌套循环内部语句的运行时间为该语句的运行时间乘以该组所有的for循环的大小的乘积。

法则3——顺序语句

将各语句的运行时间求和

法则4——if/else语句

不超过判断的运行时间加上,两部分中运行时间长者

 

下方代码表面是递归实际上是一个简单的循环,从而其运行时间为O(N)

1   public static long factorial(int n) {
2         if (n <= 1) {
3             return 1;
4         } else {
5             return n * factorial(n - 1);
6         }
7     }

递归正常使用时,将其转换成一个循环结构是很困难的。

 

 1     public long fib(int n) {
 2         if (n <= 1) {
 3             return 1;
 4         } else {
 5             return fib(n - 1) + fib(n - 2);
 6         }
 7     }
 8 
 9     public long arr(int n) {
10         long[] array = new long[n + 1];
11         if (n <= 1) {
12             return 1;
13         } else {
14             array[0] = 1;
15             array[1] = 1;
16             for (int i = 2; i <= n; i++) {
17                 array[i] = array[i - 1] + array[i - 2];
18             }
19             return array[n];
20         }
21     }

以上例子中同样是计算斐波那契数列第n项

使用数学归纳法易证得 fib(n) = Ω((3/2)n) (n>4) ,fib(n) = O((5/3)n)  , 而arr(n) = O(n),显然fib(n)需要花更多的时间

 

2.4算法分析-运行时间计算

标签:判断   分析   ati   部分   循环   static   public   int   array   

原文地址:https://www.cnblogs.com/TedXiong/p/13337379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!