Function 在设计哈希函数时,你会考虑哪些问题?

Function 在设计哈希函数时,你会考虑哪些问题?,function,hash,Function,Hash,我不是在寻找有关散列信息的链接 我不是在寻找世界上最伟大的散列函数 我对小故事感兴趣 您正在处理的问题域 您正在处理的数据的性质 为数据设计哈希函数的过程是什么 你对你的结果有多高兴 你从经验中学到的对其他人可能有价值的东西 < P>第一个问题是一个已建立的算法是否符合我的要求。 < P>第一个问题是,一个已建立的算法是否符合我的要求。< /P> < P> >我将第二个亚当所说的:不要重新创建哈希轮< /P> 我唯一一次需要自定义哈希函数是比较有向图是否相等;当两个图不相等时,哈希函数可以非

我不是在寻找有关散列信息的链接

我不是在寻找世界上最伟大的散列函数

我对小故事感兴趣

  • 您正在处理的问题域
  • 您正在处理的数据的性质
  • 为数据设计哈希函数的过程是什么
  • 你对你的结果有多高兴
  • 你从经验中学到的对其他人可能有价值的东西

< P>第一个问题是一个已建立的算法是否符合我的要求。

< P>第一个问题是,一个已建立的算法是否符合我的要求。< /P> < P> >我将第二个亚当所说的:不要重新创建哈希轮< /P>
我唯一一次需要自定义哈希函数是比较有向图是否相等;当两个图不相等时,哈希函数可以非常有效地告诉我(当哈希值匹配时,我仍然必须进行逐点比较才能确定)

我支持Adam所说的:不要重新发明哈希轮


我唯一一次需要自定义哈希函数是比较有向图是否相等;当两个图不相等时,哈希函数可以非常有效地告诉我(当哈希值匹配时,我仍然必须逐点比较才能确定)

进行数据仓库开发。我们有一个大约9000行的维度。正在开发的查询包括一些非常难看的查询

因此,我开始分析维度行。维度行根据列的各种组合进行聚类。集群是从某个键到共享该键的维度行列表的映射。因此,哈希键是列值的元组

在Python中,中间结果如下所示

{ 
    ( (col1, col2), (col3, col4) ) : [ aRow, anotherRow, row3, ... ],
    ( (col1, col2), (col3, col4) ) : [ row1, row2, row3. row4, ... ],
}
从技术上讲,这是一个反向指数

哈希键在构建列值的元组时需要谨慎,部分原因是Python不会使用可变集合(即列表)。更重要的是,元组不是简单的列值平面列表。它们通常是两个元组,试图根据键组合将维度行划分为不相交的子集


从深层来看,散列算法是内置的Python散列。然而,选择密钥并不明显或容易。

进行数据仓库开发。我们有一个大约9000行的维度。正在开发的查询包括一些非常难看的查询

因此,我开始分析维度行。维度行根据列的各种组合进行聚类。集群是从某个键到共享该键的维度行列表的映射。因此,哈希键是列值的元组

在Python中,中间结果如下所示

{ 
    ( (col1, col2), (col3, col4) ) : [ aRow, anotherRow, row3, ... ],
    ( (col1, col2), (col3, col4) ) : [ row1, row2, row3. row4, ... ],
}
从技术上讲,这是一个反向指数

哈希键在构建列值的元组时需要谨慎,部分原因是Python不会使用可变集合(即列表)。更重要的是,元组不是简单的列值平面列表。它们通常是两个元组,试图根据键组合将维度行划分为不相交的子集


从深层来看,散列算法是内置的Python散列。然而,选择密钥并不明显,也不容易。

我想到的第一件事是偷取哈希算法及其代码的最佳位置。如果并且只有当我发现没有合适的算法时,我才使用它们作为创建自己的算法的起点。平心而论,我已经在这个行业工作了7年,从大学开始我就没有创建过自己的哈希算法。
但是,如果我真的创建了自己的算法,最大限度地减少碰撞应该是我要考虑的事情。你可能的价值观是什么?这个函数是否精确地分散了这些值,以便在结果值和原始值之间有一对一的关系。结果值是否真正分散良好。也就是说,他们不都有共同的因素吗?当您执行模运算以使值更小并适合索引集合时,这可能会导致冲突。

我想到的第一件事是窃取哈希算法及其代码的最佳位置。如果并且只有当我发现没有合适的算法时,我才使用它们作为创建自己的算法的起点。平心而论,我已经在这个行业工作了7年,从大学开始我就没有创建过自己的哈希算法。
但是,如果我真的创建了自己的算法,最大限度地减少碰撞应该是我要考虑的事情。你可能的价值观是什么?这个函数是否精确地分散了这些值,以便在结果值和原始值之间有一对一的关系。结果值是否真正分散良好。也就是说,他们不都有共同的因素吗?当您执行模数运算以使值更小并适合索引集合时,这可能会导致冲突。

发明哈希算法很容易。发明一种有效、高效的散列算法并非易事

你应该问问自己:

  • 我真的需要吃杂烩吗
  • 假设我实现了一个标准食谱(例如,高效Java),包括所有相关需求(例如,如果a.equals(b),那么a.hashCode()==b.hashCode())
  • 如果需要比较一个对象的两个实例是否相等,则可能需要提供equals()的实现

    如果一个对象有多个实例需要排序,那么可能需要为compareTo()提供一个实现


    如果有一个自定义对象用作映射的键,那么可能需要提供hashCode()的实现。

    发明哈希算法很容易。发明了一种有效的哈希算法