Generate all possible subset from a character array in MATLAB

2 次查看(过去 30 天)
I need to generate all possible subset from a character array with reduced execution time. Actual input is of length '500' characters and maximum length of subset is limited to 20 characters.
For example:
input='ABCA';
output ='A', 'B', 'C', 'AB', 'BC', 'CA', 'ABC', 'BCA', 'ABCA'
  4 个评论
Walter Roberson
Walter Roberson 2019-3-30
Could you confirm that length(unique(input)) is 500? For example 500 Chinese ideographs? As opposed to length(input) being 500 but the number of unique being much smaller?

请先登录,再进行评论。

回答(2 个)

Sangeetha R
Sangeetha R 2019-3-30
编辑:Sangeetha R 2019-3-30
Answer that i found is given below,
tic
input='MERASLIQKAKLAEQAERYEDMAAFMKGAVEKGEELSCEERNLLSVAYKNVVGGQRAAWRVLSSIEQKSNEEGSEEKGPEVREYRVFYLKMKGDYYRYLAEVATGDDKKRIIDSARSAYQEAMDISKKEMPPTNPIRLGLALNFSVFHYEIANSPEEAISLAKTTFDEAMADLHTLSEDSYKDSTLIMQLLRDNLTLWTADNAGEEGGEAPQEPQSMERASLIQKAKLAEQAERYEDMAAFMKGAVEKGEELSCEERNLLSVAYKNVVGGQRAAWRVLSSIEQKSNEEGSEEKGPEVREYRVFYLKMKGDYYRYLAEVATGDDKKRIIDSARSAYQEAMDISKKEMPPTNPIRLGLALNFSVFHYEIANSPEEAISLAKTTFDEAMADLHTLSEDSYKDSTLIMQLLRDNLTLWTADNAGEEGGEAPQEPQSSEDSYKDSTLIMQLLRDNLTLWTADNAGEEGGEAPQEPQSMERASLIQKAKLAEQAERYEDMAAFMKGAVEKGEELSCEERNLLSVAYKNVVGGQRAAW';
l=length(input);
begn=1;
count=1;
output_seq=cell(1000,1);%preallocating
for i=1:l
if(begn<=l)
[count,output_seq]=pep(begn,l,input,count,output_seq);
begn=begn+1;
end
end
output_unique=unique(output_seq);
toc
function [count,output_seq]=pep(b,l,input,count,output_seq)
for i=0:l
if(b+i-b<21)
if(b+i<=l)
p = input(b:b+i);
output_seq{count}=p;
count=count+1;
end
end
end
end

Walter Roberson
Walter Roberson 2019-3-30
Consider
[S(1:end-2);
S(2:end-1);
S(3:end)].'
Now unique rows

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

产品


版本

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by