Skip to content

Stirling ​

The Stirling number of the second kind S(n,k)S(n, k): the number of ways to partition an n-set into k non-empty blocks

✓ checked against that system · ! checked, with disagreements (hover a chip)WikipediaStirling numbers of the second kindMathWorldStirlingNumberoftheSecondKindWikidataQ2601117DLMF26.8.i.p3Fungrim entry9fbe4fOEISA008277Wolfram LanguageStirlingS2✓
Stirling(n, k)the number of partitions of an nn-set into kk blocks
SageMathstirling_number2(n, k)✓SymPystirling(n, k)mpmathstirling2(n, k)JuliaCombinatorics.stirlings2(big(n), k)
Typed signatures
TypePackageApplies
(integer, integer) -> integercompute-enginealways
(integer, integer) -> integernumber-theoryreplaces compute-enginealways

Domain: Combinatorics

Details
  • compute-engine spells the second-kind number {nk}\left\{{n\atop k}\right\} as Stirling\mathrm{Stirling}.
  • It satisfies the recurrence S(n,k)=k S(n−1,k)+S(n−1,k−1)S(n, k) = k\,S(n-1, k) + S(n-1, k-1)
  • Summing over kk gives the Bell number: ∑kS(n,k)=Bn\sum_k S(n, k) = B_n (see BellNumber)
  • The signed first-kind numbers are StirlingS1

Plot

Examples

3 more kept as data, checked against the oracles
Basic #
live ↗
InStirling(5,2)\mathrm{Stirling}(5, 2)Out1515
live ↗
InStirling(6,3)\mathrm{Stirling}(6, 3)Out9090
live ↗
InStirling(20,10)\mathrm{Stirling}(20, 10)Out5 917 584 964 6555\,917\,584\,964\,655
Scope #

Exact for large n

live ↗
InStirling(50,2)\mathrm{Stirling}(50, 2)Out562 949 953 421 311562\,949\,953\,421\,311

Threads element-wise over a list, as Wolfram's Listable heads do

live ↗
InStirling([2,4,6],2)\mathrm{Stirling}(\bigl\lbrack2, 4, 6\bigr\rbrack, 2)Out[1,7,31]\bigl\lbrack1, 7, 31\bigr\rbrack
Applications #

The ways to split 10 distinct items among 3 identical non-empty boxes

live ↗
InStirling(10,3)\mathrm{Stirling}(10, 3)Out9 3309\,330
live ↗
InStirling(n,1..n)\mathrm{Stirling}(n, 1..n)OutMap(_1⁡↦Stirling(n,_1⁡),1..n)\mathrm{Map}(\operatorname{\_1}↦\mathrm{Stirling}(n, \operatorname{\_1}), 1..n)
live ↗
In∑k=16Stirling(6,k)f′(ez)ekz\sum_{k=1}^6\mathrm{Stirling}(6, k)f^{\prime}(e^{z})e^{kz}Out15f(5)(ez)e5z+31f′′(ez)e2z+65f(4)(ez)e4z+90f′′′(ez)e3z+f′(ez)ez+f(6)(ez)e6z15f^{(5)}(e^{z})e^{5z}+31f^{\prime\prime}(e^{z})e^{2z}+65f^{(4)}(e^{z})e^{4z}+90f^{\prime\prime\prime}(e^{z})e^{3z}+f^{\prime}(e^{z})e^{z}+f^{(6)}(e^{z})e^{6z}
Properties #

One block means one partition: S(n,1)=1S(n, 1) = 1

live ↗
InStirling(5,1)\mathrm{Stirling}(5, 1)Out11

Singletons only: S(n,n)=1S(n, n) = 1

live ↗
InStirling(5,5)\mathrm{Stirling}(5, 5)Out11

Row sums give the Bell numbers

live ↗
In∑k=04Stirling(4,k)=BellNumber(4)\sum_{k=0}^4\mathrm{Stirling}(4, k)=\mathrm{BellNumber}(4)OutTrue\mathrm{True}

Two blocks: S(n,2)=2n−1−1S(n, 2) = 2^{n-1} - 1

live ↗
InStirling(10,2)=29−1\mathrm{Stirling}(10, 2)=2^9-1OutTrue\mathrm{True}

S(n,n−1)=(n2)S(n, n-1) = \binom{n}{2}: one block is a pair

live ↗
InStirling(6,5)=(62)\mathrm{Stirling}(6, 5)=\binom{6}{2}OutTrue\mathrm{True}

Explicit formula S(n,k)=1k!∑j(−1)k−j(kj)jnS(n, k) = \frac{1}{k!}\sum_j (-1)^{k-j}\binom{k}{j} j^n

live ↗
InStirling(6,3)=13!(∑j=03(−1)3−j(3j)j6)\mathrm{Stirling}(6, 3)=\frac{1}{3!}(\sum_{j=0}^3(-1)^{3-j}\binom{3}{j}j^6)OutTrue\mathrm{True}

Orthogonality with StirlingS1: ∑ks(n,k) S(k,m)=δnm\sum_k s(n, k)\,S(k, m) = \delta_{nm}

live ↗
In∑k=04StirlingS1(4,k)Stirling(k,2)\sum_{k=0}^4\mathrm{StirlingS1}(4, k)\mathrm{Stirling}(k, 2)Out00

