Быстрая перестановка битов в C#
Я ввожу быстрый поиск Чарикара на чувствительном к местности хэше и я ищу быстрый метод перестановки битов (то, что можно сделать за одну операцию в MMIX) в C#.
требования:
- всегда меньше 64 бит, поэтому представление может быть длинным целым числом
- случайным образом генерировать перестановку (это может быть медленно, так как это делается только один раз). Я, вероятно, использую перетасовку кнута.
- использовать генерируется перестановка много раз, поэтому это должно быть быстро
Я знаю, что кнут вдается в это подробно, но мне было интересно, есть ли какое-либо решение .NET/C#.
EDIT: я использую .NET версии 3.5.
1 ответов
поскольку C# не предоставляет никаких инструкций по обработке битов, которых у Кнута не было в C, нет, нет решения, специфичного для .NET/C#.
в то же время .NET предлагает динамическую компиляцию, которая поможет вам многократно эффективно выполнять перетасовку.
какая версия .NET? Самый простой подход, вероятно, будет использовать алгоритм кнута и кодировать результирующие операции в Expression<Func<ulong, ulong>>
, затем скомпилируйте результат как Func<long, long>
делегат.