相关疑难解决方法(0)

字符串的哈希函数

我正在使用C语言编写哈希表,我正在测试字符串的哈希函数.

我尝试过的第一个函数是添加ascii代码并使用modulo(%100)但是我在第一次数据测试时得到的结果很差:140个单词的40个冲突.

最终的输入数据将包含8 000个单词(它是一个文件中的dictionnary存储).哈希表声明为int table [10000]并包含txt文件中单词的位置.

第一个问题是哪个是散列字符串的最佳算法?以及如何确定哈希表的大小?

提前致谢 !

:-)

c algorithm hash dictionary hashtable

109
推荐指数
7
解决办法
19万
查看次数

如何计算CRC32校验和?

也许我只是没有看到它,但CRC32似乎不必要地复杂化,或者在我能在网上找到的任何地方都没有充分解释.

我理解它是消息值的非基于进位的算术除法的余数除以(生成器)多项式,但它的实际实现逃脱了我.

我读过CRC无错误检测算法的指南,我必须说它不是无痛的.它完全超越了理论,但作者从未得到过简单的"就是这样".他确实说过标准CRC32算法的参数是什么,但是他忽略了如何清楚地列出它.

得到我的部分就是当他说"这就是它"然后补充说,"顺便说一句,它可以逆转或以不同的初始条件开始",并没有给出最终方式的明确答案在给出他刚刚添加的所有更改的情况下计算CRC32校验和.

  • 是否有更简单的解释CRC32的计算方法?

我试图在C中编写表格的形式:

for (i = 0; i < 256; i++)
{
    temp = i;

    for (j = 0; j < 8; j++)
    {
        if (temp & 1)
        {
            temp >>= 1;
            temp ^= 0xEDB88320;
        }
        else {temp >>= 1;}
    }
    testcrc[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)

但这似乎产生的价值与我在互联网上其他地方找到的价值观不一致.我可以使用我在网上找到的值,但我想了解它们是如何创建的.

任何帮助清除这些令人难以置信的令人困惑的数字将非常感激.

c crc32 checksum

86
推荐指数
5
解决办法
18万
查看次数

使用CRC32C作为基础可以构建一个"好"的哈希函数吗?

鉴于SSE 4.2(Intel Core i7和i5部分)包含CRC32指令,研究是否可以构建更快的通用散列函数似乎是合理的.根据这个,只有16位CRC32均匀分布.那么还有什么其他转变才能克服这个问题呢?

更新 怎么样?只有16位适合散列值.精细.如果你的桌子是65535或更低,那么很棒.如果不是,则通过Nehalem POPCNT(填充计数)指令运行CRC值以获得设置的位数.然后,将其用作表数组的索引.如果您的表位于1mm条目以南,则此方法有效.我敢打赌,性能最好的哈希函数更便宜/更快.现在GCC 4.5有一个CRC32内在它应该很容易测试...如果我有丰富的业余时间来处理它.

大卫

hash crc32 sse intel

27
推荐指数
2
解决办法
8144
查看次数

标签 统计

c ×2

crc32 ×2

hash ×2

algorithm ×1

checksum ×1

dictionary ×1

hashtable ×1

intel ×1

sse ×1