Быстрое пересечение двух отсортированных целочисленных массивов

Мне нужно найти пересечение двух отсортированных целочисленных массивов и сделать это очень быстро.

Прямо сейчас я использую следующий код:

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

11
задан Neir0 3 June 2012 в 00:16
поделиться