暴击位树是否可以空间高效地存储一组非前缀的字符串?

时间:2015-11-09 15:43:35

标签: data-structures trie

The standard description of a crit-bit tree显示了如何使用每个节点仅使用三个机器字来实现一个:长度,左指针,右指针。但是,此编码仅对存储一组无前缀字符串有效;它无法对{"a", "aa", "aaa"}之类的集进行编码。是否存在允许存储任何字符串集同时保持节点较小的变体?

显然,任何一组字符串都可以通过将它们填充到相同的长度而无前缀,但这会浪费空间,除非它可以隐式完成,并且最长字符串的长度可能事先不知道。

1 个答案:

答案 0 :(得分:0)

可以在此处找到关于暴击位树的更好描述:http://code.google.com/p/radixtree/。 IMO暴击位树不限于无前缀字符串集。你可以试试这个功能

unsigned int bit(size_t pos, unsigned char const* k, size_t klen) {
  if (pos/(CHAR_BIT+1)>=klen) return 0;
  if (pos%(CHAR_BIT+1)==0) return 1;
  return (((unsigned int)k[pos/(CHAR_BIT+1)])>>(CHAR_BIT-pos%(CHAR_BIT+1)))&(unsigned int)1;
}

来自卡丁车树:http://code.dogmap.org/kart/