字典树
哈希树
在各种介绍里的都比较抽象,其实没有那么难,这里进行一个最简单的说明。
在将一个数进行哈希的时候,我曾经写过关于哈希的这么些东西:对于数,当一个质数不够用的时候,可以加上第二个质数,用两个mod来确定该数据在库中的位置。那么这里需要简单的解释一下,对于一个质数x,它的mod有[ 0 .. x - 1 ] x种;所以对于两个质数x和y,能存储的无一重复的数据有 x *y 个,其实也就是开一个x*y的二维数组。但是当数据极其多时,用两个质数去mod显然也是有不够的时候,就还要再加一个。为了便于查找,选取最小的十个质数,也就是2,3,5,7,11,13,17,23,29,31来mod,能包括的数就有10555815270个,已经远超出longint了。就是说,如果我开一个十维数组,那么取到一个数的效率就是O( 1 )!但是那样显然太浪费空间了,就可以用到树。
同一节点中的子节点,从左到右代表不同的余数结果。例如:第二层节点下有三个子节点。那么从左到右分别代表:除3余0,除3余1和除3余2。
对质数的余数决定了处理的路径。例如:某个数来到第二层子节点,那么它要做取余操作,然后再决定从哪个子节点向下搜寻。如果这个数是12那么它需要从第一个子节点向下搜索;如果这个数是7那么它需要从第二个子节点向下搜索;如果这个数是32那么它需要从第三个子节点向下搜索。
这就是一个哈希树了。