一种高效存储字符串数据的数据结构

nf-prefix-tree的Python项目详细描述


无装饰前缀树(nf_Prefix_Tree)

这是一个没有装饰的前缀树。支持对(可以)键控的字符串进行简单的插入、搜索和基本查询。用C++ 11编写,并有Python包装器。写这篇文章是因为我在python中找不到一个快速、易于安装和使用的基本前缀树。在

安装

C++ +EH3>

为了构建C++,需要有

    C++ 11
  1. g++编译器

此程序使用STL,因此不需要其他包

Linux和macOS

  1. 切换到nf_prefix_tree目录
  2. 运行chmod +x buildAndTest.sh
  3. 运行./buildAndTest.sh

如果没有错误发生,你应该可以走了!在

窗户

为了构建,请确保您有g++编译器并将其添加到path

  1. 切换到nf_prefix_tree/src/目录
  2. 运行make
  3. 如果要运行测试,请切换到nf_prefix_tree/tests/目录
  4. 运行make
  5. 运行./testmain

Python

如果您在pip上安装并使用macOS,则只需运行pip install nf_prefix_tree

否则,您将需要从源代码构建。首先按照C++的上述步骤进行操作。完成后,请确保您有以下内容

  1. Python 3
  2. Cython

一旦有了这些,就进入python_bindings目录。运行python3 setup.py build_ext --inplace。现在可以在同一目录中执行from nf_prefix_tree import PyPrefixTree!在

示例

C++ +EH3>
#include"PrefixTree.hpp"intmain(){PrefixTree*t=newPrefixTree();t->addSequence("ABCDEFG","Key1");t->addSequence("ABCDEFG","Key2");t->addSequence("ABCXYZ","Key3");t->addSequence("LMNOP","Key4");t->show();t->show(2);}

输出:

^{pr2}$

Python

fromnf_prefix_treeimportPyPrefixTreet=PyPrefixTree()t.addSequence('ABCDE','key1')t.addSequence('ABCXY','key2')t.addSequence('ZYAPW','key3')t.show()

输出:

root
|-> Sequence: A	 keys: key1, key2, 
 |-> Sequence: AB	 keys: key1, key2, 
  |-> Sequence: ABC	 keys: key1, key2, 
   |-> Sequence: ABCD	 keys: key1, 
    |-> Sequence: ABCDE	 keys: key1, 
   |-> Sequence: ABCX	 keys: key2, 
    |-> Sequence: ABCXY	 keys: key2, 
|-> Sequence: Z	 keys: key3, 
 |-> Sequence: ZY	 keys: key3, 
  |-> Sequence: ZYA	 keys: key3, 
   |-> Sequence: ZYAP	 keys: key3, 
    |-> Sequence: ZYAPW	 keys: key3, 

美国石油学会

C++ +EH3>
  • PrefixTree()
    • 前缀树的构造函数
  • void addSequence(sequence, key)
    • 将带有键的序列添加到前缀树
    • sequence - std::string要通过树压缩的序列
    • key - std::string此序列的键。如果不需要,将序列设为空字符串
  • bool hasPrefix(prefix)
    • 检查输入序列是否在树中
    • prefix - std::string要查找的前缀
  • std::vector<std::string> getKeysWithPrefix(prefix)
    • 获取与前缀关联的所有键。如果前缀不在树中,则返回空向量
    • prefix - std::string要查找的前缀
  • void show(level=-1)
    • 在控制台中将树向下显示到指定级别
    • level -- int打印树的下一级。如果要打印整个树,请保留为-1

Python

  • PyPrefixTree()
    • 前缀树的构造函数
  • addSequence(sequence, key) -> None
    • 将带有键的序列添加到前缀树
    • sequence - str要通过树压缩的序列
    • key - str此序列的键。如果不需要,制造
  • hasPrefix(prefix) -> bool
    • 检查输入序列是否在树中
    • prefix - str要查找的前缀
    • 如果找到True,则返回prefix,否则返回False
  • getKeysWithPrefix(prefix) -> list
    • 获取与前缀关联的所有键
    • prefix - str要查找的前缀
    • 返回所有键的list,属于str。^如果前缀不在树中,则返回{}
  • show(level=-1)
    • 在控制台中将树向下显示到指定级别
    • level -- int打印树的下一级。如果要打印整个树,请保留为-1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ZK我们可以保存Windows组件状态吗?   java中的xpath比较路径   将字符串解析为长字符串时出现java数字格式异常   Apache CXF中获取异常中的服务器stacktrace的java问题   java我正在用j2me编程,我需要用丰富的格式编写文本以获得帮助屏幕   Android Room数据库中id字段的java名称字段约定   对于API9,java ArrayList<HashMap<String,String>>无法正确转换为JSONArray   api是最初的Java理想死了吗?   opencv java中的python掩码图像   java为什么在实现克隆方法时返回super。克隆()不是此克隆()   java HttpUrlConnection是否存在并发惩罚?   有没有办法将java arraylist对象复制到codemodel生成的源代码中?