の分割を列挙したくなったとき,どうやるんだったか毎回忘れるので,自分用に書いておく.
自然数の単調非増加な有限列で,和がであるものをの分割という.
例えば,は長さのの分割である.
長さのの分割の集合をとかく.
本稿ではの元を列挙するアルゴリズムを与える.
なおこのアルゴリズムは,とすることでの全ての分割を列挙するためにも使うことができる.
記法の定義
自然数の列に対して
と定義する.
また,(を個並べたもの)と定義する.
アルゴリズムのもととなる数学的性質
の元は,末尾がであるものと,末尾がでないものに分けられる.前者は末尾のを消去するとの元になり,後者は各要素からを減じるとの元になる.
疑似コード
procedure
if then return end if;
if or then return end if;
←;
←;
return
end procedure