zoukankan      html  css  js  c++  java
  • 算法(第4版)-1.1 提高题(部分)

    1.1.27

    public class Ex_1_1_27b
    {
        public static double binomial(int n, int k, double p, Counter c)
        {
            double[][] v = new double[n+1][k+1];
            for (int i = 0; i <= n; i++)
                for (int j = 0; j <= k; j++)
                    v[i][j] = -1;
            
            return binomial(v, n, k, p, c);
        }
        
        public static double binomial(double[][] v, int n, int k, double p, Counter c)
        {
            if (n == 0 && k == 0) return 1.0;
            if (n < 0 || k < 0) return 0.0;
            
            if (v[n][k] == -1)
            {
                c.increment();
                v[n][k] = (1.0 - p) * binomial(v, n-1, k, p, c) + p * binomial(v, n-1, k-1, p, c);
            }
            
            return v[n][k];
        }
        
        public static void main(String[] args)
        {
            int n = Integer.parseInt(args[0]),
                k = Integer.parseInt(args[1]);
            double p = Double.parseDouble(args[2]);
            
            Counter c = new Counter("calls");
            
            double b = binomial(n, k, p, c);
            
            StdOut.println(b);
            StdOut.println(c);
            // java Ex_1_1_27b   10    5 0.5:        50 calls
            // java Ex_1_1_27b   20   10 0.5:       175 calls
            // java Ex_1_1_27b   30   15 0.5:       375 calls
            // java Ex_1_1_27b  100   50 0.5:     3,875 calls
            // java Ex_1_1_27b 1000  500 0.5:   376,250 calls
            // java Ex_1_1_27b 4000 2000 0.5: 6,005,000 calls
        }
    }

    总结:

    递归函数中,当返回值为两个或两个以上、可能多次返回的函数调用时,更好的实现如下:

    1.创建递归函数入口a,在a中声明数组,并为数组中的每一位赋值,该值不能等于递归函数的基本情况;

    2.创建递归函数b,通过a将数组作为参数传进b。先判断是否基本情况,如果是则直接返回值;再判断对应数组中的值是否已被修改,如果没被修改,则相应的值等于递归函数b的调用,然后返回相应的值。

  • 相关阅读:
    jieba的使用
    如何用python查看自己的电脑有几个核
    NLTK实现文本切分
    nltk的安装和简单使用
    初识NLP 自然语言处理
    mysql 查询存在A表中而不存在B表中的数据
    mysql 导出数据报错: row must be in range 0-65535
    python3 re模块正则匹配字符串中的时间信息
    Python语法速查: 14. 测试与调优
    Python语法速查: 20. 线程与并发
  • 原文地址:https://www.cnblogs.com/iguure/p/5978678.html
Copyright © 2011-2022 走看看