我正在寫MATLAB代碼。數組universe
具有遞增的整數(正數,不大於1000)作爲條目(不一定是連續的)。這可能是[3,10,20,24,25,100,120,...,1000]
的universe
長度由200如何在不使用for-loop的情況下選擇所需的元素?
Candidates
界定爲包含隨機選擇的條目的2-by-k
陣列從universe
,使得第一行進行排序,並針對各列中,第一行比所述第二行更小。它看起來像
Candidates = [3, 3, 20;
10,25,24]
對於k=3
。通常k
小於1000.我知道如何在沒有for-loop的情況下生成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]
基本上第一行和第二行有同樣多套,而第一行是通過分組和第二行通過循環來分類排序。
問題是,我們如何從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)都是受歡迎的。