C#中位的快速排列

我正在实现Charikar对局部敏感散列的快速搜索,并且正在寻找一种在C#中快速排列位(在MMIX中可以在一个操作中完成的事情)的方法。

要求是:

  • 总是小于64位,因此表示可以是一个长整数
  • 随机生成一个排列(这可能很慢,因为它只能执行一次)。 我可能会使用Knuth shuffle。
  • 使用生成的排列很多次,所以这需要很快
  • 我知道Knuth详细介绍了这一点,但我想知道是否有任何.NET / C#特定的解决方案。

    编辑:我使用.NET版本3.5。


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

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

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

    链接地址: http://www.djcxy.com/p/5755.html

    上一篇: Fast permutation of bits in C#

    下一篇: Is there any design pattern for creating a wizard?