问题标签 [string-hashing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
265 浏览

java - 我应该如何为这些要求实现字符串散列函数?

好的,我需要一个散列函数来满足以下要求。这个想法是能够将属于相同逻辑结构但存储在文件系统的不同物理区域中的目录链接在一起。

我需要用 Java 实现它,它必须在执行会话中保持一致,并且可以返回很长的值。

我将散列目录名称/字符串。这应该可以工作,"somefolder1"并且"somefolder2"将返回不同的哈希值,就像"JJK""JJL". 我也想知道什么时候可能发生冲突。

有什么建议么?

谢谢

0 投票
4 回答
23120 浏览

hash - djb2 哈希函数

我正在使用 djb2 算法为字符串生成哈希键,如下所示

现在每个循环都有两个大数的乘法,在字符串的第 5 个字符的第 4 个字符经过一段时间后,随着哈希值变得很大,溢出

什么是重构以使哈希值不会溢出并且哈希也正确发生的正确方法是什么

0 投票
2 回答
12056 浏览

algorithm - 哈希函数产生30个字符的代码?

我需要将一条消息散列成一个 30 个字符的字符串。对于这种用法,最好和最安全的哈希函数是什么?

0 投票
2 回答
206 浏览

hash - 使用哈希检查字符串匹配,而不是仔细检查整个字符串

我正在尝试尽快检查两个字符串是否相同。我可以在不比较整个字符串的情况下保护自己免受哈希冲突吗?

我有一个由字符串键入的项目缓存。我存储字符串的哈希值、字符串的长度和字符串本身。(我目前正在使用djb2来生成哈希。)

为了检查输入字符串是否与缓存中的项目匹配,我计算输入的哈希值,并将其与存储的哈希值进行比较。如果匹配,我将输入的长度(作为计算哈希的副作用得到)与存储的长度进行比较。最后,如果匹配,我会对输入和存储的字符串进行完整的字符串比较。

是否有必要进行完整的字符串比较?例如,是否有一种字符串散列算法可以在数学上保证没有两个相同长度的字符串会生成相同的散列?如果不是,如果前 N 个字符中的任何一个不同,算法是否可以保证两个相同长度的不同字符串将生成不同的哈希码?

基本上,任何在字符串不同时提供 O(1) 性能但在匹配时优于 O(n) 性能的字符串比较方案将比我现在所做的有所改进。

0 投票
1 回答
122 浏览

caching - 基于哈希字符缓存文件时,为什么使用最后一个字符而不是第一个字符?

我已经看到它建议您通过使用散列文件名的最后一个字符在缓存中获得更好的“负载平衡” - 例如,nginx 就是这样做的(代理缓存模块)。谁能解释为什么使用最后一个字符?

编辑:

例如:

“似乎”足够随机。

0 投票
4 回答
1547 浏览

c++ - 针对查找优化的哈希图

我正在寻找一些具有固定键(在初始化期间固定)并且查找速度更快的地图。它可能不支持以后添加/更新元素。是否有一些算法可以查看键列表并制定一个函数,以便以后查找更快。就我而言,键是字符串。

更新:

编译时不知道密钥。但是在应用程序的初始化期间。以后不会有任何进一步的插入,但会有很多查找。所以我想要优化查找。

0 投票
5 回答
13298 浏览

java - Java中的散列键

在 java 中,当我使用字符串作为 Hashmap 的键时,我得到的结果与我使用字符串哈希码作为 HashMap 中的键时的结果略有不同。

有什么见解吗?

0 投票
1 回答
502 浏览

c# - 如何生成所需大小(例如 8096)长位哈希码 - c#

有很多散列方法,但我想用 8096 位长组成位散列。有可能实现这一目标吗?

例如,当我输入“House”时,我应该得到如下字符串:

我怎样才能做到这一点(使用 C# 4.0 可以)?

如果你想知道我为什么需要这样的东西,我需要它来比较签名文件和向量空间模型。

0 投票
2 回答
85324 浏览

c - 简单的哈希函数

我正在尝试编写一个使用哈希表来存储不同单词的C程序,我可以使用一些帮助。

首先,我创建一个质数大小的哈希表,它与我必须存储的单词数最接近,然后我使用哈希函数为每个单词找到一个地址。我从最简单的函数开始,将字母加在一起,最终导致 88% 的冲突。然后我开始试验这个函数,发现无论我把它改成什么,碰撞都不会低于 35%。现在我正在使用

这只是我想出的一个随机函数,但它给了我最好的结果——大约 35% 的碰撞。

过去几个小时我一直在阅读有关哈希函数的文章,我尝试使用一些简单的,例如 djb2,但所有这些都给了我更糟糕的结果。(djb2 导致 37% 的冲突,即'差很多,但我期待更好而不是更糟)我也不知道如何使用其他一些更复杂的,比如 murmur2,因为我不知道参数是什么(key,len , 种子) 他们接受的是。

即使使用 djb2,发生超过 35% 的冲突是否正常,还是我做错了什么?什么是 key、len 和 seed 值?

0 投票
2 回答
104 浏览

php - 通过 php 进行文本简化以简化搜索

我正在开发一个允许在同一个城市搜索人的功能。

由于我不期待使用地理位置,我让用户输入他们的城市。因此,为了让人们找到彼此,他们需要输入相同的城市名称。

现在,我正在使用区分大小写的数据库,因此字符串需要匹配,所以我想有一个简化过程,如下所示:

接下来我期待做的是确保输入“new yprk”作为拼写错误的人仍然能够找到彼此。

我不想重新发明轮子,所以,是否有一个脚本,你知道那种“散列”单词,以便稍微不同的单词算作相同?

提前致谢。