我正在实现 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/