算法5.5 三向单词查找树
算法描述
- R向查找树每个结点保存R条链接,会有大量空间损耗,而三向单词查找函数TST,采用类似BST的结构,每个结点一个字符,三条链接,一个值,链接对应小于,等于,大于值的结点,TST中字符是显示保存的
实现
public class TST<Value>{
private Node root;
private class Node{
char c;
Node left, mid, right;//三个子树
Value val;//显示保存字符
}
public Value get(String key){
Node x = get(root, key, 0);
if(x == null) return null;
return (Value)x.val;
}
private Value get(Node x, String key, int d){
if(x == null) return null;
char c = key.charAt[d];
if(c < x.c) return get(x.left, key, d+1);
else if(c > x.c) return get(x.right, key, d+1);
else if(d < key.length()-1) return get(x.mid, key, d+1);
else return x;
}
public void put(String key, Value val){ root = put(root, key, val, 0);}
private Node put(Node x, String key, Value val, int d){
char c = key.charAt(d);
if(x == null){ x = new Node(); x.c = c};
if(c < x.c) x.left = put(x.left, key, val, d);
else if(c > x.c) x.left = put(x.right, key, val, d);
else if(d < key.length()-1) put(x.mid, key, d+1);
else x.val = val;//键存在,更新值
return x;
}
}
算法分析
- N个平均长度w的字符串构造的TST中链接总数在3N到3Nw之间
- 查找成本:未命中查找平均比较~lnN次,一次插入或命中查找会比较一次被查找键中的每个字符
字符串查找算法