• 斐波那契的线性排序


    刚看到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)的核心思想。

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    实现报表数据外置计算
    实现报表数据的可控缓存
    实现报表数据分库存储
    实现报表数据预先计算
    实现报表与算法的统一管理
    如何实现报表直接打印需求
    交叉填报表的制作
    格间计算性能提升方案
    填报脚本之轻松搞定复杂表的数据入库
    treeview_dropdown_control
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12034166.html
Copyright © 2020-2023  润新知