Enormous Stirling number evaluated numerically

live ↗
InN(Stirling(120,10))N(\mathrm{Stirling}(120, 10))Out275 564 293 332 645 612 796 076 533 812 387 578 132 055 070 471 681 207 862 920 555 299 757 965 212 186 923 458 011 526 847 229 561 561 721 294 169 780275\,564\,293\,332\,645\,612\,796\,076\,533\,812\,387\,578\,132\,055\,070\,471\,681\,207\,862\,920\,555\,299\,757\,965\,212\,186\,923\,458\,011\,526\,847\,229\,561\,561\,721\,294\,169\,780

Partitions of 10 elements into 4 blocks

live ↗
InStirling(10,4)\mathrm{Stirling}(10, 4)Out34 10534\,105

Nothing to partition into zero blocks, for n>0n>0

live ↗
InStirling(1,0)\mathrm{Stirling}(1, 0)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

One element in one block

live ↗
InStirling(1,1)\mathrm{Stirling}(1, 1)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

More blocks than elements gives 00

live ↗
InStirling(1,2)\mathrm{Stirling}(1, 2)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

Nonempty set cannot fill zero blocks

live ↗
InStirling(2,0)\mathrm{Stirling}(2, 0)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

One block holding both

live ↗
InStirling(2,1)\mathrm{Stirling}(2, 1)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

Each element on its own

live ↗
InStirling(2,2)\mathrm{Stirling}(2, 2)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

Too many blocks

live ↗
InStirling(2,3)\mathrm{Stirling}(2, 3)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

Zero blocks only fit the empty set

live ↗
InStirling(3,0)\mathrm{Stirling}(3, 0)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

A single block

live ↗
InStirling(3,1)\mathrm{Stirling}(3, 1)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

Three ways to pick the lone element

live ↗
InStirling(3,2)\mathrm{Stirling}(3, 2)Out33

Known value · Wolfram MathematicalFunctionData, StirlingS2

All singletons

live ↗
InStirling(3,3)\mathrm{Stirling}(3, 3)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

k>nk>n gives 00

live ↗
InStirling(3,4)\mathrm{Stirling}(3, 4)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

Zero for n≥1n\ge1

live ↗
InStirling(4,0)\mathrm{Stirling}(4, 0)Out00

Known value · Wolfram MathematicalFunctionData, StirlingS2

Always 11 when k=1k=1

live ↗
InStirling(4,1)\mathrm{Stirling}(4, 1)Out11

Known value · Wolfram MathematicalFunctionData, StirlingS2

S(n,2)=2n−1−1S(n,2)=2^{n-1}-1

live ↗
InStirling(4,2)\mathrm{Stirling}(4, 2)Out77

Known value · Wolfram MathematicalFunctionData, StirlingS2

S(4,3)=(42)S(4,3)=\binom42, choosing the pair that shares a block

live ↗
InStirling(4,3)\mathrm{Stirling}(4, 3)Out66

Known value · Wolfram MathematicalFunctionData, StirlingS2

Possible issues #

The empty set has one partition (into no blocks)

live ↗
InStirling(0,0)\mathrm{Stirling}(0, 0)Out11

No blocks for a non-empty set: S(n,0)=0S(n, 0) = 0 for n>0n > 0

live ↗
InStirling(5,0)\mathrm{Stirling}(5, 0)Out00

k>nk > n is 0

live ↗
InStirling(3,5)\mathrm{Stirling}(3, 5)Out00
About
Examples39
Checked againstWolfram Language 39 agreeSageMath 33 agree4 errorSymPy 33 agree1 differ3 errormpmath 32 agree1 errormathlib4 31 agree1 differ2 errorJulia 31 agree1 unevaluated1 errorCombinatorica 1 agree
CrosswalkWikipediaMathWorldWikidataDLMFFungrim entryOEISWolfram LanguageSageMathSymPympmathJulia

Implementation

mappedwolframpackages/oracle/src/mappings.ts

compute-engine's Stirling is the SECOND kind (Wolfram's StirlingS2). Combinatorics.jl's stirlings2 needs n as a BigInt past its Int64 lookup table (n > 20).

mappedsympypackages/oracle/src/mappings.ts

compute-engine's Stirling is the SECOND kind (Wolfram's StirlingS2). Combinatorics.jl's stirlings2 needs n as a BigInt past its Int64 lookup table (n > 20).

mappedsagepackages/oracle/src/mappings.ts

compute-engine's Stirling is the SECOND kind (Wolfram's StirlingS2). Combinatorics.jl's stirlings2 needs n as a BigInt past its Int64 lookup table (n > 20).

mappedjuliapackages/oracle/src/mappings.ts

compute-engine's Stirling is the SECOND kind (Wolfram's StirlingS2). Combinatorics.jl's stirlings2 needs n as a BigInt past its Int64 lookup table (n > 20).

mappedmathlib4packages/oracle/src/mappings.ts

compute-engine's Stirling is the SECOND kind (Wolfram's StirlingS2). Combinatorics.jl's stirlings2 needs n as a BigInt past its Int64 lookup table (n > 20).

mappedmpmathpackages/oracle/src/mappings.ts

The second kind.

See also: StirlingS1, BellNumber, SetPartitions