C# 中的快速位排列

发布于 2024-10-25 01:45:20 字数 409 浏览 1 评论 0 原文

我正在实施 Charikar 对位置敏感哈希的快速搜索 我正在寻找一种在 C# 中排列位的快速方法(可以在 MMIX 中的一个操作中完成的那种事情)。

要求是:

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

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

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

I'm implementing Charikar's fast search on a locality sensitive hash and I'm looking for a fast method of permuting bits (the kind of thing that can be done in one operation in MMIX) in C#.

The requirements are:

  • Always less than 64 bits, so representation can be a long integer
  • Randomly generate a permutation (this can be slow as it's only done once). I'll probably use a Knuth shuffle.
  • Use the generated permutation many times, so this needs to be fast

I know Knuth goes into this in detail but I was wondering if there was any .NET/C# specific solution.

EDIT: I'm using .NET version 3.5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉酒的小男人 2024-11-01 01:45:20

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

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

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

Since C# doesn't provide any bit-manipulation instructions that Knuth didn't have in C, no, there's no .NET/C#-specific solution.

At the same time, .NET does offer dynamic compilation which will help you repeatedly perform the shuffle efficiently.

What version of .NET? The easiest approach will probably be to use Knuth's algorithm and encode the resulting operations in an Expression<Func<ulong, ulong>>, then compile the result as a Func<long, long> delegate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文