Python中是否有基数/ patricia/critbit树?

And*_*lke 12 python patricia-trie

我有大约10,000个单词用作一组反向索引到大约500,000个文档.两者都被规范化,因此索引是整数(单词id)到一组整数(包含单词的文档的id)的映射.

我的原型使用Python的集合作为明显的数据类型.

当我搜索文档时,我找到了N个搜索词及其相应的N组的列表.我想在这N组的交集中返回一组文档.

Python的"交叉"方法实现为成对缩减.我想我可以通过并行搜索排序集来做得更好,只要该库提供了一种快速的方法来获取i之后的下一个条目.

我一直在寻找类似的东西.几年前我写过PyJudy,但我不再保留它了,我知道要把它带到一个我再次感到舒服的阶段需要做多少工作.我宁愿使用别人经过良好测试的代码,我想要一个支持快速序列化/反序列化的代码.

我找不到任何,或者至少没有任何Python绑定.有一个avltree可以做我想要的,但是因为即使是成对的集合合并需要比我想要的更长的时间,我怀疑我想要用C/C++完成所有的操作.

你知道编写为Python的C/C++扩展的任何radix/patricia/critbit树库吗?

如果不这样,我应该包装哪个最合适的库?在朱迪矩阵网站还没有6年被更新,并且在2007年5月发布的1.0.5(虽然它打造干净所以也许它只是工作.)

(编辑:为了澄清我在API中寻找的东西,我想要的是:

def merge(document_sets):
    probe_i = 0
    probe_set = document_sets[probe_i]
    document_id = GET_FIRST(probe_set)

    while IS_VALID(document_id):
        # See if the document is present in all sets
        for i in range(1, len(document_sets)):
            # dynamically adapt to favor the least matching set
            target_i = (i + probe_i) % len(document_sets)
            target = document_sets[target_i]
            if document_id not in target_set:
                probe_i = target_id
                probe_set = document_sets[probe_i]
                document_id = GET_NEXT(probe_set, document_id)
                break
        else:
            yield document_id
Run Code Online (Sandbox Code Playgroud)

我正在寻找实现GET_NEXT()的东西来返回在给定条目之后发生的下一个条目.这对应于Judy1N和其他Judy阵列的类似条目.

该算法动态地适应数据应优先支持具有低命中的集合.对于我使用的数据类型,性能提高5-10%.))

Try*_*yPy 5

是的,有一些,虽然我不确定它们是否适合您的用例:但似乎它们都不是您要求的.

BioPython在C中实现了Trie实现.

啊,这是一个很好的讨论,包括基准测试:http://bugs.python.org/issue9520

其他(一些非常陈旧的)实现:

http://pypi.python.org/pypi/radix

py-radix是用于存储和检索IPv4和IPv6网络前缀的基数树数据结构的实现.

https://bitbucket.org/markon/patricia-tree/src

patricia-tree的Python实现

http://pypi.python.org/pypi/trie

前缀树(trie)实现.

http://pypi.python.org/pypi/logilab-common/0.50.3

patricia.py:PATRICIA trie的Python实现(用于检索以字母数字编码的信息的实用算法).