考鼎录 第二讲 用好写好头文件 第六讲 解耦算法和数据 第十讲 为性能编码

 

 

解耦

获取字节有多少位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是在字符串输入的时候才增加

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_41694204/article/details/129875189