2013-04-12 2 views
2

Я ищу наиболее быстрое решение для поиска целого значения. Значение с использованием сортированного целочисленного массива.Быстрый поиск значения целочисленного индекса с использованием массива отсортированного целочисленного массива

Ключи представляют собой целые массивы и имеют фиксированную длину 3 и каждый массив сортируется.
Значение представляет собой целое число.

Мои данные гарантируют, что есть только один ИЛИ два отсортированных массива, которые имеют одинаковый контент. Каждый массив имеет уникальный индекс.

Я пытаюсь найти соответствующие пары массивов.

Моя мысль использовать словарь (я прототипирования в C# и перейти на C++)

Для каждого массива, я буду смотреть в словаре и посмотреть, если он уже есть. Если это так, я удаляю его из словаря. Если я не найду его в словаре, это либо синглтон, либо первый из пары совпадений, поэтому я добавлю его в словарь.

Мой вопрос заключается в том, чтобы дать конкретные гарантии на данные, какой лучший контейнер - учитывая, что скорость является моей главной задачей? Кроме того, будут оценены любые рекомендации относительно соответствующих (быстрых) хэширующих функций или функций сравнения для отсортированных целых массивов.

+0

Если ваш код в конечном итоге должен быть C++, не тратьте время на C#. то, что вы нашли, работающее быстро в C#, не означает, что вы получите тот же результат в C++. – Kelmen

+0

CRC32 - это быстрая хеширующая функция без криптографических гарантий. Кроме того, если вы не ожидаете получить много массивов, имеющих одни и те же первые записи X, вы можете использовать только первые X-записи, чтобы сэкономить время. – Patashu

ответ

2

Когда вы дойдете до C++, мигрировать к этому

http://sparsehash.googlecode.com/svn/trunk/doc/dense_hash_map.html (проект here.)

Это один из самых быстрых реализаций HashMap, которые я столкнуться.

Между тем, для C# эквивалент будет примерно таким: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx Я предполагаю, что есть более быстрая реализация словаря, но поскольку C# не является конечным контейнером, он должен делать все отлично.

Возможно, вы захотите подумать о включении berkeleydb в свой проект. Это ОЧЕНЬ быстро и управляет хранилищем, когда растет набор данных. Он также поддерживается на самых разных платформах.

Смежные вопросы