做题笔记之-----母函数的相关应用

来源:互联网 发布:2015年淘宝销量排行榜 编辑:程序博客网 时间:2024/06/03 16:32

前面说过母函数求递推式,今天要讲的母函数的作用是求组合数和排列数。

母函数有指数形式和一般形式。这些东西网上都有大把资料。我就懒得写了。

一般形式的母函数主要解决问题: 有 1 5  10 25 50  元的硬币,然后给你一个数字,问你用这几种硬币组合凑成数字大小的种类。很简单。种类个数就是系数,而这个数字就是x的次数。大多数都是这样的类型,换汤不换药。就举一个例子了。而这种方法唯一的难点是用代码模拟多项式相乘,这个代码可真是难倒我了,纠结了一上午,最后算是勉强写出来了。思想就是用两个数组,存要相乘的两个多项式的系数,在纸上多画画,应该就能懂了。

指数形式的母函数,主要解决排列问题,例如:26个字母分别给你多少个,然后让你计算可以产生长度为N的单词多少个。。。这个要重点说说。


这个是我在维基百科里面找的指数形式母函数的通项。从这个式子,我们可以发现,每项都要除N!,那么我们再计算多项式相乘的时候,该怎么处理呢。一开始,我是打算用两个数组,一个数组存的是系数分子,另一个存分母,然后相乘,分子分母分别相乘,这样也不错啊。等我实现的时候才发现,每次相乘,乘几次之后分母必然会超出int范围。

就像当N为10的时候,乘一次是10!*1!,第二次就是10!*2!第三次就是10!*2!*3!   等等一直下去,这是一件非常恐怖的事情啊。然后我也想不到好办法,只能求助google了。

找到一篇解题报告,一看,那真是绝啊,我完全没往那方面想。直接就用double型来存X前面的系数,只开一个数组存那个分数,不用考虑损失精度问题,因为损失的太小了,我们只要保证到小数点后一位不会减少到小于5,最后四舍五入输出还是满足我们要求的,这个做法真是开阔我视野了,感觉想问题角度都多了。。大笑

原创粉丝点击