Lオブジェクトのリストとしましょう。さらに、C一連の制約を設定します。たとえば、次のようになります。
C(1) = t1 comes before t2、どこt1にt2属しているかLC(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 番目の要素の前に来ることを指定します)。
よりシンプルな (そしてより効率的な) ソリューションが存在するかどうか疑問に思っていました。
前もって感謝します。