一种高效存储字符串数据的数据结构
nf-prefix-tree的Python项目详细描述
无装饰前缀树(nf_Prefix_Tree)
这是一个没有装饰的前缀树。支持对(可以)键控的字符串进行简单的插入、搜索和基本查询。用C++ 11编写,并有Python包装器。写这篇文章是因为我在python中找不到一个快速、易于安装和使用的基本前缀树。在
安装
C++ +EH3>
为了构建C++,需要有
g++
编译器
此程序使用STL
,因此不需要其他包
Linux和macOS
- 切换到
nf_prefix_tree
目录 - 运行
chmod +x buildAndTest.sh
- 运行
./buildAndTest.sh
如果没有错误发生,你应该可以走了!在
窗户
为了构建,请确保您有g++
编译器并将其添加到path
- 切换到
nf_prefix_tree/src/
目录 - 运行
make
- 如果要运行测试,请切换到
nf_prefix_tree/tests/
目录 - 运行
make
- 运行
./testmain
Python
如果您在pip
上安装并使用macOS,则只需运行pip install nf_prefix_tree
否则,您将需要从源代码构建。首先按照C++的上述步骤进行操作。完成后,请确保您有以下内容
Python 3
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
在
标签:
- 项目
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
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
标签: