2つのソートされた整数配列の共通部分を見つけて、それを非常に高速に実行する必要があります。
現在、次のコードを使用しています。
int i = 0, j = 0;
while (i < arr1.Count && j < arr2.Count)
{
if (arr1[i] < arr2[j])
{
i++;
}
else
{
if (arr2[j] < arr1[i])
{
j++;
}
else
{
intersect.Add(arr2[j]);
j++;
i++;
}
}
}
残念ながら、すべての作業を行うには数時間かかる場合があります。
それをより速くする方法は?SIMD命令が使用されているこの記事を見つけました。.NETでSIMDを使用することは可能ですか?
についてどう思いますか:
http://docs.go-mono.com/index.aspx?link=N:Mono.Simd Mono.SIMD
http://netasm.codeplex.com/ NetASM(asmコードを管理対象に挿入)
およびhttp://www.atrevido.net/blog/PermaLink.aspx?guid=ac03f447-d487-45a6-8119-dc4fa1e932e1のようなもの
編集:
私が数千と言うとき、私は(コードで)フォローすることを意味します
for(var i=0;i<arrCollection1.Count-1;i++)
{
for(var j=i+1;j<arrCollection2.Count;j++)
{
Intersect(arrCollection1[i],arrCollection2[j])
}
}