Мне нужно найти пересечение двух отсортированных целочисленных массивов и сделать это очень быстро.
Прямо сейчас я использую следующий код:
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.SimdMono.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