下面我先画一个图来说明字典的构成.
1.假设我们有词典如下
中国
中心
中国人
国家
国民
其中所包含汉字
中 A
国 B
心 C
人 D
家 E
民 F
汉字后面的字母 ABCDEF代表了.此字的字符编码.初始可以默认为.(int)’中’,(提示:char可以转换成int.int4字节,char是两个字节.char的字符编码范围是0-65535.)
于是我们的base[] 就有了如下.
base[中] = base[A] = AV
base[国] = base[B] = BV
base[心] = base[C] = CV
base[人] = base[D] = DV
base[家] = base[E] = EV
base[民] = base[F] = FV
注意这里的 AV,BV….FV,是需要解决冲突的地方,即.在词典的构造初期.他的值是可变的.
基本的字有了?当然没这么简单..词还没有加进去呢.每一个词的从左到又的每一个部分都是一个base节点..完整的词典应该是这样的.
base[中] = base[A] = AV
base[国] = base[B] = BV
base[心] = base[C] = CV
base[人] = base[D] = DV
base[家] = base[E] = EV
base[民] = base[F] = FV
base[base[中]+国] = base[AV+B] = GV
……
base[base[中]+国]+人]=base[GV + D] = HV
……
base[base[国]+民] = base[BV+F] = KV
是不是有点头大了?哈哈.其实就是一堆引用.不停的引用.base[]就算是有了..既然是双数组..肯定还需要一个数组的..那就是check[] . check[]相当简单的. 为了方便阅读我把上面的数组转换成伪数组吧.满足条件如下
base[中] check[中] = -1
base[国] check[国] = -1
base[心] check[心] = -1
base[人] check[人] = -1
base[家] check[家] = -1
base[民] check[民] = -1
base[中国] check[中国] = 中
base[中心] check[中心] = 中
base[中国人] check[中国人] = 中国
base[国家] check[国家] = 国
base[国民] check[国民] = 国
check[]是用来验证这个词是从那个位置转换过来的.他的值是上一个数组的位置.这样就不会出现base[中] + 国 = base [国] + 家 而差生冲突的情况了. 而你在构建词典时需要解决的冲突也就是这些.
唯一一个我能看懂的文档