L
オブジェクトのリストとしましょう。さらに、C
一連の制約を設定します。たとえば、次のようになります。
C(1) = t1 comes before t2
、どこt1
にt2
属しているかL
C(2) = t3 comes after t2
、どこt3
にt2
属しているかL
C
の制約に違反していない順列のセットを (MATLAB で) 見つけるにはどうすればよいですか?
私の最初の解決策は素朴です:
orderings = perms(L);
toBeDeleted = zeros(1,size(orderings,1));
for ii = 1:size(orderings,1)
for jj = 1:size(constraints,1)
idxA = find(orderings(ii,:) == constraints(jj,1));
idxB = find(orderings(ii,:) == constraints(jj,2));
if idxA > idxB
toBeDeleted(ii) = 1;
end
end
end
ここconstraints
で、 は一連の制約です (各制約は 2 つの要素の行にあり、最初の要素が 2 番目の要素の前に来ることを指定します)。
よりシンプルな (そしてより効率的な) ソリューションが存在するかどうか疑問に思っていました。
前もって感謝します。