Быстрая перестановка битов в C # - PullRequest
7 голосов
/ 21 марта 2011

Я реализую Быстрый поиск Чарикара по хэшу, чувствительному к локальности , и я ищу быстрый метод перестановки битов (то, что можно сделать за одну операцию в MMIX) в C #.

Требования:

  • Всегда меньше 64 бит, поэтому представление может быть длинным целым числом
  • Произвольно генерировать перестановку (это может быть медленно, так каксделано только один раз).Я, вероятно, буду использовать перемешивание Кнута.
  • Использовать сгенерированную перестановку много раз, поэтому это должно быть быстро

Я знаю, что Кнут подробно разбирается в этом, но мне было интересно,было какое-то конкретное решение для .NET / C #.

РЕДАКТИРОВАТЬ: Я использую .NET версии 3.5.

1 Ответ

3 голосов
/ 21 марта 2011

Поскольку в C # нет инструкций по обработке битов, которых у Кнута не было в C, нет, нет решения, специфичного для .NET / C #.

В то же время .NET предлагает динамическую компиляцию, которая поможет вам многократно выполнять перемешивание эффективно.

Какая версия .NET? Вероятно, самый простой подход - использовать алгоритм Кнута и кодировать полученные операции в Expression<Func<ulong, ulong>>, а затем скомпилировать результат как Func<long, long> делегат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...