C#中位的快速置换

dao*_*udc 7 c# algorithm bit-manipulation

我正在实施Charikar对局部敏感哈希的快速搜索,而我正在寻找一种快速排列位的方法(在MMIX中可以在一次操作中完成的那种事情).

要求是:

  • 始终小于64位,因此表示可以是长整数
  • 随机生成排列(这可能很慢,因为它只进行一次).我可能会使用Knuth shuffle.
  • 多次使用生成的排列,因此需要快速

我知道Knuth详细介绍了这个,但我想知道是否有任何.NET/C#特定的解决方案.

编辑:我使用的是.NET 3.5版.

Ben*_*igt 3

由于 C# 不提供 Knuth 在 C 中没有的任何位操作指令,因此不存在特定于 .NET/C# 的解决方案。

同时,.NET确实提供了动态编译,这将帮助您高效地重复执行shuffle。

.NET 是什么版本?最简单的方法可能是使用 Knuth 算法并将结果操作编码在 中Expression<Func<ulong, ulong>>,然后将结果编译为Func<long, long>委托。