2

Lオブジェクトのリストとしましょう。さらに、C一連の制約を設定します。たとえば、次のようになります。

  • C(1) = t1 comes before t2、どこt1t2属しているかL
  • C(2) = t3 comes after t2、どこt3t2属しているか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 番目の要素の前に来ることを指定します)。

よりシンプルな (そしてより効率的な) ソリューションが存在するかどうか疑問に思っていました。

前もって感謝します。

4

1 に答える 1