Java で物事を順序付けする必要があるリソース スケジューリングの問題がありますが、隣り合うリソースには制限があります。良い例えは、特定の数字のみが隣り合うことができる「数字」の文字列です。私の解決策は再帰的で、小さな文字列に対しては問題なく動作しますが、実行時間は O(X^N) です。ここで、X は可能な桁数 (ベース) であり、N は文字列の長さです。すぐに手に負えなくなります。
以下の互換性マトリックスを使用して、使用できる文字列の例をいくつか示します
。 長さ 1: 0、1、2、3、4
長さ 2:
02、03、14、20、30、41 長さ 3: 020、030 141、202、203、302、303、414
0 1 2 3 4 ---------------------- 0| 0 0 1 1 0 1| 0 0 0 0 1 2| 10000 3| 10000 4| 0 1 0 0 0
長さ N のすべての文字列をカウントするための私の解決策は、空の文字列で開始し、最初の桁を並べ替え、長さ N-1 のすべての文字列に対して再帰呼び出しを行うことでした。再帰呼び出しは、追加された最後の数字をチェックし、その数字の隣にある可能性のあるすべての順列を試します。毎回 00、01、04 を並べ替えようとしないように、いくつかの最適化が行われています。
それらをすべて列挙しようとする以外に、順列を数えるより良い方法について何か考えはありますか?