我需要找到两个已排序整数数组的交集并快速完成。
现在,我正在使用以下代码:
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])
}
}