SSL chap16.html
Interaktion und PortierbarkeitHTML
|
|
| products/Sources/formale Sprachen/GAP/doc/ref/chap16.html |
 |
<?xml version= "1.0" encoding= "UTF-8"?>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
< html xmlns= "http://www.w3.org/1999/xhtml" xml:lang= "en">
< head>
< title>GAP (ref) - Chapter 16: Combinatorics</ title>
< meta http-equiv= "content-type" content= "text/html; charset=UTF-8" />
< meta name= "generator" content= "GAPDoc2HTML" />
< link rel= "stylesheet" type= "text/css" href= "manual.css" />
< script src= "manual.js" type= "text/javascript"></ script>
< script type= "text/javascript">overwriteStyle();</ script>
</ head>
< body class= "chap16" onload= "jscontent()">
< div class= "chlinktop">< span class= "chlink1">Goto Chapter: </ span>< a href= "chap0.html">Top</ a> < a href="chap1.html">1</a> <a href="chap2.html">2</a> <a href="chap3.html">3</a> <a href="chap4.html">4</a> <a href="chap5.html">5</a> <a href="chap6.html">6</a> <a href="chap7.html">7</a> <a href="chap8.html">8</a> <a href="chap9.html">9</a> <a href="chap10.html">10</a> <a href="chap11.html">11</a> <a href="chap12.html">12</a> <a href="chap13.html">13</a> <a href="chap14.html">14</a> <a href="chap15.html">15</a> <a href="chap16.html">16</a> <a href="chap17.html">17</a> <a href="chap18.html">18</a> <a href="chap19.html">19</a> <a href="chap20.html">20</a> <a href="chap21.html">21</a> <a href="chap22.html">22</a> <a href="chap23.html">23</a> <a href="chap24.html">24</a> <a href="chap25.html">25</a> <a href="chap26.html">26</a> <a href="chap27.html">27</a> <a href="chap28.html">28</a> <a href="chap29.html">29</a> <a href="chap30.html">30</a> <a href="chap31.html">31</a> <a href="chap32.html">32</a> <a href="chap33.html">33</a> <a href="chap34.html">34</a> <a href="chap35.html">35</a> <a href="chap36.html">36</a> <a href="chap37.html">37</a> <a href="chap38.html">38</a> <a href="chap39.html">39</a> <a href="chap40.html">40</a> <a href="chap41.html">41</a> <a href="chap42.html">42</a> <a href="chap43.html">43</a> <a href="chap44.html">44</a> <a href="chap45.html">45</a> <a href="chap46.html">46</a> <a href="chap47.html">47</a> <a href="chap48.html">48</a> <a href="chap49.html">49</a> <a href="chap50.html">50</a> <a href="chap51.html">51</a> <a href="chap52.html">52</a> <a href="chap53.html">53</a> <a href="chap54.html">54</a> <a href="chap55.html">55</a> <a href="chap56.html">56</a> <a href="chap57.html">57</a> <a href="chap58.html">58</a> <a href="chap59.html">59</a> <a href="chap60.html">60</a> <a href="chap61.html">61</a> <a href="chap62.html">62</a> <a href="chap63.html">63</a> <a href="chap64.html">64</a> <a href="chap65.html">65</a> <a href="chap66.html">66</a> <a href="chap67.html">67</a> <a href="chap68.html">68</a> <a href="chap69.html">69</a> <a href="chap70.html">70</a> <a href="chap71.html">71</a> <a href="chap72.html">72</a> <a href="chap73.html">73</a> <a href="chap74.html">74</a> <a href="chap75.html">75</a> <a href="chap76.html">76</a> <a href="chap77.html">77</a> <a href="chap78.html">78</a> <a href="chap79.html">79</a> <a href="chap80.html">80</a> <a href="chap81.html">81</a> <a href="chap82.html">82</a> <a href="chap83.html">83</a> <a href="chap84.html">84</a> <a href="chap85.html">85</a> <a href="chap86.html">86</a> <a href="chap87.html">87</a> <a href="chapBib.html">Bib</a> <a href="chapInd.html">Ind</a> </div>
<div java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p id="mathjaxlink" class="pcenter"><a href="chap16_mj.html">[MathJax on]</a></p>
<p><a id="X7BDA99EE7CEADA7C" name="X7BDA99EE7CEADA7C"></a></p>
<div class="ChapSects"><a href="chap16.html#X7BDA99EE7CEADA7C">16 <span class="Heading">Combinatorics</span></a>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap16.html#X800E48927D5C83F5">16.1 <span class="Heading">Combinatorial Numbers</span></a>
</span>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X87665F748594BF29">16.1-1 Factorial</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href=<
<#X7DC5667580522BDA">16.13Bell</<span
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X792FF6EA786A5C2B">16.1-4 Bernoulli<
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X85037456785BB33C">16.1-5 Stirling1</a></java.lang.StringIndexOutOfBoundsException: Index 129 out of bounds for length 0
< =ContSS"> >span " nbsp;/>ahref=".htmlX7C93E14D7BC360F0>1616 </</>
</div></div>
<div class="ContSect"><span class="tocline"><span class="nocss"> </span><a href="chap16.html#X81B4696585C38147">16.2 <span class="Heading">Combinations, Arrangements and Tuples</span></a>
</>
<div class="ContSSBlock">
<span class="ContSS"><br /><span class="nocss"> </span><a href="p><code class="func">IteratorOfCombinations</code> returns an <code class="funca href="chap30.htmlX83ADF8287ED0668E">spanclass=R>.8/> combinations(<class=f"Combinationscode>(a href=chtml#"span"efLink>.-<span>/a>))ofgivenvar ""mset/var>.Ifanon-java.lang.StringIndexOutOfBoundsException: Range [393, 392) out of bounds for length 564
<class"ContSS"<br>spanclass"">nbsp;&;/span><ahref">.- <spanclass"Heading"Iterator andenumerator ofcombinations</span></a>
</span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X82A6E98C85714FD0">16.2-3 NrCombinations</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7837B3357C7566C8">16.2-4 Arrangements</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7DE1ABD47D19F140">16.2-5 NrArrangements</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X81601C6786120DDC">16.2-6 UnorderedTuples</a></span>
<span class="ContSS"><br /><span class=<>The of combinations these functions can be different and different fromthe returned by<code ="func>Combinations<code> (<a href="chap16.html#X8770F16D794C0ADB"><span class="RefLink">16.2-1</span></a>).</p>
<span
<span class="ContSS"><br /><span class="nocss"> </span><a <iv ="example">pre
<pan class=ContSS"br/<span class=nocss">  <span<a href"chap16.htmlX86416A31807B0086">16.2-10 IteratorOfTuples</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X85E18A9A87FD4CA2">16.2-11 NrTuples</a></span>
<span class="ContSS"><br /><span class="nocss"> 49152
<span class="ContSS"><br /><>spanclass"GAPinput"cm:=EnumeratorOfCombinations);<spanjava.lang.StringIndexOutOfBoundsException: Index 104 out of bounds for length 104
< ="< >"<>a=c.htmlX79C159507B2BF1C9">16.2-14 Derangements</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7C1741B181A9AB9C">16.2-15 NrDerangements</a></java.lang.StringIndexOutOfBoundsException: Index 138 out of bounds for length 96
<span class="ContSS"><br /><span java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 5
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.java.lang.StringIndexOutOfBoundsException: Index 85 out of bounds for length 0
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X84A6D15F8107008B">16.2-18 Partitions</a></span>
<span class="ContSS"><br /><span class="<h5>.2-3 NrCombinations</>
<java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
<span div classfunc<able =func =100"<tr>td class="tdleft"><code class="func">‣ NrCombinations</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<pan class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X820DF201871F2723">16.2-22 OrderedPartitions</a></span>
<span class="ontSS">br />span ="nocss" nbsp;/span><a href="chap16.html#X80BB9F4982CA1E8B">16.2-23 NrOrderedPartitions</a></span>
<panclass="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X8009520C82942461">16.2-24 PartitionsGreatestLE</a></span>
<pan "ContSS"><br />span class="nocss"> </span><a href=chap16html#X7CB8D4FF8592A9BB"16.2-25PartitionsGreatestEQ</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7A70D4F3809494E7">16.2-26 java.lang.StringIndexOutOfBoundsException: Index 120 out of bounds for length 98
<span class="ContSS"><br /><span class="java.lang.StringIndexOutOfBoundsException: Range [0, 45) out of bounds for length 7
<span class>Thefunction < =>java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 526
<class=ContSS"<br />span class="nocss" nbsp;<span>a href="chap16.html#X7DB9BEB6856EC03D">16.2-29 AssociatedPartition</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7A95D8A6820363A8">16.2-30 PowerPartition</a></span>
<p>a id="X7837B3357C7566C8"name"X7837B3357C7566C8"<a<p>
<span class="java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
<span"><span =nocss>nbsp;nbsp;span> "chap16html#".233BetaSet</>/
</div></div>
<div
</span>
<div class=div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">8227; Arrangements</code>( <var class="Arg">mset</var>[, <var class="Arg">p>returns the set of arrangements of the multiset <var class="Arg">mset</var> that contain <var class="Arg">k</var> elements. If <var class="Arg">k</var> is not given it"Arg">set</var><p
<class"ContSS"><br/>span class=nocss&; /span>< href=chap16html#AE1D70803A886C">.31 ibonacci</a></span>
<span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7830A03181D67192">16.3-2 Lucas</a></span>
</div></divp>a id=X7DE1ABD47D19F140" name="X7DE1ABD47D19F140"></a></p>
<div class="ContSect"><span class="tocline"><java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 0
</span>
<div class="ContSSBlock">
<class">br ><span class="nocss"> </span><a href=chap16.#X7F0942DD83BBAB7A">6-1Permanent/a
</div><preturns thenumber of <ode class="code">rrangements(<var class="Arg">mset</var>,<var class="Arg">k</var>)</code>.</p>
</div>p> anexample of arrangementsof amultiset,think the Scrabble. Suppose you six characters thethe wordcode class="code""settle"/codetomake fourletter word Thenthe possibilities are by/>
<h3>16 <span class="
<p>This chapter describes functions that deal with combinatorics. We mainly java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 26
<p><a id="X800E48927D5C83F5" name="X800E48927D5C83F5"></a></p>
<h4>16.1 <span class="Heading">Combinatorial Numbers</span></h4>
<p><a id= "e" "e" "","" ] [ "" "", "" "l ],["e,"e, "t, ""]java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
<h5>16.1-1 Factorial</h5>
<div class="func"><table class="func" width="100%"><tr><java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 12
<p>returns the <em>factorial</em> <span class="SimpleMath">n!</span> of the positive integer <var class="Arg">n</var>, which is defined as the product <span class="SimpleMath">1 ⋅ 2 ⋅ 3 ⋯ n</span>.</p>
<p><span class="SimpleMath">n!</span> is the number of permutations of a set of <span class="SimpleMath">n</span> elements. <span class="SimpleMath">1 / n!</span> is the coefficient of <span class="SimpleMath">x^n</span> in the formal java.lang.StringIndexOutOfBoundsException: Index 240 out of bounds for length 0
<div class="example"><pre>
<span class="GAPprompt">gap><
[ 1, 1, 2, 6, 24, 120, 720, 5040,
<>
265252859812191058636308480000000
</pre></div>
<p><code class="func">PermutationsList</code>java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p><a id="X7A9AF5F58682819D" name="X7A9AF5F58682819D"></a></p>
<inomial</5>
<div class="func"><table class="func" width="100%
<>returns the <embinomialcoefficient<em span classSimpleMath"{nchoose}span> of integers =></>and < class"rg><> Thisis defined the conditions <spanclass="impleMath>n choose k = for<class"SimpleMath"k< 0</span>,<span class=SimpleMath">{0 choose k} = 0</span> for <span class="SimpleMath">k ≠ 0</span>, <span class="SimpleMath">{0 choose 0} = 1</span> and the relation <span class="SimpleMath">{n choose k} = {n-1 choose k} + {n-1 choose k-1}</span> for all <span class="SimpleMath">n</span> and <span class="SimpleMath">k</span>.</p>
<p>There are many ways of describing this function. For example, if <span class="SimpleMath">n ≥ 0</span> and <span class="SimpleMath">0 ≤ k ≤ n</span>, then <span class="SimpleMath">{n choose k} = n! / (k! (n-k)!)</span> and for <span class="SimpleMath">n < 0</span> and <span class="SimpleMath">k ≥ 0</span> we have <span class="SimpleMath">{n choose k} = (-1)^k {-n+k-1 choose k}</span>.</p>
<p>If <span class="SimpleMath">n ≥ 0</span> then <span class="SimpleMath">{n choose k}</span> is the number of subsets with <span class="SimpleMath
<div class="java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
<span class="
<spandiv"unc = width=100><>td class"dleft> classfunc>#8227 /(var="Arg"set<,<class="rg></ar> )td>td =tdright">&bsp;nbsp)/</tr></table>/
[ 1, 4, 6, 4, 1 ]
<span class="GAPprompt">gap></span> <<p>returns the number of <code class="code">(<var class"Arg">et</ar><var =Arg"></>)</code>./>
<span class="GAPprompt">gap><>As anexample for unordered tuples think of a poker-like game played with 5 dice. Then each possible hand corresponds to an unordered five-tuple from the set <span class="SimpleMath">{ 1, 2, ..., 6
<span class="GAPprompt">gap></span> <span class="GAPinput">PrintArray( lastspanclass=GAPprompt>ap>/><span class""NrUnorderedTuples1.6,5 ;/span
[ 1, ,0, , 0, 0 0]java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
[ 1 1, , 0, 0]
[ 1, 2, 1, 0, 0, 0, 0 ],
[ 1, 3, 3, 1, 0, 0, 0 ],
[ 1, 4, ,1 ,,5] 1,1 ,1,6] 1 1 1 2 2 ],[1,,1 ,3]
[1 , 10 ,, 1 ]
[ 1, 6, 15, 20, 15, 6, 1 ] ]
<span classGAPprompt">></pan><span class="GAPinput>( 50, 10)</pan
10272278170
</ ...32more tuples .
<p><code class="func">NrCombinations</code> (<a href="chap16.html#X82A6E98C85714FD0"><span class="RefLink">16.2-3</span></a>) is the generalization of <code class="func">Binomial</code> for multisets. <code class="func">Combinations</code> (<a href="chap16.java.lang.StringIndexOutOfBoundsException: Index 261 out of bounds for length 12
<p><a id="X7DC5667580522BDA" name="X7DC5667580522BDA"></a></p>
<h5>16.1-3 Bell</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Bell</code>( <var class="Arg">n</var> )</td><td class="tdright">java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<returns the<em>Bell number</em> <spanclass="impleMath">(n)/span.The Bell numbers are defined spanclass=SimpleMath"B(0andthe recurrence class="impleMath>(n)=∑{ =0}n{ k B)/<p>
<p><span class="SimpleMath">B(n)</span> is the number of ways to partition java.lang.StringIndexOutOfBoundsException: Range [0, 76) out of bounds for length 0
<div class="example"><pre>
<span class="java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[1,,, ,,52,203]
<span class="GAPprompt">gap></span> <span class="GAPinput">Bell( 14 );</span>
190899322
</pre></div>
<p><a id="X792FF6EA786A5C2B" name="X792FF6EA786A5C2B"></a></p>
<h5><516.9EnumeratorOfTuples/5>
<div class="func"><table class="java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 0
<returnsthe<class""n/var>th<em>Bernoullinumber<em<class""B_n/> which is defined by span ""B_0=1<span> and <span class="SimpleMath">B_n = -∑_{k = 0}^{n-1} {n+1 choose k} B_k/(n+1)</span>.</p>
<p><span class="SimpleMath">B_n / n!</span> is the coefficient of <span class="SimpleMathjava.lang.StringIndexOutOfBoundsException: Index 89 out of bounds for length 0
<div class="example"><pre>
<span class="GAPpromptdiv class=func"<tableclass=" width=100">tr< class=tdleft"< "unc>&style='color: green'>8227; /code(var =Arg>set<var> var""k<var>)/tdclass="tdright">( function )</td></tr></table></div>
1
<span class="GAPprompt">gap></span> <span class="GAPinput">Bernoulli( 10 );</span>
5/66
< class="APinput">( ;#there is nosimple pattern Bernoulli numbers/pan
-691/2730
<span class="GAPprompt">gap></span> <span class="GAPinputjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
495057205241079648212477525
</pre></div>
<p><a id="X85037456785BB33C" name="X85037456785BB33C"></p>returns the number of <code class="code">Tuples(<var cvar>< class"Arg></var></><java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<h5>16.1-5 Stirling1</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Stirling1</code>( <var class="Arg">n</var>, <var class="Arg">k</var> ) 3 ] , ,[, ]
<p>returns the <em>Stirling number of the first kind</em> <span class="SimpleMath">S_1(n,k)</span> of the integers <var class="Arg">n</var> and <var class="Arg">k</var>. Stirling numbers of the first kind are defined by <span class="SimpleMath">S_1(0,0) = 1</span>, <span class="SimpleMath">S_1(n,0) = S_1(0,k) = 0</span> if <span class="SimpleMath">n, k ne 0</span> and the recurrence <span class="SimpleMath">S_1(n,k) = (n-1) S_1(n-1,k) + S_1(n-1,k-1)</span>.</p>
<p><span class="SimpleMath">S_1(n,k)</span> is the number of permutations of <var class="Arg">n</var> points with <var class="Arg">k</var> cycles. Stirling numbers of the first kind appear as coefficients in the series <span class="SimpleMath">n! {x choose n} = ∑_{k = 0}^n S_1(n,k) x^k</span> which is the generating function for Stirling numbers of the first kind. Note the similarity to <span class="SimpleMath">x^n = ∑_{k = 0}^n S_2(n,k) k! {x choose k}</span> (see <code class="func">Stirling2</code> (<a href="chap16.html#X7C93E14D7BC360F0"><span class="RefLink">16.1-6</span></a>)). Also the definition of <span class="SimpleMath">S_1</span> implies <span class="SimpleMath">S_1(n,k) = S_2(-k,-n)</span> if <span class="SimpleMath">n, k < 0</span>. There are many formulae relating Stirling numbers of the first kind to Stirling numbers of the second kind, Bell numbers, and Binomial coefficients.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># Knuth calls this the trademark of S_1:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( [0..4], k -> Stirling1( 4, k ) );</span>
[ 0, 6, 11, 6, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( [0..6], n->List( [0..6], k->Stirling1( n, k ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput"># note the similarity with Pascal's triangle for Binomial numbers</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PrintArray( last );</span>
[ [ 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0 ],
[ 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 2, 3, 1, 0, 0, 0 ],
[ 0, 6, 11, 6, 1, 0, 0 ],
[ 0, 24, 50, 35, 10, 1, 0 ],
[ 0, 120, 274, 225, 85, 15, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Stirling1(50,10);</span>
101623020926367490059043797119309944043405505380503665627365376
</pre></div>
<p><a id="X7C93E14D7BC360F0" name="X7C93E14D7BC360F0"></a></p>
<h5>16.1-6 Stirling2</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Stirling2</code>( <var class="Arg">n</var>, <var class="Arg">k</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the <em>Stirling number of the second kind</em> <span class="SimpleMath">S_2(n,k)</span> of the integers <var class="Arg">n</var> and <var class="Arg">k</var>. Stirling numbers of the second kind are defined by <span class="SimpleMath">S_2(0,0) = 1</span>, <span class="SimpleMath">S_2(n,0) = S_2(0,k) = 0</span> if <span class="SimpleMath">n, k ne 0</span> and the recurrence <span class="SimpleMath">S_2(n,k) = k S_2(n-1,k) + S_2(n-1,k-1)</span>.</p>
<p><span class="SimpleMath">S_2(n,k)</span> is the number of ways to partition a set of <var class="Arg">n</var> elements into <var class="Arg">k</var> pairwise disjoint nonempty subsets (see <code class="func">PartitionsSet</code> (<a href="chap16.html#X7A13D8DC8204525F"><span class="RefLink">16.2-16</span></a>)). Stirling numbers of the second kind appear as coefficients in the expansion of <span class="SimpleMath">x^n = ∑_{k = 0}^n S_2(n,k) k! {x choose k}</span>. Note the similarity to <span class="SimpleMath">n! {x choose n} = ∑_{k = 0}^n S_1(n,k) x^k</span> (see <code class="func">Stirling1</code> (<a href="chap16.html#X85037456785BB33C"><span class="RefLink">16.1-5</span></a>)). Also the definition of <span class="SimpleMath">S_2</span> implies <span class="SimpleMath">S_2(n,k) = S_1(-k,-n)</span> if <span class="SimpleMath">n, k < 0</span>. There are many formulae relating Stirling numbers of the second kind to Stirling numbers of the first kind, Bell numbers, and Binomial coefficients.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput"># Knuth calls this the trademark of S_2:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">List( [0..4], k->Stirling2( 4, k ) );</span>
[ 0, 1, 7, 6, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">List( [0..6], n->List( [0..6], k->Stirling2( n, k ) ) );;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput"># note the similarity with Pascal's triangle for Binomial numbers</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">PrintArray( last );</span>
[ [ 1, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 0 ],
[ 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 1, 3, 1, 0, 0, 0 ],
[ 0, 1, 7, 6, 1, 0, 0 ],
[ 0, 1, 15, 25, 10, 1, 0 ],
[ 0, 1, 31, 90, 65, 15, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Stirling2( 50, 10 );</span>
26154716515862881292012777396577993781727011
</pre></div>
<p><a id="X81B4696585C38147" name="X81B4696585C38147"></a></p>
<h4>16.2 <span class="Heading">Combinations, Arrangements and Tuples</span></h4>
<p><a id="X8770F16D794C0ADB" name="X8770F16D794C0ADB"></a></p>
<h5>16.2-1 Combinations</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Combinations</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of all combinations of the multiset <var class="Arg">mset</var> (a list of objects which may contain the same object several times) with <var class="Arg">k</var> elements; if <var class="Arg">k</var> is not given it returns all combinations of <var class="Arg">mset</var>.</p>
<p>A <em>combination</em> of <var class="Arg">mset</var> is an unordered selection without repetitions and is represented by a sorted sublist of <var class="Arg">mset</var>. If <var class="Arg">mset</var> is a proper set, there are <span class="SimpleMath">{|<var class="Arg">mset</var>| choose <var class="Arg">k</var>}</span> (see <code class="func">Binomial</code> (<a href="chap16.html#X7A9AF5F58682819D"><span class="RefLink">16.1-2</span></a>)) combinations with <var class="Arg">k</var> elements, and the set of all combinations is just the <em>power set</em> of <var class="Arg">mset</var>, which contains all <em>subsets</em> of <var class="Arg">mset</var> and has cardinality <span class="SimpleMath">2^{|<var class="Arg">mset</var>|}</span>.</p>
<p>To loop over combinations of a larger multiset use <code class="func">IteratorOfCombinations</code> (<a href="chap16.html#X78DD5C0D81057540"><span class="RefLink">16.2-2</span></a>) which produces combinations one by one and may save a lot of memory. Another memory efficient representation of the list of all combinations is provided by <code class="func">EnumeratorOfCombinations</code> (<a href="chap16.html#X78DD5C0D81057540"><span class="RefLink">16.2-2</span></a>).</p>
<p><a id="X78DD5C0D81057540" name="X78DD5C0D81057540"></a></p>
<h5>16.2-2 <span class="Heading">Iterator and enumerator of combinations</span></h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IteratorOfCombinations</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; EnumeratorOfCombinations</code>( <var class="Arg">mset</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">IteratorOfCombinations</code> returns an <code class="func">Iterator</code> (<a href="chap30.html#X83ADF8287ED0668E"><span class="RefLink">30.8-1</span></a>) for combinations (see <code class="func">Combinations</code> (<a href="chap16.html#X8770F16D794C0ADB"><span class="RefLink">16.2-1</span></a>)) of the given multiset <var class="Arg">mset</var>. If a non-negative integer <var class="Arg">k</var> is given as second argument then only the combinations with <var class="Arg">k</var> entries are produced, otherwise all combinations.</p>
<p><code class="func">EnumeratorOfCombinations</code> returns an <code class="func">Enumerator</code> (<a href="chap30.html#X7EF8910F82B45EC7"><span class="RefLink">30.3-2</span></a>) of the given multiset <var class="Arg">mset</var>. Currently only a variant without second argument <var class="Arg">k</var> is implemented.</p>
<p>The ordering of combinations from these functions can be different and also different from the list returned by <code class="func">Combinations</code> (<a href="chap16.html#X8770F16D794C0ADB"><span class="RefLink">16.2-1</span></a>).</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">m:=[1..15];; Add(m, 15);</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrCombinations(m);</span>
49152
<span class="GAPprompt">gap></span> <span class="GAPinput">i := 0;; for c in Combinations(m) do i := i+1; od;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">i;</span>
49152
<span class="GAPprompt">gap></span> <span class="GAPinput">cm := EnumeratorOfCombinations(m);;</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">cm[1000];</span>
[ 1, 2, 3, 6, 7, 8, 9, 10 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Position(cm, [1,13,15,15]);</span>
36866
</pre></div>
<p><a id="X82A6E98C85714FD0" name="X82A6E98C85714FD0"></a></p>
<h5>16.2-3 NrCombinations</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrCombinations</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">Combinations(<var class="Arg">mset</var>,<var class="Arg">k</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Combinations( [1,2,2,3] );</span>
[ [ ], [ 1 ], [ 1, 2 ], [ 1, 2, 2 ], [ 1, 2, 2, 3 ], [ 1, 2, 3 ],
[ 1, 3 ], [ 2 ], [ 2, 2 ], [ 2, 2, 3 ], [ 2, 3 ], [ 3 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput"># number of different hands in a game of poker:</span>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrCombinations( [1..52], 5 );</span>
2598960
</pre></div>
<p>The function <code class="func">Arrangements</code> (<a href="chap16.html#X7837B3357C7566C8"><span class="RefLink">16.2-4</span></a>) computes ordered selections without repetitions, <code class="func">UnorderedTuples</code> (<a href="chap16.html#X81601C6786120DDC"><span class="RefLink">16.2-6</span></a>) computes unordered selections with repetitions, and <code class="func">Tuples</code> (<a href="chap16.html#X86A3CA0F7CC8C320"><span class="RefLink">16.2-8</span></a>) computes ordered selections with repetitions.</p>
<p><a id="X7837B3357C7566C8" name="X7837B3357C7566C8"></a></p>
<h5>16.2-4 Arrangements</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Arrangements</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of arrangements of the multiset <var class="Arg">mset</var> that contain <var class="Arg">k</var> elements. If <var class="Arg">k</var> is not given it returns all arrangements of <var class="Arg">mset</var>.</p>
<p>An <em>arrangement</em> of <var class="Arg">mset</var> is an ordered selection without repetitions and is represented by a list that contains only elements from <var class="Arg">mset</var>, but maybe in a different order. If <var class="Arg">mset</var> is a proper set there are <span class="SimpleMath">|mset|! / (|mset|-k)!</span> (see <code class="func">Factorial</code> (<a href="chap16.html#X87665F748594BF29"><span class="RefLink">16.1-1</span></a>)) arrangements with <var class="Arg">k</var> elements.</p>
<p><a id="X7DE1ABD47D19F140" name="X7DE1ABD47D19F140"></a></p>
<h5>16.2-5 NrArrangements</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrArrangements</code>( <var class="Arg">mset</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">Arrangements(<var class="Arg">mset</var>,<var class="Arg">k</var>)</code>.</p>
<p>As an example of arrangements of a multiset, think of the game Scrabble. Suppose you have the six characters of the word <code class="code">"settle"</code> and you have to make a four letter word. Then the possibilities are given by</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Arrangements( ["s","e","t","t","l","e"], 4 );</span>
[ [ "e", "e", "l", "s" ], [ "e", "e", "l", "t" ], [ "e", "e", "s", "l" ],
[ "e", "e", "s", "t" ], [ "e", "e", "t", "l" ], [ "e", "e", "t", "s" ],
... 93 more possibilities ...
[ "t", "t", "l", "s" ], [ "t", "t", "s", "e" ], [ "t", "t", "s", "l" ] ]
</pre></div>
<p>Can you find the five proper English words, where <code class="code">"lets"</code> does not count? Note that the fact that the list returned by <code class="func">Arrangements</code> (<a href="chap16.html#X7837B3357C7566C8"><span class="RefLink">16.2-4</span></a>) is a proper set means in this example that the possibilities are listed in the same order as they appear in the dictionary.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">NrArrangements( ["s","e","t","t","l","e"] );</span>
523
</pre></div>
<p>The function <code class="func">Combinations</code> (<a href="chap16.html#X8770F16D794C0ADB"><span class="RefLink">16.2-1</span></a>) computes unordered selections without repetitions, <code class="func">UnorderedTuples</code> (<a href="chap16.html#X81601C6786120DDC"><span class="RefLink">16.2-6</span></a>) computes unordered selections with repetitions, and <code class="func">Tuples</code> (<a href="chap16.html#X86A3CA0F7CC8C320"><span class="RefLink">16.2-8</span></a>) computes ordered selections with repetitions.</p>
<p><a id="X81601C6786120DDC" name="X81601C6786120DDC"></a></p>
<h5>16.2-6 UnorderedTuples</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; UnorderedTuples</code>( <var class="Arg">set</var>, <var class="Arg">k</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of all unordered tuples of length <var class="Arg">k</var> of the set <var class="Arg">set</var>.</p>
<p>An <em>unordered tuple</em> of length <var class="Arg">k</var> of <var class="Arg">set</var> is an unordered selection with repetitions of <var class="Arg">set</var> and is represented by a sorted list of length <var class="Arg">k</var> containing elements from <var class="Arg">set</var>. There are <span class="SimpleMath">{|set| + k - 1 choose k}</span> (see <code class="func">Binomial</code> (<a href="chap16.html#X7A9AF5F58682819D"><span class="RefLink">16.1-2</span></a>)) such unordered tuples.</p>
<p>Note that the fact that <code class="func">UnorderedTuples</code> returns a set implies that the last index runs fastest. That means the first tuple contains the smallest element from <var class="Arg">set</var> <var class="Arg">k</var> times, the second tuple contains the smallest element of <var class="Arg">set</var> at all positions except at the last positions, where it contains the second smallest element from <var class="Arg">set</var> and so on.</p>
<p><a id="X7959281584C42C52" name="X7959281584C42C52"></a></p>
<java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 56
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrUnorderedTuples</code>( <var class="Arg">set</var>, <var class="Arg">k</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">UnorderedTuples(<var class="Arg">set</var>,<var class="Arg">k</var>)</code>.</p
<p>As an example for unordered tuples think of a poker-like game played with 5 dice. Then each possible hand corresponds to an unordered five-
<div class="example"><pre>
<span class="GAPprompt">gap></span> <<=ContSect"span class=tocline">spanclassnocss>nbsp<span>a =chap16.html#X800E48927D5C83F5">16.1 <span class="Heading">Combinatorial Numbers</span></a>
252
<span class="GAPprompt">gap></span> <span class="GAPinput">UnorderedTuples( [1..6], 5 );</span>
[ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 1, 2 ], [ 1span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7A9AF5F58682819D">16.1-2 Binomial</a></span>
[ 1, 1, 1, 1, 5 ], [ 1, 1, 1, 1, 6 ], [ 1, 1, 1, 2, 2 ], [ 1, 1, 1, 2, 3 ],
... 100 more tuples ...
[ divclass">span classtocline"<=n>&<spana "java.lang.StringIndexOutOfBoundsException: Range [93, 92) out of bounds for length 192
... 100 more tuples ...
3,3, 5 ,5 ,[, ,5,5,6 ,[, ,5,,6 ,[ 3 6,,6 ]
... 32 more tuples /span
[5, 5 5, 6, 6], ,5 , ] [,6 ,6, ,6 , , 6]]
</pre></div>
<> <class"func>Combinations</code>(<href=cX8770"<span class=""16.21<span<) unorderedwithoutrepetitions,codeclass="><code>(a href"chap16.tml#"<span class="RefLink">16.2-4</span></a>) computes ordered selections without repetitions, and <code class="func">Tuples</code> (<a href="chap16.html#X86A3CA0F7CC8C320"><span class="RefLink">16.2-8</span></a>) computes ordered selections with repetitions.</p>
<p><a id="X86A3CA0F7CC8C320span"java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 130
<>162-8 </>
<div class="func"><table class="span =ContSS"</< =nocss> <span>a =chap16html#7>6.12 PermutationsList/<span
<p>returns the set of all ordered tuples of length <var class="Arg">k</var> of the set <var class="Arg">set</var>.span =ContSS"< /< =nocss;nbsp<span>a ="hap16html#X79C159507B2BF1C9"16.-4Derangements</a></span>
< repetition and is represented by a list of length <var ""></>containing elements varclass="rg"set/var> are< ="|var class"Arg"setvar>|^<ar =""k</var</span> such ordered ./>
<p>Note that the fact that <code class="func">Tuples</code> returns a set implies that the last index runs fastest. That means the first tuple contains the smallest element from <var class="Arg">set</var> <var class="Arg">k</var> times, the second tuple contains the smallest element of <var class="Arg">set</var> at span class="ContSS"><br /><span class="nocss"> </span><a href="chap16.html#X7BCD7FC2876386F1">16.2-17 NrPartitionsSet</a></span>
<p><a id="span =java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 148
<h5>16.2-9 EnumeratorOfTuples</h5>
<java.lang.StringIndexOutOfBoundsException: Range [10, 4) out of bounds for length 253
<>Thisfunction referredto exampleof byfunctionsbut constructedfroma.Theresult equal that <class"">Tuples(<var class="">set<> <class=Arg>/> )/>.However,the are not stored inthe listbutare createdidentified demand<p>
<p><a id="X86416A31807B0086" name="X86416A31807B0086"></a></p>
<h5>16.2-10 IteratorOfTuples</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="span class="ContSS">br ><spanclass="nocss"> </span><a href="chap16.html#X80BB9F4982CA1E8B">16.2-23 NrOrderedPartitions</a></span>
<p>For
<p><a id="X85E18A9A87FD4CA2" name="X85E18A9A87FD4CA2"></a></p>
<h5>16.2-11 NrTuples</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrTuples</code>( <var class="Arg">set</var>, <var class="Arg">k</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">Tuples(<var class="Arg">set</var>,<var class="Arg">k</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Tuples( [1,2,3], 2 );</span>
[ [ 1, 1 ], [ 1, 2 ], [ 1, 3 ], [ 2, 1 ], [ 2, 2 ], [ 2, 3 ],
[ 3, 1 ], [ 3, 2 ], [ 3, 3 ] ]
<span class="GAPprompt"<
100000
</pre></div>
=Arg><var></code>canalso be viewed the<var class="rg"><var-fold cartesianproduct of<var class="Arg">set</ar (see <code class="func">Cartesian</<a ="chap21.X7E1593B979BDF2CD>< class=""21.0-5<span>/a))</>
<p>The function <code class="func">Combinations</code> (<a href="chap16.html#X8770F16D794C0ADB"><span class="RefLink">16.2-1</span></a>) computes unordered selections without repetitions, <code class="func">Arrangements</code> (<a href="chap16.html#X7837B3357C7566C8"><span class="RefLink">16.2-4</span></a>) computes ordered selections without repetitions, and finally the function <code class="func">UnorderedTuples</code> (<a href="chap16.html#X81601C6786120DDC"><span class="RefLink">16.2-6</span></a>) computes unordered selections with repetitions.</p>
<p><a id="X7B0143FB83F359B7" name="X7B0143FB83F359B7"></a></p>
<h5>16.2-12 PermutationsList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PermutationsList</code>( <var class="Arg">mset</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">PermutationsList</code> returns the set of permutations of the multiset <var class="Arg">mset</var>.</p>
<p>A <em>permutation</em> is represented by a list that contains exactly the same elements as <var class="Arg">mset</var>, but possibly in different order. If <var class="Arg">mset</var> is a proper set there are <span class="SimpleMath">|<var class="Arg">mset</var>| !</span> (see <code class="func">Factorial</code> (<a href="chap16.html#X87665F748594BF29"><span class="RefLink">16.1-1</span></a>)) such permutations. Otherwise if the first elements appears <span class="SimpleMath">k_1</span> times, the second element appears <span class="SimpleMath">k_2</span> times and so on, the number of permutations is <span class="SimpleMath">|<var class="Arg">mset</var>| ! / (k_1! k_2! ...)</span>, which is sometimes called multinomial coefficient.</p>
<p><a id="X8629A2908050EB3A" name="X8629A2908050EB3A"></a></p>
<h5>16.2-13 NrPermutationsList</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrPermutationsList</code>( <var class="Arg">mset</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">PermutationsList(<var class="Arg">mset</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PermutationsList( [1,2,3] );</span>
[ [ 1, 2, 3 ], [ 1, 3, 2 ], [ 2, 1, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ],
[ 3, 2, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">PermutationsList( [1,1,2,2] );</span>
[ [ 1, 1, 2, 2 ], [ 1, 2, 1, 2 ], [ 1, 2, 2, 1 ], [ 2, 1, 1, 2 ],
[ 2, 1, 2, 1 ], [ 2, 2, 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrPermutationsList( [1,2,2,3,3,3,4,4,4,4] );</span>
12600
</pre></div>
<p>The function <code class="func">Arrangements</code> (<a href="chap16.html#X7837B3357C7566C8"><span class="RefLink">16.2-4</span></a>) is the generalization of <code class="func">PermutationsList</code> (<a href="chap16.html#X7B0143FB83F359B7"><span class="RefLink">16.2-12</span></a>) that allows you to specify the size of the permutations. <code class="func">Derangements</code> (<a href="chap16.html#X79C159507B2BF1C9"><span class="RefLink">16.2-14</span></a>) computes permutations that have no fixed points.</p>
<p><a id="X79C159507B2BF1C9" name="X79C159507B2BF1C9"></a></p>
<h5>16.2-14 Derangements</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Derangements</code>( <var class="Arg">list</var> )</td><td class="tdright">( function )</td></tr></table></div>
< ==X79>a/
<p>Note that
<p><a id="X7C1741B181A9AB9C" name="X7C1741B181A9AB9C"></a></p>
<h5>16.2-15 NrDerangements</h5>
<p>returns the set of all derangements of the list <var class="Arg">list</var>.</p>
<>returns java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 97
<p>As an example of derangements suppose that you have to send four different letters to four different people. Then a derangement corresponds to a way to send those letters such that no letter reaches the intended person.</p>
<div class=java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 31
<G>&;/java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 95
[ [ 2, 1, 4, 3 ], [ 2, 3, 4, 1 ], [ 2, 4, 1, 3 ], [ 3, 1, 4, 2 ],
,,1, ,,1] ,, 2,3,[,,12 ,
[ 4, 3, 2, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrDerangements( [1..10] ,12 java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
1334961
<span java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
27182816
<pan class=GAPprompt"gap;</<java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 99
[ ,, ,1 , 2 ,, 3, ,232,1 ]java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
[ 2, 3, 3, 1, 1, 2 ], [ 2, 3, 3, 1, 2, 1 ], [ 3 3 1 3 2,]
[ 3, 2, 1, 3, 2, 1 ], [ 3, 2, 3, 1, 1, 2 ], [ 3, 2, 3, 1, 2, 1 ],
["java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 109
<span class="GAPprompt">gap></span> <span class="GAPinput">NrDerangements( [1,2,2,3,3,3,4,4,4,4] );</span>
38
</pre></div>
<p>The function <code class="func">PermutationsList</code> (<a href>< id="A name=Xjava.lang.StringIndexOutOfBoundsException: Range [55, 52) out of bounds for length 62
<p><a id="X7A13D8DC8204525F" name="X7A13D8DC8204525F"></a></p>
<h5>16.2-16 PartitionsSet</h5>
<div class="func"><table class="func" width="100%"><tr
<p>returns the set of all unordered partitions of the set <var class="Arg">set</var> java.lang.StringIndexOutOfBoundsException: Index 87 out of bounds for length 0
<p>An <em>unordered partition</div class="func"><table class="func width"00"<>td class="tdleft">code class="func">8227; NrPartitionsSet</code>( <var class="Arg">set</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p><a id="X7BCD7FC2876386F1" name="X7BCD7FC2876386F1"></a></p>
<h5>16.2-17 NrPartitionsSet</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrPartitionsSet</code>( <var class="Arg">set</var>[, <var class="Arg">k</var>] )</spanclass="GAPprompt">gap></span> <span class="GAPinput">PartitionsSet( [1,2,3] );</span>
<p ][, , [,3, ] [ ]]
< class=example">pre>
<span java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 3
[[ [ 1 ], [2,3 ] ], [ 1,2] ] ,
[ [ 1, 2, 3 ] ], [ [ 1, 3 ], [ 2 ] ] ]
=>gtspanjava.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 99
[ [ [ 1 ], [ 2, 3, 4 ] ],java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
[1,, ] [ ], [,2,] ] ]
[ [ 1, 3 ], [ 2, 4 ] ], [ [ 1, 3, 4 ], [ 2 ] ],
[ [ 1, 4 ], [ 2, 3 ] ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrPartitionsSet( [1..6] );</span>
203
<span class="GAPprompt">gap></span> <span class=ivclass=func">table class="func" width="100%"><tr><td class="tdleft"><code class="func">‣ Partitions</code>( <var class="Arg">n</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</preturns theset ofall (unordered)partitions of positive integer<var class="Arg">n</var> into sums with <var class="Arg">k</var> summands. If <var class="Arg">k</var> is not given it returns all unordered partitions of <var class="Arg">n</var> for all <var class="Arg">k</var>.<
9330
</pre></div>
<p>Note that <code class="func">PartitionsSet</code> (<a href="chap16.html#X7A13D8DC8204525F"><span class="RefLink">16.2-16</span></a>) does currently not support multisets and that there is currently no ordered counterpart.</p>
<p><a id="X84A6D15F8107008B" name="X84A6D15F8107008B"></a></p>
<h5>16.2-18 Partitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="
<p>returns the<>If youwant toover all partitions of some larger <var class="Arg">n</var> use the more memory efficient <code class="func">IteratorOfPartitions</code> (<a href="chap16.html#X8793AEBD7E529E1D"><span class="RefLink">16.2-19</span></a>).</p>
<p>An <em>unordered partition</em> is an unordered sum <span class="SimpleMath">n = p_1 + p_2 + ⋯ + p_k</span> of positive integers and is represented by the list <span class="java.lang.StringIndexOutOfBoundsException: Index 181 out of bounds for length 0
<p>If you want to loop over all partitions of some larger <var class="Arg">n</var> use the more memory efficient <code class="func">IteratorOfPartitions</code> (<a href="chap16.html#X8793AEBD7E529E1D"><span class="RefLink">16.2-19</span></a>).</p>
<p>It is possible to associate with every partition of the integer <var class="
<p>Ramanujan found the identities <span class="SimpleMath">p(5i+4) = 0<pFor a integer <var class="Arg">n</var>, <code class="func">IteratorOfPartitions</code> returns an iterator (see <a href="chap30.html#X85A3F00985453F95"><span class="RefLink">30.8</span></a>) of the set of partitions of <var class="Arg">n</var> (see java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p><a id="X8793AEBD7E529E1D" name="X8793AEBD7E529E1D"></a></p>
<h5>16.2-19 IteratorOfPartitions</h5>
<="func ="100><>td ="tdleft<class=func>#8227;IteratorOfPartitions"><var> )td>tdclass""(&;functionnbsp/><tr/><div
<p>For a positive integer <var class="Arg">n</var>, <code class="func">IteratorOfPartitions</code> returns an iterator (see <a href="chap30.html#X85A3F00985453F95"><span class="RefLink">30.8</span></a>) of thejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
<p><id=X7EBD746A8607D0B8"="X7EBD746A8607D0B8"</a>>/p>
<h5>16.2-20 IteratorOfPartitionsSet</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; IteratorOfPartitionsSet</code>( <var class="Arg">set</var>[, <var class="Arg">k</var>[, <var class="Arg">flag</var>]] )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">IteratorOfPartitionsSet</code> returns an iterator (see <a href="chap30.html#X85A3F00985453F95"><span class="RefLink">30.8</span></a>) for all unordered partitions of the set <var class="Arg">set</var> into pairwise disjoint nonempty sets (see <code class="func">PartitionsSet</code> (<a href="chap16.html#X7A13D8DC8204525F"><span class="RefLink">16.2-16</span></a>)). If <var class="Arg">k</var> given and <var class="Arg">flag</var> is omitted or equal to <code class="keyw">false</code>, then only partitions of size <var class="Arg">k</var> are computed. If <var class="Arg">k</var> is given and <var class="Arg">flag</var> is equal to <code class="keyw">true</code>, then only partitions of size at most <var class="Arg">k</var> are computed.</p>
<p><a id="X86933C4F795C4EBD" name="X86933C4F795C4EBD"></a></p>
<h5>16.2-21 NrPartitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrPartitions</code>( <var class="Arg">n</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">Partitions(<var class="Arg">set</var>,<var class="Arg">k</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">Partitions( 7 );</span>
[ [ 1, 1, 1, 1, 1, 1, 1 ], [ 2, 1, 1, 1, 1, 1 ], [ 2, 2, 1, 1, 1 ],
[ 2, 2, 2, 1 ], [ 3, 1, 1, 1, 1 ], [ 3, 2, 1, 1 ], [ 3, 2, 2 ],
[ 3, 3, 1 ], [ 4, 1, 1, 1 ], [ 4, 2, 1 ], [ 4, 3 ], [ 5, 1, 1 ],
[ 5, 2 ], [ 6, 1 ], [ 7 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">Partitions( 8, 3 );</span>
[ [ 3, 3, 2 ], [ 4, 2, 2 ], [ 4, 3, 1 ], [ 5, 2, 1 ], [ 6, 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrPartitions( 7 );</span>
15
<span class="GAPprompt">gap></span> <span class="GAPinput">NrPartitions( 100 );</span>
190569292
</pre></div>
<p>The function <code class="func">OrderedPartitions</code> (<a href="chap16.html#X820DF201871F2723"><span class="RefLink">16.2-22</span></a>) is the ordered counterpart of <code class="func">Partitions</code> (<a href="chap16.html#X84A6D15F8107008B"><span class="RefLink">16.2-18</span></a>).</p>
<p><a id="X820DF201871F2723" name="X820DF201871F2723"></a></p>
<h5>16.2-22 OrderedPartitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; OrderedPartitions</code>( <var class="Arg">n</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of all ordered partitions of the positive integer <var class="Arg">n</var> into sums with <var class="Arg">k</var> summands. If <var class="Arg">k</var> is not given it returns all ordered partitions of <var class="Arg">set</var> for all <var class="Arg">k</var>.</p>
<p>An <em>ordered partition</em> is an ordered sum <span class="SimpleMath">n = p_1 + p_2 + ... + p_k</span> of positive integers and is represented by the list <span class="SimpleMath">[ p_1, p_2, ..., p_k ]</span>. There are totally <span class="SimpleMath">2^{n-1}</span> ordered partitions and <span class="SimpleMath">{n-1 choose k-1}</span> (see <code class="func">Binomial</code> (<a href="chap16.html#X7A9AF5F58682819D"><span class="RefLink">16.1-2</span></a>)) ordered partitions with <var class="Arg">k</var> summands.</p>
<p>Do not call <code class="func">OrderedPartitions</code> with an <var class="Arg">n</var> much larger than <span class="SimpleMath">15</span>, the list will simply become too large.</p>
<p><a id="X80BB9F4982CA1E8B" name="X80BB9F4982CA1E8B"></a></p>
<h5>16.2-23 NrOrderedPartitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrOrderedPartitions</code>( <var class="Arg">n</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">OrderedPartitions(<var class="Arg">set</var>,<var class="Arg">k</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">OrderedPartitions( 5 );</span>
[ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, 2 ], [ 1, 1, 2, 1 ], [ 1, 1, 3 ],
[ 1, 2, 1, 1 ], [ 1, 2, 2 ], [ 1, 3, 1 ], [ 1, 4 ], [ 2, 1, 1, 1 ],
[ 2, 1, 2 ], [ 2, 2, 1 ], [ 2, 3 ], [ 3, 1, 1 ], [ 3, 2 ],
[ 4, 1 ], [ 5 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">OrderedPartitions( 6, 3 );</span>
[ [ 1, 1, 4 ], [ 1, 2, 3 ], [ 1, 3, 2 ], [ 1, 4, 1 ], [ 2, 1, 3 ],
[ 2, 2, 2 ], [ 2, 3, 1 ], [ 3, 1, 2 ], [ 3, 2, 1 ], [ 4, 1, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrOrderedPartitions(20);</span>
524288
</pre></div>
<p>The function <code class="func">Partitions</code> (<a href="chap16.html#X84A6D15F8107008B"><span class="RefLink">16.2-18</span></a>) is the unordered counterpart of <code class="func">OrderedPartitions</code> (<a href="chap16.html#X820DF201871F2723"><span class="RefLink">16.2-22</span></a>).</p>
<p><a id="X8009520C82942461" name="X8009520C82942461"></a></p>
<h5>16.2-24 PartitionsGreatestLE</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PartitionsGreatestLE</code>( <var class="Arg">n</var>, <var class="Arg">m</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of all (unordered) partitions of the integer <var class="Arg">n</var> having parts less or equal to the integer <var class="Arg">m</var>.</p>
<p><a id="X7CB8D4FF8592A9BB" name="X7CB8D4FF8592A9BB"></a></p>
<h5>16.2-25 PartitionsGreatestEQ</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PartitionsGreatestEQ</code>( <var class="Arg">n</var>, <var class="Arg">m</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the set of all (unordered) partitions of the integer <var class="Arg">n</var> having greatest part equal to the integer <var class="Arg">m</var>.</p>
<p><a id="X7A70D4F3809494E7" name="X7A70D4F3809494E7"></a></p>
<h5>16.2-26 RestrictedPartitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; RestrictedPartitions</code>( <var class="Arg">n</var>, <var class="Arg">set</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>In the first form <code class="func">RestrictedPartitions</code> returns the set of all restricted partitions of the positive integer <var class="Arg">n</var> into sums with <var class="Arg">k</var> summands with the summands of the partition coming from the set <var class="Arg">set</var>. If <var class="Arg">k</var> is not given all restricted partitions for all <var class="Arg">k</var> are returned.</p>
<p>A <em>restricted partition</em> is like an ordinary partition (see <code class="func">Partitions</code> (<a href="chap16.html#X84A6D15F8107008B"><span class="RefLink">16.2-18</span></a>)) an unordered sum <span class="SimpleMath">n = p_1 + p_2 + ... + p_k</span> of positive integers and is represented by the list <span class="SimpleMath">p = [ p_1, p_2, ..., p_k ]</span>, in nonincreasing order. The difference is that here the <span class="SimpleMath">p_i</span> must be elements from the set <var class="Arg">set</var>, while for ordinary partitions they may be elements from <code class="code">[ 1 .. n ]</code>.</p>
<p><a id="X800B43838742FBF4" name="X800B43838742FBF4"></a></p>
<h5>16.2-27 NrRestrictedPartitions</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrRestrictedPartitions</code>( <var class="Arg">n</var>, <var class="Arg">set</var>[, <var class="Arg">k</var>] )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">RestrictedPartitions(<var class="Arg">n</var>,<var class="Arg">set</var>,<var class="Arg">k</var>)</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">RestrictedPartitions( 8, [1,3,5,7] );</span>
[ [ 1, 1, 1, 1, 1, 1, 1, 1 ], [ 3, 1, 1, 1, 1, 1 ], [ 3, 3, 1, 1 ],
[ 5, 1, 1, 1 ], [ 5, 3 ], [ 7, 1 ] ]
<span class="GAPprompt">gap></span> <span class="GAPinput">NrRestrictedPartitions(50,[1,2,5,10,20,50]);</span>
451
</pre></div>
<p>The last example tells us that there are 451 ways to return 50 pence change using 1, 2, 5, 10, 20 and 50 pence coins.</p>
<p><a id="X7F4EDCCA780B469D" name="X7F4EDCCA780B469D"></a></p>
<h5>16.2-28 SignPartition</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; SignPartition</code>( <var class="Arg">pi</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the sign of a permutation with cycle structure <var class="Arg">pi</var>.</p>
<p>This function actually describes a homomorphism from the symmetric group <span class="SimpleMath">S_n</span> into the cyclic group of order 2, whose kernel is exactly the alternating group <span class="SimpleMath">A_n</span> (see <code class="func">SignPerm</code> (<a href="chap42.html#X7BE5011B7C0DB704"><span class="RefLink">42.4-1</span></a>)). Partitions of sign 1 are called <em>even</em> partitions while partitions of sign <span class="SimpleMath">-1</span> are called <em>odd</em>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">SignPartition([6,5,4,3,2,1]);</span>
-1
</pre></div>
<p><a id="X7DB9BEB6856EC03D" name="X7DB9BEB6856EC03D"></a></p>
<h5>16.2-29 AssociatedPartition</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; AssociatedPartition</code>( <var class="Arg">pi</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">AssociatedPartition</code> returns the associated partition of the partition <var class="Arg">pi</var> which is obtained by transposing the corresponding Young diagram.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">AssociatedPartition([4,2,1]);</span>
[ 3, 2, 1, 1 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">AssociatedPartition([6]);</span>
[ 1, 1, 1, 1, 1, 1 ]
</pre></div>
<p><a id="X7A95D8A6820363A8" name="X7A95D8A6820363A8"></a></p>
<h5>16.2-30 PowerPartition</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PowerPartition</code>( <var class="Arg">pi</var>, <var class="Arg">k</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">PowerPartition</code> returns the partition corresponding to the <var class="Arg">k</var>-th power of a permutation with cycle structure <var class="Arg">pi</var>.</p>
<p>Each part <span class="SimpleMath">l</span> of <var class="Arg">pi</var> is replaced by <span class="SimpleMath">d = gcd(l, k)</span> parts <span class="SimpleMath">l/d</span>. So if <var class="Arg">pi</var> is a partition of <span class="SimpleMath">n</span> then <span class="SimpleMath"><var class="Arg">pi</var>^<var class="Arg">k</var></span> also is a partition of <span class="SimpleMath">n</span>. <code class="func">PowerPartition</code> describes the power map of symmetric groups.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PowerPartition([6,5,4,3,2,1], 3);</span>
[ 5, 4, 2, 2, 2, 2, 1, 1, 1, 1 ]
</pre></div>
<p><a id="X877D997B7F66A119" name="X877D997B7F66A119"></a></p>
<h5>16.2-31 PartitionTuples</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; PartitionTuples</code>( <var class="Arg">n</var>, <var class="Arg">r</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p><code class="func">PartitionTuples</code> returns the list of all <var class="Arg">r</var>-tuples of partitions which together form a partition of <var class="Arg">n</var>.</p>
<p><var class="Arg">r</var>-tuples of partitions describe the classes and the characters of wreath products of groups with <var class="Arg">r</var> conjugacy classes with the symmetric group on <var class="Arg">n</var> points, see <code class="func">CharacterTableWreathSymmetric</code> (<a href="chap71.html#X79B75C8582426BC5"><span class="RefLink">71.20-6</span></a>) and <code class="func">CharacterValueWreathSymmetric</code> (<a href="chap71.html#X83E71B1F7FA70134"><span class="RefLink">71.20-7</span></a>).</p>
<p><a id="X7F44AD098561DE32" name="X7F44AD098561DE32"></a></p>
<h5>16.2-32 NrPartitionTuples</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; NrPartitionTuples</code>( <var class="Arg">n</var>, <var class="Arg">r</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the number of <code class="code">PartitionTuples( <var class="Arg">n</var>, <var class="Arg">r</var> )</code>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">PartitionTuples(3, 2);</span>
[ [ [ 1, 1, 1 ], [ ] ], [ [ 1, 1 ], [ 1 ] ], [ [ 1 ], [ 1, 1 ] ],
[ [ ], [ 1, 1, 1 ] ], [ [ 2, 1 ], [ ] ], [ [ 1 ], [ 2 ] ],
[ [ 2 ], [ 1 ] ], [ [ ], [ 2, 1 ] ], [ [ 3 ], [ ] ],
[ [ ], [ 3 ] ] ]
</pre></div>
<p><a id="X8796C1D783ED9CB4" name="X8796C1D783ED9CB4"></a></p>
<h5>16.2-33 BetaSet</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; BetaSet</code>( <var class="Arg">alpha</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>For a list <var class="Arg">alpha</var> that describes a partition of a nonnegative integer (see <code class="func">Partitions</code> (<a href="chap16.html#X84A6D15F8107008B"><span class="RefLink">16.2-18</span></a>)), <code class="func">BetaSet</code> returns the list of integers obtained by reversing the order of <var class="Arg">alpha</var> and then adding the sequence <code class="code">[ 0, 1, 2, ... ]</code> of the same length, cf. <a href="chapBib.html#biBJK81">[JK81, Section 2.7]</a>.</p>
<div class="example"><pre>
<span class="GAPprompt">gap></span> <span class="GAPinput">BetaSet( [ 4, 2, 1 ] );</span>
[ 1, 3, 6 ]
<span class="GAPprompt">gap></span> <span class="GAPinput">BetaSet( [] );</span>
[ ]
</pre></div>
<p><a id="X83DC50B67D74E674" name="X83DC50B67D74E674"></a></p>
<h4>16.3 <span class="Heading">Fibonacci and Lucas Sequences</span></h4>
<p><a id="X85AE1D70803A886C" name="X85AE1D70803A886C"></a></p>
<h5>16.3-1 Fibonacci</h5>
<div class="func"><table class="func" width="100%"><tr><td class="tdleft"><code class="func">an style='color: green'>8227; Fibonacci</code>( <var class="Arg">n</var> )</td><td class="tdright">( function )</td></tr></table></div>
<p>returns the <var class="Arg">n</var>th number of the <em>Fibonacci sequence</em>. The Fibonacci sequence <span class="SimpleMath">F_n</span> is defined by the initial conditions <span class="SimpleMath">F_1 = F_2 = 1</span> and the recurrence relation <span class="SimpleMath">F_{n+2} = F_{n+1} + F_n</span>. For negative <span class="SimpleMath">n</span> we define <span class="SimpleMath">F_n = (-1)^{n+1} F_{-n}</span>, which is consistent with the recurrence relation.</p>
<p>Using generating functions one can prove that <span class="SimpleMath">F_n = ϕ^n - 1/ϕ^n</span>, where <span class="SimpleMath">ϕ</span> is <span class="SimpleMath">(sqrt{5} + 1)/2</span>, i.e., one root of <span class="SimpleMath">x^2 - x - 1 = 0</span>. Fibonacci numbers have the property <span class="SimpleMath">gcd( F_m, F_n ) = F_{gcd(m,n)}</span>. But a pair of Fibonacci numbers requires more division steps in Euclid | |