Binomial Coefficient(二项式系数)

简介:

In mathematics, any of the positive integers that occurs as a coefficient in the binomial theorem is a binomial coefficient. Commonly, a binomial coefficient is indexed by a pair of integers n ≥ k ≥ 0 and is written {\displaystyle {\tbinom {n}{k}}.} {\displaystyle {\tbinom {n}{k}}.} It is the coefficient of the xk term in the polynomial expansion of the binomial power (1 + x)n, and it is given by the formula.

英文描述

英文描述请参考下面的图。

中文描述

根据给定的公式计算二项式的值。

在这里有一个说明需要注意的是,如果结果超过 1,000,000,000 你的程序应该返回 -1。

如果结果没有定义的话,那么你的程序应该也要返回 -1。

思路和点评

在这里的计算,公式比较简单,就是计算 N,K N-K 的阶乘,在阶乘中,你可以使用递归进行计算。

但是需要注意的是对这个数字的阶乘计算量,程序是很容易溢出的,如果从出题者的意图来看就是要考察大数值的计算和计算中的溢出。

如果你使用的是 Java 的话,你应该使用类 BigDecimal,进行计算。如果你可以使用 Apache Common Math 的话,你就直接使用 CombinatoricsUtils.factorialDouble 进行计算。在计算中允许的最大参数值为 170,超过这个值以后就超过程序能够计算的最大值了。

如果你希望直接计算二项式系数的话,你可以使用 CombinatoricsUtils.binomialCoefficientDouble(40, 20) 直接进行计算。

源代码

源代码和有关代码的更新请访问 GitHub:

https://github.com/cwiki-us/codebank-algorithm/blob/master/src/test/java/com/ossez/codebank/interview/tests/WayfairTest.java

测试类请参考:

https://github.com/cwiki-us/codebank-algorithm/blob/master/src/test/java/com/ossez/codebank/interview/tests/WayfairTest.java

代码思路请参考:


	/**
	 * https://www.cwiki.us/display/ITCLASSIFICATION/Binomial+Coefficient
	 * 
	 * Binomial Coefficient
	 */
	@Test
	public void testBinomialCoefficient() {
		int n = 40;
		int k = 20;

		BigDecimal bc = factorial(n).divide(factorial(k).multiply(factorial(n - k)));
		// a.compareTo(new BigDecimal(1000000000))
		logger.debug("{}", bc);
		logger.debug("Check for Compare To - [{}]", bc.compareTo(new BigDecimal(1000000000)));
		logger.debug("Value - [{}]", bc);

		logger.debug("Apache CombinatoricsUtils Factorial - [{}]", CombinatoricsUtils.factorialDouble(20));
		logger.debug("Apache CombinatoricsUtils Binomial Coefficient - [{}]", CombinatoricsUtils.binomialCoefficientDouble(40, 20));

	}

	/**
	 * for factorial
	 * 
	 * @param x
	 * @return
	 */
	private static BigDecimal factorial(int x) {
		if (x == 1 || x == 0) {
			return BigDecimal.valueOf(1);
		} else {
			return BigDecimal.valueOf(x).multiply(factorial(x - 1));
		}
	}


 

测试结果

上面程序的测试结果如下:

2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - 137846528820
2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Check for Compare To - [1]
2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Value - [137846528820]
2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Apache CombinatoricsUtils Factorial - [2.43290200817664E18]
2018/12/29 19:35:10 DEBUG [com.ossez.codebank.interview.tests.WayfairTest] - Apache CombinatoricsUtils Binomial Coefficient - [1.3784652882E11]

 

目录
相关文章
|
存储 Shell Linux
【Shell 命令集合 系统设置 】⭐ Linux 取消或删除已设置的环境变量 unset命令 使用指南
【Shell 命令集合 系统设置 】⭐ Linux 取消或删除已设置的环境变量 unset命令 使用指南
1513 0
|
机器学习/深度学习 人工智能 自然语言处理
机器学习、深度学习和强化学习的关系和区别是什么?
众所周知,人工智能领域知识庞大且复杂,各种专业名词层出不穷,常常让初学者看得摸不着头脑。比如“机器学习”、“深度学习”、“强化学习”就属于这类名词。那么,针对这三者各自具体有哪些内容?三者是否有相关性?不同核心及侧重点是什么?以及各自的应用领域有哪些?应用的前景如何?等问题,本文根据百度百科等相关资料里的内容进行整理,形成了以下详细的阐述。
4289 0
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
862 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
缓存 NoSQL 安全
【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?
【Azure Redis 缓存】Azure Redis 4.0 被扫描到漏洞,如何修补呢?
443 0
|
存储 数据可视化 计算机视觉
OpenCV(二十一):椒盐噪声和高斯噪声的产生
OpenCV(二十一):椒盐噪声和高斯噪声的产生
1028 0
|
弹性计算 负载均衡 Java
如何设计一个高可用的Java应用架构
如何设计一个高可用的Java应用架构
|
人工智能 搜索推荐 算法
人工智能,应该如何测试?(七)大模型客服系统测试
这篇文稿讨论了企业级对话机器人的知识引擎构建,强调了仅靠大模型如 GPT 是不够的,需要专业领域的知识库。知识引擎的构建涉及文档上传、解析、拆分和特征向量等步骤。文档解析是难点,因文档格式多样,需将内容自动提取。文档拆分按语义切片,以便针对性地回答用户问题。词向量用于表示词的关联性,帮助模型理解词义关系。知识引擎构建完成后,通过语义检索模型或问答模型检索答案。测试环节涵盖文档解析的准确性、问答模型的正确率及意图识别模型的性能。整个过程包含大量模型组合和手动工作,远非简单的自动化任务。
|
分布式计算 算法 大数据
大数据Spark企业级实战与Hadoop实战&PDF和PPT
今天给大家分享的是《大数据Spark企业级实战》与《Hadoop实战》《大数据处理系统·Hadoop源代码情景分析》《50个大厂大数据算法教程》等销量排行前10名的大数据技术书籍(文末领取PDF版)。这些书籍具有以下几个优点:易读、实践性强,对解决工作中遇到的业务问题具有一定启发性。
|
存储 流计算 运维
基于ELK+Flink日志全观测最佳实践
本文主要介绍ELK+Flink的日志全观测解决方案和实践分享
基于ELK+Flink日志全观测最佳实践

热门文章

最新文章