所以我正在阅读有关哈希表,哈希函数等的内容.我很感兴趣在维基百科上阅读"动态完美哈希"如何使用第二个哈希表作为数据结构来存储特定存储桶中的多个值.
然而,当我遇到如何选择通用散列函数来执行第二个散列表的散列时.任何人都可以解释这个通用哈希函数是如何根据存储在存储桶中的值确定的?我模糊地遵循维基百科的"通用哈希函数"页面中的推理和逻辑,但我很难对它有任何直觉.特别是,这些功能如何保证不发生冲突?或者至少,如果它们被处理掉并且如果检测到碰撞就会产生新的一个,我们怎么知道这可以在实际的时间内完成呢?
瓢虫书的解释好吗?
我想构建一个哈希表,查找从1到15个字节的字节序列(字符串)中的键.
我想存储一个整数值,所以我想一个哈希数组就足够了.我很难概念化如何构造一个哈希函数,因为给定键会给出数组的索引.
任何援助都会受到很多关注.
散列中的最大条目数为:4081*15 + 4081*14 + ... 4081 = 4081((15*(16))/ 2)= 489720.
例如:
int table[489720];
int lookup(unsigned char *key)
{
int index = hash(key);
return table[index];
}
Run Code Online (Sandbox Code Playgroud)
哈希函数有什么好的选择,或者我将如何构建一个?
谢谢.
是否有任何Java库为字符串提供了一个实现(或几个)Locality Preserving Hash函数?
我不知道实际的数学术语(多对一映射是我使用的术语)
这是我的要求:
hash_code = hash_function(element 1, element 2, ...... element n)
Run Code Online (Sandbox Code Playgroud)
我应该能够检索到
bool b = is_valid_hash(hash_code, element x)
Run Code Online (Sandbox Code Playgroud)
该函数is_valid_hash应该能够告诉我天气“ element x”是传入的元素hash_function
这种哈希函数的名称是什么?一个散列应该能够映射到多个元素(而不是冲突)。
我在实现minhashing时遇到问题.在纸上和从阅读中我理解这个概念,但我的问题是排列"技巧".而不是置换集合和值的矩阵,实现的建议是:"选择k(例如100)独立散列函数"然后算法说:
for each row r
for each column c
if c has 1 in row r
for each hash function h_i do
if h_i(r) is a smaller value than M (i, c) then
M(i, c) := h_i(r)
Run Code Online (Sandbox Code Playgroud)
在不同的小例子和教学书中,他们只使用两个或三个哈希函数的形式(h = a*x + b mod p).这很容易找到,但在实践中如何做,我怎样才能找到100个这样的独立功能.
在这里的Java示例中,仅从一个散列函数而不是多散列函数生成散列值,而与行索引无关.区别在哪里?我现在的问题是如何找到这些独立的哈希函数,或者如果只有一个哈希函数的方法如何在算法中处理这些值?
对于具有三个 int 来标识唯一结构的简单 C++ 结构,如果对 a、b 和 c 的实际值了解不多,那么什么可以是一个好的哈希函数实现。我需要使用该结构作为 unordered_map 的键吗?
struct Key {
int a, b, c;
}
Run Code Online (Sandbox Code Playgroud) 首先,大多数声称实现了 的地方bucket sort实际上都在实现counting sort。我的问题是关于Geek Viewpoint和Wikipediabucket sort上的实现。我不太了解/喜欢 Geek Viewpoint 上的哈希函数,也不太了解 Wikipedia 上的哈希函数。有人可以解释一种更简单的方法来为桶排序创建良好的哈希函数吗?普通人可以理解和记住的东西。
我想要一个为一组整数赋值的字典。
例如key是[1 2 3]并且value将具有一定的价值。
问题是[3 2 1]在我的情况下需要相同的处理,因此如果我采用哈希方法,哈希值必须相等。
该套装将有 2 到 10 个项目。
项目的总和通常是固定的,所以我们不能根据总和制作哈希码,这是这里的第一个自然想法。
不是家庭作业,实际上在我的代码中面临这个问题。
这个集合基本上是IEnumerable<int>在 C# 中,所以任何数据结构都可以存储它们。
任何帮助表示赞赏。性能在这里也很重要。
一个直接的想法:我们可以总结一下items^2,已经得到了一些更好的哈希,但我仍然想听听一些想法。
编辑:嗯,真的很抱歉各位,每个人都建议订购,我没想到我需要说实际订购和散列是我当前使用的解决方案,我正在考虑更快的替代方案。
我的导师把这个转发给我们,告诉我们我们只需要谷歌如何写一个哈希函数.我对这方面毫无指导.我们为类编写了一个基本的Hash Table模板,但是我有一个项目,需要约160,000个字符串才能被分类到一个至少有500个桶的表中(我想为速度做更多的事情).
我只是不知道在哪里可以获得关于此的简明易懂的信息.
任何帮助将不胜感激.
我的问题与CS50,pset5的任务有关.对于那些不了解的人,我会试着解释一下.没什么特别的.我只需要创建将输入字典文件的函数(之前写过,该文件中的所有单词都是大写的),其中包含超过20K的单词,并以某种方式对它们进行排序.我已经制作了简单而天真的算法,构建了哈希表,根据他们的第一个字母对单词进行排序.我已经通过CS50的所有检查,所以我的程序运行良好.但与课程相比 - 它太慢了.执行人员的时间是0.1秒,但对于我的 - 5.0s - 7.0s.我可以在此代码中改进哪些内容以加快速度?或者我应该彻底改变一切吗?我没有优化经验,因为刚开始学习.从你们任何人那里学习会很棒=)在此先感谢!
// Some constant values, which are declared before the function
#define LENGTH 46
#define ALPHALENGTH 26
/* Definition of node struct. Nothing special, in fact =) */
typedef struct node {
char word[LENGTH +1];
struct node *next;
} node;
node *hashTable[ALPHALENGTH];
bool load(const char *dictionary) {
FILE *f = fopen(dictionary, "r");
if (f == NULL) {
return false;
}
char word[LENGTH + 1];
int hash = 0;
for (int i = 0; i …Run Code Online (Sandbox Code Playgroud) hash-function ×10
hash ×6
hashtable ×4
algorithm ×3
c ×2
c++ ×2
string ×2
bucket-sort ×1
c# ×1
cs50 ×1
dictionary ×1
hashcode ×1
java ×1
many-to-one ×1
minhash ×1
one-to-many ×1
sorting ×1