Repetition Permutation の生成数

要素の繰り返し有りの順列 Permutation が生成するリストは、Java では、長さ8以上ではメモリ不足になってしまう。
生成する順列を溜めなくても、7以上はかなり遅くなる。

以下のとおり長さに対して結果の数はとても大きくなる。

data length List
A,B,C 3 27
A,B,C,D 4 256
A,B,C,D,E 5 3,126
A,B,C,D,E,F 6 46,656
A,B,C,D,E,F,G 7 823,543
A,B,C,D,E,F,G,H 8 16,777,216
A,B,C,D,E,F,G,H,I 9 387,420,489
A,B,C,D,E,F,G,H,I,J 10 10,000,000,000

そこで考えたのが、Predicate で絞り込みまたは1つでも欲しい条件の結果を取得したら
早々と順列を見つけるループから抜けることである。
RepeatablePermutation は、この為のメソッドを用意した。
yipuran-core/RepeatablePermutation.java at master · yipuran/yipuran-core · GitHub