短文件名的最佳字符串哈希函数

Tom*_*law 2 c++ string hash

对于像字符串这样的文件名,最好的字符串哈希函数是什么?字符串类似于:

pics/test.pic
maps/test.map
materials/metal.mtl
Run Code Online (Sandbox Code Playgroud)

Des*_*ume 12

如果要散列的数据的性质不需要任何花哨的散列算法,例如文本字符串的性质,您可能需要尝试FNV散列函数.为了纪念创作者,FnV哈希是Fowler/Noll/Vo的缩写,是一种非常快速的算法,已经在许多应用程序中使用,结果非常好,并且为了简单起见,FNV哈希应该是第一个尝试的哈希之一一个应用程序.

unsigned int fnv_hash (void* key, int len)
{
    unsigned char* p = key;
    unsigned int h = 2166136261;
    int i;

    for (i = 0; i < len; i++)
        h = (h*16777619) ^ p[i];

    return h;
}
Run Code Online (Sandbox Code Playgroud)

或者使用MD5算法滚动,这是通用的,因此可以很好地满足您的需求.

  • +1以抵消-1,因为void*将允许它处理任何数据而不仅仅是字符串.虽然const void*const键会更好. (4认同)
  • @DeadMG为什么哈希函数应该专门用于文本,从本质上说,它可以处理任何类型的数据并重用于其他任何事情,而无需为每个目的调整实现? (3认同)