已知有两个随机排序向量( A和B)。假设每个向量里面都是十五个元素, 数值为1到15
第一步:构造一个C向量:用A向量减去B向量中所有元素求绝对值。
第二步:找到C向量中最大的元素。如果只有一个最大元素,则将A,B向量中与C向量中相同位置的元素移除, 得到A_1 和 B_1
如果有两个以上最大元素,则比较与C中最大元素位置相同的A向量和B向量对应元素,将A,B向量中含有最大值的那一组元素移除,得到A_1 和 B_1
第三步:将一二步骤进行循环,直到A, B 向量中各自剩下一个元素。
第四步:依次标记被移除元素在C中的位置。构造新的向量。
clear
clc
A = randperm(15);
B = randperm(15);
A_1 = A;
B_1 = B;
ii = 1;
while length(A_1) > 1
%% 做差
C = abs(A_1-B_1);
ind = find( C == max(C)) ;
%% 找出下标
[~,ind2] = max(A_1(ind));
[~,ind3] = max(B_1(ind));
if A( ind(ind2) ) >= B( ind(ind3) )
ind = ind(ind2);
else
ind = ind(ind3);
end
%% 保存位置
D(ii) = ind; % 每次移除数据在A中的下标
DA(ii) = A_1(ind); % A中移除数据
DB(ii) = B_1(ind); % B中移除数据
DC(ii) = C(ind); % B中移除数据
ii = ii+1;
%% 移除操作
A_1 = [A_1(1:ind-1) A_1(ind+1:end)];
B_1 = [B_1(1:ind-1) B_1(ind+1:end)];
end
D
DA
DB
DC
结果:
被移除元素在C中的位置
D =
7 9 2 11 6 1 6 5 4 6 5 3 2 1
被移除A中元素
DA =
13 12 4 3 2 10 15 1 11 8 9 7 6 5
被移除B中元素
DB =
1 2 13 11 10 3 9 7 15 4 12 8 5 6
被移除C中元素
DC =
12 10 9 8 8 7 6 6 4 4 3 1 1 1