0

文字列のすべてのサブシーケンスを返すために、Matlab で疑似コードとアルゴリズムを作成しようとしています。

したがって、文字列X = {ABCD}は を返しXSubSequence = {A, B, C, D, AB, AC, AD, BC, BD, CD, ABC, ABD, BCD, ABCD}ます。順序はもちろん関係ありません。

clear
x = 'ABC';
XSize = length(x);
count = 1;
i=1;

for i=1:XSize
    ZSubSequence{count} = x(i);
    count = count + 1;
    for j=i+1:XSize
        temp = strcat(x(i),x(j));
        ZSubSequence{count} = temp;
        count = count + 1;
        for k=i+2:XSize
            if j ~= k
                temp = strcat(x(i), x(j), x(k));
                ZSubSequence{count} = temp;
                count = count + 1;
            end
        end
    end
end

これをより動的にする方法はありますXか?

4

2 に答える 2

0

これでうまくいくはずです。ループが 1 つしかない (ネストがない) ため、かなり高速です。

x = 'ABCD';
n = length(x);
subseq = x.';
for ii = 2:n
  subseq = strvcat(subseq, x(nchoosek(1:n,ii)));
end
subseq_deblanked = deblank(mat2cell(subseq, ones(size(subseq,1),1), n));

結果は次のとおりです。

  • subseq: 各行に空白で埋められたサブシーケンスが含まれる char 行列。
  • subseq_deblanked: 指定したとおり、空白が削除された文字列のセル配列
于 2013-10-13T01:46:10.767 に答える