要素の繰り返し有りの順列 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