The standard description of a crit-bit tree显示了如何使用每个节点仅使用三个机器字来实现一个:长度,左指针,右指针。但是,此编码仅对存储一组无前缀字符串有效;它无法对{"a", "aa", "aaa"}
之类的集进行编码。是否存在允许存储任何字符串集同时保持节点较小的变体?
显然,任何一组字符串都可以通过将它们填充到相同的长度而无前缀,但这会浪费空间,除非它可以隐式完成,并且最长字符串的长度可能事先不知道。
答案 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/