解決する必要のある問題がありますが、簡単でより重要な問題、つまり迅速な解決策は考えられません。これは、複数の巡回セールスマン問題の一部に少し似ています。
まず、X
行とN
列の行列があります。N
これはアルゴリズムの静的変数であり、X
変化する可能性があります。それが(ここで)のように見えると仮定しましょうN = 5
:
matrix = [1 2 4 3 5; 4 3 1 2 5; 1 2 4 3 5; ]
matrix =
1 2 4 3 5
4 3 1 2 5
1 2 4 3 5
すべての行は「ルート」と見なされ、1からN
各ルート(=行)までのすべての一意の番号が含まれ、部分的なルートに分割されます。つまり、X
行とM
(M < N
)列を含むブレークポイントマトリックスがあります。例えば:
breakpoints = [2 3 4; 1 2 4; 1 3 4]
breakpoints =
2 3 4
1 2 4
1 3 4
の各行のインデックスは、ルートが部分的なルートに分割されるAFTERbreakpoints
の対応する行の要素を示します。matrix
明確にするために、最初の行を例として考えてみましょう。breakpoints(1, :) = 2 3 4
つまり、ルートmatrix(1, :) = 1 2 4 3 5
は部分的なルートに分割されます[1 2], [4], [3] and [5]
。2番目の行には、2番目のルートを部分的なルートにbreakpoints(2, :) = 1 2 4
分割するブレークポイントがあります。matrix(2, :) = 4 3 1 2 5
[4], [3], [1 2] and [5]
今の私の目的は、からすべての行を削除することですがmatrix
、部分的なルートは冗長な重複であり、順序が異なります。この例では、行2は行1の複製です。行3は、部分的なルートにつながる異なるブレークポイントがあるため、行1と同じルートであっても重複しません[1], [2 4], [3] and [5]
。
どうすればこれをきれいにそして速く行うことができますか?行列には、X = 5e4
行やN = 10
、などの多くの要素を含めることができますM = 6
。