数据结构重读 - 哈希表

无论是折半查找、二叉排序树查找还是B树,性能都依赖于查找中的比较次数。

一种理想情况是不经过任何比较,一次直接定位索要查找的记录,即:若数据结构中存在关键字和K相等,则其必定在f(K)的存储位置上,我们称这个对应关系f为哈希函数

冲突(Collision):对不同的关键字,可能得到同一哈希地址,即存在key1!=key2,但f(key1)=f(key2)。此时称为冲突或碰撞。

由于在实际应用中,哈希函数都是压缩函数,所以冲突只能尽可能的减少,很难完全避免。

哈希表:根据[......]

继续阅读

后缀数组 - 扫盲篇

一、后缀的定义

后缀数组,做为后缀树的替代品,可以解决很多棘手的字符串处理问题。

长度为n的String[0, 1...n-1]

定义后缀Suffix(i)=sub_string[i...n-1]。

例如字符串aabaaaab,Suffix[1] = abaaaab,Suffix[7]=b。

考虑到空间问题,以及C系列语言中,Suffix[i]非常好求得(&str[i]即可)。一般不会保存Suffix[i]这个数组。

二、后缀数组sa和逆运算数组ran[......]

继续阅读