※ 引述《sonia6121 (sonia)》之铭言:
: 这是我第一次发文发问,如有冒犯错误请各位大大们纠正我
: 我是matlab新手刚接触不久
: 最近在写一个程式
: 我的目的是要把txt档里面的值取出来
: [0111
: 00101
: 11011
: ...
: ...共26行]
: 每行两两相比总共会有325种组合
: 长度相同的直接做xor(ex:00101 )xor=11110然后再做sum取出1+1+1+1+0=4这个值
: 11011
: 假如长度不同就要分别用前段跟后段取xor在相加(ex:0111 )xor的作法(0111)=0101
: 00101 0010
: 做sum=2再和xor(0111)=0010 sum=1 相加=3
: 0101
% data generation
M = cell(26, 1);
for i = 1:26
M{i, 1} = randi(2, randi(2,1,1)+3, 1)' - 1;
end
% total combinations
combns = nchoosek(1:size(M, 1), 2);
% results
dfree = zeros(size(combns, 1), 1);
% computation
for i = 1:size(combns, 1)
% temporary variables (可以不用,只是程式易读性低)
a = M{combns(i, 1), 1};
b = M{combns(i, 2), 1};
len_a = length(a);
len_b = length(b);
% if the lengths are equal
if len_a == len_b
dfree(i) = sum(xor(a, b));
else
% nonequal condition
if len_a > len_b
dfree(i) = sum(xor(a(1:len_b), b)) + ...
sum(xor(a((len_a-len_b+1):end), b));
else
dfree(i) = sum(xor(a, b(1:len_a))) + ...
sum(xor(a, b((len_b-len_a+1):end)));
end
end
end