解耦
获取字节有多少位1,查表法,0-255对应输出位数,2.一个byte分两半,
用第一个字母了一个散列hash
(数据量大,上百才划算)
FNV hash FNV能快速hash大量数据并保持较小的冲突率,它的高度分散使它适用于hash一些非常相近的字符串,比如URL,hostname,文件名,text,IP地址等。
hash出来的值很大,需要进行一次取模
,缺点存在碰撞及空数据造成浪费
unsigned int FNVHash(char* str, unsigned int len)
{
const unsigned int fnv_prime = 0x811C9DC5;
unsigned int hash = 0;
unsigned int i = 0;
for(i = 0; i < len; str++, i++)
{
hash *= fnv_prime;
hash ^= (*str);
}
return hash;
}
通用化:
底层为1个树,插入一个值,直到\n,并记录该界面的全局变量。改全局变量每次+1
每当找一个值的时候,通过树,拿到该全局变量的值。
然后该全局变量的值作为数据下标。直接返回对应数组下标的值。
//atom是在字符串输入的时候才增加