C # самый быстрый пересечение двух наборов отсортированных чисел

Я вычисляю пересечение двух наборов отсортированных чисел в важной по времени части моего приложения. Этот расчет является самым большим узким местом всего приложения, поэтому мне нужно его ускорить.

Я попробовал несколько простых вариантов и сейчас использую это:

foreach (var index in firstSet)
{
    if (secondSet.BinarySearch(index) < 0)
        continue;

    //do stuff
}

Оба firstSet и ] secondSet относятся к типу List.

Я также пробовал использовать LINQ:

var intersection = firstSet.Where(t => secondSet.BinarySearch(t) >= 0).ToList();

, а затем перебирал пересечение .

Но поскольку оба этих набора отсортированы, я чувствую, что есть лучший способ сделать это. Обратите внимание, что я не могу удалять элементы из наборов, чтобы уменьшить их. Оба набора обычно состоят примерно из 50 предметов каждый.

Пожалуйста, помогите мне, ребята, так как у меня нет много времени, чтобы сделать это. Спасибо.

ПРИМЕЧАНИЕ: Я делаю это примерно 5,3 миллиона раз. Итак, каждая микросекунда на счету.

11
задан gligoran 7 September 2014 в 11:02
поделиться