Java编程二项分布的递归和非递归实现代码实例

Java编程二项分布的递归和非递归实现攻略

什么是二项分布?

二项分布是离散分布中的一种,描述了在n次独立重复进行相同的随机实验中,恰好出现k次成功的概率。在很多领域中得到广泛的应用,例如统计学、质量控制、信号处理等等。

二项分布是由n和p两个参数所决定,其中n表示实验的次数,p表示每次实验成功的概率。用数学公式表示为:

$$ P(X = k) = \binom{n}{k} p^k (1-p)^{n-k} $$

其中,$ \binom{n}{k} $ 表示在n次实验中,取出k个成功的组合数。

递归实现二项分布

二项分布的递归实现方法需要用到数学中的杨辉三角,即二项式系数的组合数数组,可以通过递归函数的方式计算。

代码实现如下:

public static double binomial(int n, int k, double p) {
    if (n == 0 && k == 0) return 1.0;
    if (n < 0 || k < 0) return 0.0;
    return (1 - p) * binomial(n-1, k, p) + p * binomial(n-1, k-1, p);
}

其中,n、k、p分别为二项分布的三个参数,函数的返回值为概率值。

非递归实现二项分布

递归实现方法虽然简单易懂,但递归过程中会导致重复计算,影响程序效率,因此还可以采用非递归实现方法。

使用非递归方法,可以利用之前求解的结果,节省计算时间,提高效率。具体实现如下:

public static double binomial(int n, int k, double p) {
    double[][] dp = new double[n + 1][k + 1];
    dp[0][0] = 1.0;
    for (int i = 1; i <= n; i++) {
        dp[i][0] = (1 - p) * dp[i-1][0];
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= k; j++) {
            dp[i][j] = (1 - p) * dp[i-1][j] + p * dp[i-1][j-1];
        }
    }
    return dp[n][k];
}

函数的返回值与递归实现方法一样,都是概率值。

示例说明

示例一

在一次考试中,一个学生有75%的概率回答正确,如果这次考试共有10道题目,求该学生能够回答出6道题目的概率。

double p = 0.75;
int n = 10;
int k = 6;
System.out.println("递归实现概率值:" + binomial(n, k, p));
System.out.println("非递归实现概率值:" + binomial(n, k, p));

输出:

递归实现概率值:0.2128400803803018
非递归实现概率值:0.21284008038030179

示例二

在一批物料中,有10%的物料存在缺陷,要求从该批物料中取出20个,求取出5个有缺陷的物料的概率。

double p = 0.1;
int n = 20;
int k = 5;
System.out.println("递归实现概率值:" + binomial(n, k, p));
System.out.println("非递归实现概率值:" + binomial(n, k, p));

输出:

递归实现概率值:0.026424561178150988
非递归实现概率值:0.026424561178150997

以上两个示例都使用了递归和非递归两种实现方式,并且结果完全一致。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java编程二项分布的递归和非递归实现代码实例 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • C++高精度算法的使用场景详解

    C++高精度算法的使用场景详解 什么是高精度算法 高精度算法是指一种可以处理大数的算法。它是在计算机科学领域中的一种重要算法,可以解决一些需要精度极高的问题,如加密等。在 C++ 中,我们可以使用字符串来表示大数,然后通过基本的字符串操作实现高精度运算。 使用场景 高精度算法适用于处理数据量较大的问题,如以下场景: 1. 大数运算 在普通算法中,如果数据太大…

    C 2023年5月22日
    00
  • 将Emacs打造成强大的Python代码编辑工具

    当你选择使用 Emacs 作为 Python 的编辑器时,你会拥有一个非常强大的工具,Emacs 配合一些插件和定制的设置,可以满足你对 Python 编辑器的所有需求。 下面是将 Emacs 打造成强大的 Python 代码编辑工具的攻略: 安装 Python 模式 首先,你需要安装一个称为“Python 模式”的软件包。该软件包提供了一些有用的功能,如代…

    C 2023年5月23日
    00
  • OPPO R1C手机怎么样?OPPO R1C全面评测

    OPPO R1C手机评测 硬件 外观设计 OPPO R1C外观采用玻璃和金属材质相结合的设计,相当抢眼,整体风格十分简洁大方。其中,反光玻璃面板非常亮丽,呈现出不同于其它手机的视觉冲击力。另外,机身尺寸合适,拿在手里使用非常舒适。 内部配置 OPPO R1C内部配备了骁龙615处理器+2GB内存+16GB机身存储,能够满足日常使用需求,运行流畅,游戏也可以较…

    C 2023年5月23日
    00
  • C语言实现简单推箱子游戏

    C语言实现简单推箱子游戏攻略 游戏概述 推箱子游戏是一款非常经典的智力益智游戏,玩家需要控制箱子的移动,将箱子全部移动到指定位置即可获胜。在本文中,我们将使用C语言来实现一个简单的推箱子游戏。 游戏规则 游戏地图上有若干个箱子和若干个目标点。 箱子只能水平或垂直移动,不能斜着移动。 箱子不能移动到墙上,也不能推到其他的箱子或目标点上。 箱子被推到目标点上后,…

    C 2023年5月22日
    00
  • C++使用递归方法求n阶勒让德多项式完整实例

    C++使用递归方法求n阶勒让德多项式 什么是勒让德多项式 勒让德多项式是一种数学函数,定义在实数上,常用于解决物理学中的问题。它们表示为:$$ P_n(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n} [(x^2 – 1)^n] $$ 其中,n是多项式的阶数。 递归实现n阶勒让德多项式 通过递归实现n阶勒让德多项式,是一种简便的方…

    C 2023年5月22日
    00
  • 冰汽时代出现0xc000007b错误怎么办 寒霜朋克0xc000007b错误解决方法

    冰汽时代是一款冒险类的游戏,而0xc000007b错误是常见的Windows错误之一,通常会出现在Windows 7、Windows 8、Windows 8.1和Windows 10系统上。如果你在运行冰汽时代或寒霜朋克等游戏时遇到了0xc000007b错误,可以尝试以下解决方法: 1. 安装或重新安装Microsoft Visual C++ Redistr…

    C 2023年5月23日
    00
  • solaris迅速查找手册

    Solaris迅速查找手册使用攻略 简介 Solaris(索拉里斯)是Sun公司开发的一款Unix操作系统。本攻略主要介绍如何使用solaris快速查找手册。 步骤 步骤一:使用man命令查找手册 man命令是Solaris系统中用来查看手册页面的命令,其用法如下: man [ section ] name 其中,section表示手册所属的区段,name表…

    C 2023年5月22日
    00
  • C语言字符串快速压缩算法代码

    C语言字符串快速压缩算法代码 什么是字符串快速压缩算法 字符串压缩是一种将文本数据编码为较短二进制串的技术,其可以对一定范围内的部分文本数据进行无损压缩,使得压缩后的数据占用更小的存储空间,也方便网络传输和存储。 字符串快速压缩算法是一种快速编码和高效解码的无损算法。该算法的主要思想是通过统计原始数据中出现的字符及其出现的频率,选用最出现频率的字符在新的编码…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部