化繁为简——算法之魅力

算法是什么?
算法其实就是对一个问题或一类问题的解决过程的描述。大家对高斯不陌生吧?以首项加末项乘以项数除以2用来计算“1+2+3+4+5+···+(n-1)+n”的结果。我们把它叫做高斯算法,因为可以通过公式来解决复杂的问题,大大缩短了解题时间。当然算法的魅力还不止如此,我们接着往下看:

这两段代码都可以称之为算法,因为分别可以解决两个数相加和从1加到n的问题。算法并不一定要非常复杂,小到一行代码,多到上万行代码,只要能解决特定问题,就是算法。

如何评估算法优劣

使用不同算法,解决同一个问题,效率可能相差非常大

现有两个求斐波那契数 (fibonacci number) 的算法

(斐波那契数列:1 1 2 3 5 8 ……)

这里


public static int fib1(int n) {
   

       if
(n <= 1) return n;

       return
fib1(n - 1) + fib1(n - 2);

}

public static int fib2(int n) {
   

       if
(n <= 1) return n;

              

       int
first = 0;

       int
second = 1;

       for
(int i = 0; i < n - 1; i++) {
   

              int
sum = first + second;

              first
= second;

              second
= sum;

       }

       return
second;

}

这两个算法哪个更优呢?

如果单从执行效率上进行评估,可能会想到这么一种方案

比较不同算法对同一组输入的执行处理时间

这种方案也叫做:事后统计法

我们的做法是:


public static void main(String[] args) {
   

       int
n = 45;//求第45个斐波那契数

              

       TimeTool.check("fib1",
new Task() {
   

              public
void execute() {
   

                     System.out.println(fib1(n));

              }

       });//5.815秒

       

       TimeTool.check("fib2",
new Task() {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值