管理语言的Judy数组

时间:2009-02-15 02:36:00

标签: c# arrays data-structures managed

Judy array是快速数据结构,可以表示稀疏数组或一组值。是否有针对C#等托管语言的实现?感谢

3 个答案:

答案 0 :(得分:16)

值得注意的是,如果您正在使用Google搜索,这些通常被称为Judy Trees或Judy Tries。

我也寻找.Net实现,但一无所获。 另外值得注意的是:

实现是围绕有效的高速缓存使用而设计的,因为这样的实现细节可能高度依赖于子结构内使用的某些构造的大小。在这方面,.Net管理实施可能会有所不同。

我可以看到一些重大的障碍(可能还有更多我的短暂扫描错过了)

  • API有一些相当反的OO方面(例如空指针被视为空树)如此简单,将状态指针移动到LHS并使函数实例方法转换为C ++不起作用。
  • 我看到的子结构的实现大量使用了指针。我无法将这些文件有效地转换为托管语言中的引用。
  • 实施是许多非常复杂的想法的升华,这些想法掩盖了公共api的简单性。
  • 代码库大约是20K行(大部分是复杂的),这不会让我觉得它很简单。

您可以使用库并将C代码包装在C ++ / CLI中(可能只是在内部保存一个指针,该指针是c api trie并且所有c调用都指向此代码)。这将提供简单的实现,但本机实现的链接库可能存在问题(可能是内存分配)。 你也可能需要处理在转换时将.Net字符串转换为普通的旧字节*(或者直接使用字节)

答案 1 :(得分:12)

Judy真的不适合托管语言。我不认为你能够使用类似SWIG的东西并自动完成第一层。

我写了PyJudy,最后我不得不做一些非平凡的API更改以适应Python。例如,我在文档中写道:

  

JudyL数组将机器字映射到   机器字。在实践中的话   存储无符号整数或指针。   PyJudy支持所有四个映射   不同的类。

  • pyjudy.JudyLIntInt - 无符号地图 整数键到无符号整数 值
  • pyjudy.JudyLIntObj - 无符号地图 Python对象值的整数键
  • pyjudy.JudyLObjInt - 地图Python 对象键到无符号整数 值
  • pyjudy.JudyLObjObj - 地图Python Python对象值的对象键

我几年没看过这段代码所以我对它的回忆非常朦胧。这是我的第一个Python扩展库,我记得我将一种用于代码生成的模板系统整合在一起。现在我会用像genshi这样的东西。

我不能指出Judy的替代品 - 这就是我搜索Stackoverflow的原因之一。

编辑:我被告知我的文档中的时间数字与Judy的文档建议不同,因为Judy是为64位缓存行开发的,而我的PowerBook只有32位。

其他一些链接:

最后一个具有不同高性能trie实现的比较数字。

答案 2 :(得分:2)

这比我想象的更棘手。 PyJudy可能值得一看,Tie::Judy也是如此。 Softpedia上有一些东西,Ruby-ish。麻烦的是,这些都不是.NET专门的。