c# - C#中位的快速排列

标签 c# algorithm bit-manipulation

我正在实现 Charikar's fast search on a locality sensitive hash我正在寻找一种在 C# 中置换位的快速方法(这种方法可以在 MMIX 中的一次操作中完成)。

要求是:

  • 总是小于 64 位,所以表示可以是一个长整数
  • 随机生成一个排列(这可能会很慢,因为它只完成一次)。我可能会使用 Knuth 洗牌。
  • 多次使用生成的排列,所以这需要很快

我知道 Knuth 对此进行了详细介绍,但我想知道是否有任何特定于 .NET/C# 的解决方案。

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

最佳答案

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

同时.NET也提供了动态编译,可以帮助你高效的重复shuffle。

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

关于c# - C#中位的快速排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379611/

相关文章:

C# ASP.NET Core 开火即忘

c# - 策略模式还是命令模式?

arrays - 从三个数组中找到每个元素的最大乘积

有效地将 8 位整数模式复制为 32 位整数?

c++ - 在 C++ 中连接十六进制值

java - 检查整数是另一个整数的位旋转

c# - 获取通用词典指定值的多个键?

c# - 如何在类之间传递对象

java - 如何检查一天是否位于范围之间?

algorithm - 特定对象/图像识别任务的最佳方法?