我在python中实现了一个Trie。到目前为止,我已经遇到了两种不同的方法来实现它:
char - 存储角色
is_end - 存储单词结尾(true或false)
prefix_count - 存储具有当前前缀
的单词数child - 节点类型dict(用于存储其他节点,即26个字母)
class Node(object):
def __init__(self):
self.char = ''
self.word = ''
self.is_end = False
self.prefix_count = 0
self.child = {}
words = {'foo', 'bar', 'baz', 'barz'}
{'b': {'a': {'r': {'_end_': '_end_', 'z': {'_end_': '_end_'}}, 'z': {'_end_': '_end_'}}}, 'f': {'o': {'o': {'_end_': '_end_'}}}}
哪个是高效且标准的数据结构,对于大词汇数据集上的遍历和其他trie操作,内存效率高,速度快?
答案 0 :(得分:1)
为什么不两者兼而有之?就在昨天,我正在实现一个类似的数据结构,用于存储和检索对象的层次结构,并考虑了这种确切的情况。使用带有子字典的Node对象结束。 作为对象的主节点允许您使用自定义方法进行打印或获取内容,如果需要,您甚至可以进行延迟初始化(您提到了大数据集吗?)
if(sortRunner == 1) {
int swap;
for(int i = 0; i < list.length - 1; i++) {
for(int j = 0; j < list.length - i -1; j++){
if(list[j] > list[j+1]){
swap = list[j];
list[j] = list[j+1];
list[j+1] = swap;
}
System.out.print(list[j]);
}
System.out.println();
}
System.out.print("\nThe bubble sort from the numbers are: ");
for (int k = 0; k < list.length; k++){
System.out.print(list[k] + " ");
}
System.out.println();
} // End bubble sorting here
答案 1 :(得分:1)
直接替换将嵌套list
;
然而[可以说]更多Pythonic,更紧凑的内存,因此更快的查找将是嵌套tuple
。
当然,更新这样的trie会变成logN,因为你必须重新创建每个祖先节点。但是,如果您的查找比更新频繁得多,那么它可能是值得的。
答案 2 :(得分:-3)
Trie在空间复杂性方面失败了。 Trie倾向于使用大量内存进行处理和操作。但是为了避免这个问题,有一种数据结构被称为简洁的数据结构。试着在这里实现。
有关详细信息,请参阅here。