За каждый день мы имеем около 50 000 экземпляров структуры данных (это может в конечном счете расти, чтобы быть намного больше), что инкапсулировать следующее:Алгоритм для сопоставления списков целых
DateTime AsOfDate;
int key;
List<int> values; // list of distinct integers
Это, вероятно, не имеет значения, но list values
- это список различных целых чисел с тем свойством, что для данного значения AsOfDate
объединение values
по всем значениям key
создает список различных целых чисел. То есть целое число не появляется в двух разных списках values
в тот же день.
Списки обычно содержат очень мало элементов (от одного до пяти), но иногда до пятидесяти элементов.
Приведенные смежные дни мы пытаемся найти экземпляры этих объектов, значения которых равны key
в течение двух дней, но в списке values
содержатся одинаковые целые числа.
Мы используем следующий алгоритм. Преобразование списка values
в строку через
string signature = String.Join("|", values.OrderBy(n => n).ToArray());
затем хэш signature
в целое число, порядок получившиеся списки хеш-кодов (один лист на каждый день), пройти через два списка в поисках совпадений, а затем проверить, если соответствующие ключи отличаются. (Также проверьте связанные списки, чтобы убедиться, что у нас не было хеш-коллизии.)
Есть ли лучший способ?
Какой язык? Он может иметь полезный встроенный – awithrow
@awithrow It's C#. Предполагается из приведенного кода. – Gant
@awithrow: Хорошая точка. Я пытался быть агностиком языка, но мы кодируем в C# на .NET 3.5 SP1. – jason