【发布时间】:2009-02-15 02:35:59
【问题描述】:
Judy array 是一种快速数据结构,可以表示一个稀疏数组或一组值。是否有针对 C# 等托管语言的实现?谢谢
【问题讨论】:
标签: c# arrays data-structures managed
Judy array 是一种快速数据结构,可以表示一个稀疏数组或一组值。是否有针对 C# 等托管语言的实现?谢谢
【问题讨论】:
标签: c# arrays data-structures managed
值得注意的是,如果您在谷歌上搜索它们,它们通常被称为 Judy Trees 或 Judy Tries。
我还寻找了一个 .Net 实现,但一无所获。 另外值得注意的是:
该实现主要围绕高效缓存使用而设计,因为此类实现细节可能高度依赖于子结构中使用的某些构造的大小。 .Net 托管实现在这方面可能有些不同。
我可以看到一些重大障碍(我的简短扫描可能还有更多障碍)
您可以使用库并将 C 代码包装在 C++/CLI 中(可能只是在内部保存一个指针,该指针是 c api trie,并且所有 c 调用都指向这个指针)。这将提供一个简单的实现,但本机实现的链接库可能有问题(内存分配也可能有问题)。 您可能还需要在转换时将 .Net 字符串转换为普通的旧字节*(或者直接使用字节)
【讨论】:
Judy 确实不太适合托管语言。我认为您无法使用 SWIG 之类的东西自动完成第一层。
我编写了 PyJudy,最终不得不进行一些重要的 API 更改以适应 Python。比如我在文档中写道:
JudyL 数组将机器字映射到 机器的话。在实践中的话 存储无符号整数或指针。 PyJudy 支持所有四种映射 不同的类。
我已经有几年没有看过代码了,所以我对它的记忆非常模糊。这是我的第一个 Python 扩展库,我记得我曾经编写过一种用于代码生成的模板系统。现在我会使用类似 genshi 的东西。
我无法指出 Judy 的替代品 - 这就是我搜索 Stackoverflow 的原因之一。
编辑:有人告诉我,我在文档中的计时数字与 Judy 的文档建议的不一致,因为 Judy 是为 64 位缓存线开发的,而我的 PowerBook 只有 32 位。
其他一些链接:
最后一个是不同高性能 trie 实现的比较数字。
【讨论】: