【发布时间】:2016-04-20 15:21:56
【问题描述】:
我正在编写 MATLAB 代码。数组universe 具有递增的整数(正数,不大于 1000)作为条目(不一定是连续的)。可能是[3,10,20,24,25,100,120,...,1000]universe的长度以200为界。
Candidates 是一个2-by-k 数组,其中包含从universe 中随机选择的条目,因此第一行已排序,并且对于每一列,第一行小于第二行。好像
Candidates = [3, 3, 20;
10,25,24]
为k=3。通常k小于1000。我知道如何在没有for循环的情况下生成Candidates。
Nodes 是一个3-by-(n^2-n) 数组,其中第一行和第二行包含来自universe 的条目,并排序为第一行是主键,第二行是辅助键。第三行没有约束。好像
Nodes = [3, 3, 3, 20, 20, 20, 24, 24, 24, 25, 25, 25;
20, 24, 25, 3, 24, 25, 3, 20, 25, 3, 20, 24;
1, 2, 3, 0, 0, 0, 0, 0, 0, 3, 2, 1]
基本上第一行和第二行是同一个multi-set,而第一行是分组排序,第二行是循环排序。
问题是,我们如何从Nodes 中选择列,以使Nodes(1:2,i) 出现在Candidates 的列之一中?
天真的方式是
Result = [];
k = 3;
n = 4;
j_start = 1;
for i=1:(n^2-n)
for j=j_start:k
if isequal(Nodes(1:2,i),Candidates(:,j))
Result = [Result,Nodes(:,i)];
j_start = j+1;
break;
end;
end;
end;
没有for-loops 我们能做到吗?任何hashtable、contianer等解决方案都可以,只要能提高效率。
【问题讨论】:
标签: arrays performance matlab for-loop hashtable