a*算法的时间复杂度_算法时间复杂度分析

本文探讨了算法时间复杂度的重要性,并通过斐波那契数列的递归与非递归实现,展示了时间复杂度的巨大差异。介绍了如何计算时间复杂度,包括事后统计法和估算代码指令执行次数,以及大O表示法,同时列举了常见时间复杂度的大小关系。最后,通过递归斐波那契数列分析了指数级时间复杂度的计算成本,强调了算法优化对于效率的影响。
摘要由CSDN通过智能技术生成

算法时间复杂度分析

在看一个算法是否优秀时,我们一般都要考虑一个算法的时间复杂度和空间复杂度。现在随着空间越来越大,时间复杂度成了一个算法的重要指标,那么如何估计一个算法的时间复杂度呢?

时间复杂度直观体现

首先看一个时间复杂度不同的两个算法,解决同一个问题,会有多大的区别。

下面两个算法都是用来计算斐波那契数列的,两个算法会有多大的差异。

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

  • 第一种:使用递归方式
/**     * 使用递归方式计算斐波拉契数列     * @param  index 计算的项数     */    public static long fibonacciUseRecursion(int index){        if(index <= 1){            return index;        }        return fibonacciUseRecursion(index-1) + fibonacciUseRecursion(index-2);    }
  • 第二种:使用非递归方式
/**     * 不使用递归方式计算斐波拉契数列     * @param index 计算的项数     */    public static long fibonacciNoUseRecursion(int index){        if (index <= 1){            return index;        }        long first = 0;        long second = 1;        for (int i = 0; i < index - 1;i++){            second = first + second;            first = second - first;        }        return second;    }

对上面两种算法进行简单的运行时间统计,我们使用下面的代码进行简单的测试

public static void main(String[] args) {        // 获取当前时间        long begin = System.currentTimeMillis();        // 计算第50项斐波拉契数列的值        System.out.println(fibonacciUseRecursion(50));        // 计算时间差,算法执行所花的时间        System.out.println("time:" + (System.currentTimeMillis() - begin) / 1000 +"s");                begin = System.currentTimeMillis();        System.out.println(fibonacciNoUseRecursion(50));        System.out.println("time:" + (System.currentTimeMillis() - begin) / 1000 + "s");    }

测试结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值