首页 > 编程语言 >C++ 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)

C++ 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)

时间:2024-07-05 10:57:56浏览次数:22  
标签:Coefficient nk Space efficient res 复杂度 .... int 空间

这里函数采用两个参数n和k,并返回二项式系数 C(n, k) 的值。 

例子: 

输入: n = 4 和 k = 2

输出: 6

解释: 4 C 2 等于 4!/(2!*2!) = 6

输入: n = 5 和 k = 2

输出: 10

解释: 5 C 2 等于 5!/(3!*2!) = 10

        在本文中,我们讨论了 O(n*k) 时间和 O(k) 额外空间算法。C(n, k) 的值可以在 O(k) 时间和 O(1) 额外空间内计算出来。

方法:

1、如果 r 大于 nr,则将 r 更改为 nr,并创建一个变量来存储答案。

2、从 0 到 r-1 运行循环

3、在每次迭代中更新 ans 为 (ans*(ni))/(i+1),其中 i 是循环计数器。

4、所以答案将等于 ((n/1)*((n-1)/2)*…*((n-r+1)/r),等于 nCr。

C(n, k) 
= n! / (nk)! * k! 
= [n * (n-1) *....* 1] / [ ( (nk) * (nk-1) * .... * 1) * 
                            ( k * (k-1) * .... * 1 ) ]
简化后,我们得到
C(n, k) 
= [n * (n-1) * .... * (n-k+1)] / [k * (k-1) * .... * 1]

另外,C(n, k) = C(n, nk)   
// 如果 r > n-r,则 r 可以更改为 n-r

以下实现中利用上述公式计算C(n,k):

// Program to calculate C(n, k) 
  
#include <bits/stdc++.h> 
using namespace std; 
  
// Returns value of Binomial Coefficient C(n, k) 
int binomialCoeff(int n, int k) 

    int res = 1; 
  
    // Since C(n, k) = C(n, n-k) 
    if (k > n - k) 
        k = n - k; 
  
    // Calculate value of 
    // [n * (n-1) *---* (n-k+1)] / [k * (k-1) *----* 1] 
    for (int i = 0; i < k; ++i) { 
        res *= (n - i); 
        res /= (i + 1); 
    } 
  
    return res; 

  
// Driver Code 
int main() 

    int n = 8, k = 2; 
    cout << "Value of C(" << n << ", " << k << ") is "
         << binomialCoeff(n, k); 
    return 0; 

  
// This is code is contributed by rathbhupendra

输出:
C(8, 2) 的值为 28

复杂度分析: 

时间复杂度: O(r)循环必须从 0 运行到 r。因此,时间复杂度为 O(r)。

辅助空间:O(1),因为不需要额外的空间。

标签:Coefficient,nk,Space,efficient,res,复杂度,....,int,空间
From: https://blog.csdn.net/hefeng_aspnet/article/details/139958642

相关文章

  • Java 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)
    这里函数采用两个参数n和k,并返回二项式系数C(n,k)的值。 例子: 输入:n=4和k=2输出:6解释:4C2等于4!/(2!*2!)=6输入:n=5和k=2输出:10解释:5C2等于5!/(3!*2!)=10        在本文中,我们讨论了O(n*k)时间和O(k)额外空间算法。C(n,......
  • qt 入门常用类理解(涉及QMessageBox,Layout,Spacers,Splitter,Buuddy,LoginApp,QFile,
    1.QMessageBoxQMessageBox::Yes QApplication::quit();QMessageBox::exec用于在模态(阻塞式)对话框中显示一个消息框,并等待用户的响应。这个函数通常用于在应用程序中显示消息、警告或询问对话框,并等待用户采取适当的操作后继续执行。int QMessageBox::exec()exec 函数没有......
  • [namespace hdk] ordered_vector
    功能:已重载[]运算符已重载构造函数clear()it()以std::vector形式返回自身print(char='',char='\n')输出,第一个参数为分隔符,第二个参数为结束符count(x)查找x的出现次数find(x)判断x是否出现,是返回1,否则返回0empty()判断当前是否为空size()返回当前元素个数lower......
  • OpenSpace Web3课程大纲
    这个OpenSpaceWeb3BootCamp区块链技术线下集训营培训的内容看起来不错,比较全面也比较深入,但我没有金钱和时间,而且似乎这个面向的应该是即将毕业的应届生,2个月脱产应该没多少工作的人参加,除了一些处于gap期的吧。年轻真好。不管怎样,在这里列一下这个培训的大纲,作为参考。夯实基......
  • Gradle Core Plugins (plugin is not in ‘org.gradle‘ namespace)
    记录一个由gradle构建项目遇到的问题:起因:项目原先运行正常,不过个人移动了工程的目录位置,导致出现以下错误GradleCorePlugins(pluginisnotin'org.gradle'namespace)-PluginRepositories(couldnotresolvepluginartifact'com.android.application:com.androi......
  • 好东西必须再发一次--NewSpaceGpt
    个人名片......
  • 2024.6.19 Subspace更名Autonomys后的首次社区会议:Autonomys新任CEO首秀
    本次社区会议为Subspace更名为Autonomys以及新任CEO LabheshPatel赴任后的首次社区会议。会议信息量较多,TimeDao择取重要信息如下:新任CEO介绍主网将会在第三季度末上线,在内部称为“GenesisProject”,每周多次会议确保这一目标的实现。TGE,TokenGenesisEvent,第一个代币......
  • ORION Space Scene Generation Framework
    ORION太空场景生成框架是一个涵盖所有太空场景生成方面的系统,从程序化的行星和宇宙飞船到任何相关的特效,支持所有管道。重要提示!!!:ORION资产可以从SkyMasterULTIMATE升级,从而可以与SkyMasterULTIMATE的全容积行星云和大气效果相结合,最适合在云层中飞行。这是该系统的第一......
  • # 猫头虎分享已解决Bug || **Out of Memory Error**: `java.lang.OutOfMemoryError:
    ......
  • 8、k8s-资源-Namespace-空间隔离
    Namespace是kubernetes系统中一种非常重要的资源、它主要的作用是用来实现多套环境的资源隔离或者多租户的资源隔离。默认情况下、kubernetes集群中的所有Pod都是可以互相访问的、但是在实际生产环境中、是不能让两个Pod之间进行互相访问的、这时候就可以将两个Pod划分到不同的n......