﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-acmercyj-文章分类-算法笔记</title><link>http://www.cppblog.com/acmercyj/category/16569.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 13 Apr 2011 13:03:42 GMT</lastBuildDate><pubDate>Wed, 13 Apr 2011 13:03:42 GMT</pubDate><ttl>60</ttl><item><title>母函数，排列组合笔记</title><link>http://www.cppblog.com/acmercyj/articles/144140.html</link><dc:creator>mr_chen</dc:creator><author>mr_chen</author><pubDate>Wed, 13 Apr 2011 10:05:00 GMT</pubDate><guid>http://www.cppblog.com/acmercyj/articles/144140.html</guid><wfw:comment>http://www.cppblog.com/acmercyj/comments/144140.html</wfw:comment><comments>http://www.cppblog.com/acmercyj/articles/144140.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/acmercyj/comments/commentRss/144140.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/acmercyj/services/trackbacks/144140.html</trackback:ping><description><![CDATA[<p>1．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 圆排列<br>圆排列个数 =P(n, r)/r= n!/( r*(n-r)! )</p>
<p>例：8人围着餐桌吃饭，多少种就座方式？</p>
<p>Ans: P(8, 8)/8=7!</p>
<p>2．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重排列<br>a.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 无限重排列：n个不同元素中取r个按次序排列，每个元素可取无限次，总数为nr。</p>
<p>b.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有限重排列：r个不同色彩球放入n个标号的盒子，第i种彩球有ri个，总数为P(n, r) / (r1!* r2!*&#8230; rt!)</p>
<p>3．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 非重组合：每个元素最多出现一次<br>C(n, r)</p>
<p>4．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重组合<br>N个不同的元素中取r个元素，允许重复取，不考虑顺序。总数为C(n+r-1, r)</p>
<p>5．&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 母函数<br>a.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引出：</p>
<p>(x1+ x2+&#8230; +xk)n的组合数学意义是将n个无区别的球放入k个编号不同的盒子里，每个盒子球数不限。多项式展开后，x1n1 *x2n2*&#8230;* xknk通过幂可以表示一组解。而这个项的系数为</p>
<p>C(n, n1)* C(n-n1, n2)*&#8230;* C(n-n1-n2-&#8230;-nk-1, nk)=n!/ (n1!n2!&#8230;nk! )</p>
<p>各系数之和为kn。</p>
<p>b.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 普通母函数</p>
<p>一个序列{an}，称a0+a1x+ a2x2+&#8230;+ anxn+&#8230;这个多项式为{an}的普通母函数。</p>
<p>例1：（天平称物问题）有质量n1，n2&#8230;nk整数克的砝码，要称i克物体，物体在左，砝码在右。共有多少种不同的称法？</p>
<p>解：设有ai种方法，则</p>
<p>(1+xn1) (1+xn2)&#8230;(1+xnk)=∑ ai xi</p>
<p>1表示(1+xnj)中提供1，砝码nj没有用上。</p>
<p>ai为所求。</p>
<p>注：多项式展开后，还可以看出能称出哪些重量</p>
<p>经验：始终记得，一个括号内一次仅有一个项被取，用于提供给展开式的某一项</p>
<p>例2：（重复取物）有n种不同的物品，每种物品分别能最多取b1，b2&#8230; bn件。从中可重复的取r件物品有多少种不同的取法？</p>
<p>解：设有ar种不同的取法。则</p>
<p>(1+x+x2+&#8230;+xb1) (1+x+x2+&#8230;+xb2)&#8230; (1+x+x2+&#8230;+xbn)=a0+a1x+ a2x2+&#8230;+ arxr+&#8230;</p>
<p>展开式中xr的来源xm1xm2&#8230;xmn=xr</p>
<p>于是成了重组合问题，答案为C(n+r-1, r)</p>
<p>例3：整数拆分：整数r拆分成k1，k2&#8230; km的和，ki允许最多重复ni次。求拆分方案数。</p>
<p>解：这是求k1b1+ k2b2+&#8230;+ kmbm=r的不定方程的非负整数解的个数，0&lt;= bi&lt;= ni 。</p>
<p>考虑(1+xk1+xk1*2+xk1*3+&#8230;+xk1*n1)( 1+xk2+xk2*2+xk2*3+&#8230;+xk2*n2)&#8230;( 1+xkn+xkn*2+xkn*3+&#8230;++xkm*nm)</p>
<p>则答案是xr的系数</p>
<p>c.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指数母函数</p>
<p>N个元素中，ai重复了ni次，求从中取r个元素的排列数为br。</p>
<p>设取mi个ai，∑mi=r。则相互不同的排列数为r! / &#8719;mi! </p>
<p>则对于所有的mi的拆分方法，br=∑( r! / &#8719;mi! )</p>
<p>例4：若有8个元素，其中a1重复了3次，a2重复了2次，a3重复了3次。求从中取出4个元素的排列数。</p>
<p>解：先构造普通母函数<br>G(x)=(1+x+ x2+x3) (1+x+ x2) (1+x+ x2+x3)</p>
<p>X4的系数为10，说明取4个元素的组合数为10。这相当于上面所说的对于mi的拆分方法。<br>4 = 1+0+3 = 0+1+3 = 2+0+2 = 1+1+2 = 0+2+2 =&nbsp; 3+0+1 = 2+1+1 = 1+2+1 = 3+1+0 = 2+2+0</p>
<p>代入br=∑( r! / &#8719;mi! )，得到70种<br>&nbsp;</p>
<p>为了便于计算br，引入函数</p>
<p>g(x)= (1+x+x2/2!+x3/3!+&#8230;+xn1/n1!) (1+x+x2/2!+x3/3!+&#8230;+xn2/n2!)&#8230; (1+x+x2/2!+x3/3!+&#8230;+xnk/nk!)=∑ (br*xr/r!)</p>
<p>g(x)称为{br}的指数母函数。br=∑( r! / &#8719;mi! )</p>
<img src ="http://www.cppblog.com/acmercyj/aggbug/144140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/acmercyj/" target="_blank">mr_chen</a> 2011-04-13 18:05 <a href="http://www.cppblog.com/acmercyj/articles/144140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>