Мне нужно найти пересечение двух отсортированных целых массивов и сделать это очень быстро.
Сейчас я использую следующий код:
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. Можно ли использовать SIMD в .NET?
О чем вы думаете:
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
EDIT:
Когда я говорю, что тысячи я имею в виду следующее (в коде)
for(var i=0;i<arrCollection1.Count-1;i++)
{
for(var j=i+1;j<arrCollection2.Count;j++)
{
Intersect(arrCollection1[i],arrCollection2[j])
}
}