算法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次,一次插入或命中查找会比较一次被查找键中的每个字符
字符串查找算法
