组合 C(N, K) = C(N - 1, K) + C(N - 1, K - 1) 的理解

组合的递推公式 C(N, K) = C(N - 1, K) + C(N - 1, K - 1) 等价于 C(N + 1, K + 1) = C(N, K + 1) + C(N, K) ,即K和N分别加1。

通过观察 C(N + 1, K + 1) = C(N, K + 1) + C(N, K)

右边第二项C(N, K)为“在N件中取K件的组合数”,左边一项C(N + 1, K + 1)为“在N+1件中取K+1件的组合数”,这两项的差C(N, K + 1)为“在N件中取K+1件的组合数”。

思路是把问题“从N件中取K件”变为“从N+1件中取K+1件”时发生的变化,当从前者变为后者,即向前者总件数N中多投入1件,并且多取出1件,这样问题可以划分为一下两部分:(可以有其他的划分?)

  1. 多取出的那件就是新投入的那件。即在N+1件中取K+1件,而其中的1件已经提前确定好(同时消耗了1个总件数和1次取的机会),问题转化为在N件中取K件,即 C(N, K) 。
  2. 多取出的那件不是新投入的那件。即在N+1件中取K+1件,而其中的1件是不能取的,实际只有N种选择(消耗了1个总件数,但不消耗取的机会),问题转化为在N件中取K+1件,即 C(N, K+1) 。

在做这样的划分的时候要保证划分是“完全”的。

(有点像全概率公式的划分?左边为相同的目的(在N+1件中取K+1件),右边是划分亦即限制条件)

posted @   CheapCopyCat  阅读(973)  评论(0编辑  收藏  举报
编辑推荐:
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
阅读排行:
· Apifox不支持离线,Apipost可以!
· 历时 8 年,我冲上开源榜前 8 了!
· 零经验选手,Compose 一天开发一款小游戏!
· Trae 开发工具与使用技巧
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示