当前位置: 首页 > news >正文

Binomial Coefficient(二项式系数)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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.

英文描述

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

2018-12-25_1-49-00.jpg?version=1&modificationDate=1546127750155&api=v2

中文描述

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

在这里有一个说明需要注意的是,如果结果超过 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]

 

转载于:https://my.oschina.net/u/2344080/blog/2995345

相关文章:

  • 桂余丢证
  • 记2018年的最后一个bug
  • 算法踩坑小记
  • 洛谷P3674 小清新人渣的本愿
  • 我们是如何从ng1迁移ing到vue的
  • linux设置动态库路径和环境变量
  • 小细节见实力,告诉你vivo Z3如何成为爆款千元机
  • 8分钟学会Consul集群搭建及微服务概念
  • 2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
  • 天海实业携手海宇勇创签署战略合作协议
  • 机器学习可行性与VC dimension
  • 处理linux下面的mysql乱码问题(下面的utf8换成gb2312也是可以的)
  • Java常见设计模式之适配器模式
  • 免费 官方的ASP.NET MVC电子书-Professional ASP.NET MVC 1.0
  • ashx文件的使用[转]
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • ➹使用webpack配置多页面应用(MPA)
  • ES6 学习笔记(一)let,const和解构赋值
  • HTML中设置input等文本框为不可操作
  • JavaScript 一些 DOM 的知识点
  • JavaScript-Array类型
  • Java基本数据类型之Number
  • OSS Web直传 (文件图片)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • webpack入门学习手记(二)
  • 复杂数据处理
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 免费小说阅读小程序
  • 目录与文件属性:编写ls
  • 我的面试准备过程--容器(更新中)
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • Android开发者必备:推荐一款助力开发的开源APP
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • # Maven错误Error executing Maven
  • #QT(串口助手-界面)
  • ( 10 )MySQL中的外键
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (汇总)os模块以及shutil模块对文件的操作
  • (转)关于pipe()的详细解析
  • *1 计算机基础和操作系统基础及几大协议
  • .bat文件调用java类的main方法
  • .NET 5种线程安全集合
  • .net 发送邮件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @ModelAttribute使用详解
  • @RequestMapping用法详解
  • [1127]图形打印 sdutOJ
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [bzoj1006]: [HNOI2008]神奇的国度(最大势算法)
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb