程序员

召唤师为神马有十个技能(续)

2016-01-14  本文已影响99人  littlersmall

一年前的时候,写了篇日志,描述如何计算出召唤师的技能个数。
http://www.jianshu.com/p/10e784ff531b
前一段时间要做技术分享,便随便的把那篇日志放了上去,敷衍的成分明显大于分享的热情。
今天早上看空间,发现瑞冬同学评论了那篇日志,一段尘封的过往便这样又一次被渐渐追忆回来。
人总是这样,在选择的路上被各种幻象迷失,在放弃,追寻之间越来越疲惫,回首望去的时候,懊悔,不舍,留恋,伤感充斥心间,我们总算选择性的忘记不好的部分,留下被时间雕琢洗涤后的美好回忆。
不过话说回来,那些看似美好的东西也许只是一层美丽的外衣罢了,如果真的有机会回到过去重新选择.......
那么现在得到的maybe是一种新的不同形式的痛苦。
有得则必有失。

回到题目中的数学问题。
今天考虑了一下,觉得问题可以继续抽象化:从m种不同的球中取出n个,或者,有m个不同的球,每一次取出一个,之后放回,一共进行n次,不考虑次序问题,那么一共有多少种方式?
当然了,可以仍然选择上一篇日志中的方式,将问题分解,转换,最后求解。
不过今天,我准备换一种思路。

有放回的取出n个球,那么从结果来看,假设1号球一共被取出了x1次,2号球x2次,以此类推,m号球xm次,那么我们可以得到一个方程:

x1 + x2 + x3 +...+ xm = n

我们只要求出这个m元一次方程的非负整数解的个数,就可以得到问题的解。
这个问题是有现成的结论性公式的。但我们仍然通过分析的方式得到最后的结果。

要求方程的解,我们将问题再做一次变换,假设现在有n个白球,m-1个黑球,那么将这m+n-1个球混合在一起排列起来,第一个黑球左边白球的个数即为x1的值,第一个黑球和第二个黑球之间的白球个数即为x2的值,以此类推,最后一个黑球右边的白球数为xm的值。
现在问题被转换为了从m+n-1相同的球中,取出m-1个球作为黑球的方式有多少种?
结果显而易见:C(m+n-1, m-1)。
原文时间(2013-08-25)

上一篇 下一篇

猜你喜欢

热点阅读