首页 > 编程语言 > 详细

斐波那契的线性排序

时间:2019-12-13 13:16:16      阅读:93      评论:0      收藏:0      [点我收藏+]

刚看到fibonacci用线性能快一个量级。

public class FibonacciLineSort {
    public static int fib(int n, int first, int next) {
        if (n < 2) {
            return n;
        }
        if (n == 2) {
            return first + next;
        } else {
            return fib(n - 1, next, first + next);
        }
    }

    public static void main(String[] args) {
        System.out.println(fib(8, 0, 1));
    }
}

对比原先的那种二分递归,上述算法的效率之所以如此低下,是因为其中有大量重复进行的递归调用??只需画出该算法 的递归跟踪,即可验证这一结论。我们之所以会想到通过二分递归来解决这一问题,是因为被其外 表蒙骗了??Fib(k)是由 Fib(k-1)和 Fib(k)决定的。然而实际上,Fibonacci 数的本质却是线性递归, 因此二分递归并不适用于这一问题。 

1 long Fib(int n){
2     return (2 > n) ? (long) n : Fib(n -1) + Fib(n - 2);
3 }

比较 Fibonacci 数的这两种算法可以看出,为了确保二分递归算法的效率,必须保证分解出来 的每对子问题之间是相互独立的,即它们各自的计算没有重复和冗余;即使不能彻底做到这样,也 应尽可能减少不必要的重复计算。
减少重复计算的一种直接而常用技巧,就是把子问题的计算结果记录下来,此后若再次遇到相 同的子问题,就可以根据记录直接获得结果,而不必重新计算??实际上,这也就是动态规划 (Dynamic programming)的核心思想。

斐波那契的线性排序

原文:https://www.cnblogs.com/CherryTab/p/12034166.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!