【问题标题】:How can I hash multiple unordered objects? (strings)如何散列多个无序对象? (字符串)
【发布时间】:2017-07-03 19:46:03
【问题描述】:

我正在寻找一种从一组字符串中获取哈希值的方法,这样无论字符串的顺序如何,都会返回相同的哈希值。

我猜一种方法是在散列之前对它们进行排序。但我想知道是否有更优雅的东西。

【问题讨论】:

  • 您可以对每个字符串进行哈希处理,然后对哈希进行排序,然后对哈希进行哈希处理。
  • 另一种可能性是通过一些交换运算符(即加法,乘法,XOR,...)简单地组合哈希值,这可能比首先对元素进行排序更快。如果我没有遇到太多的碰撞,这通常是我在这种情况下的首选解决方案。

标签: hashtable hash-function


【解决方案1】:

假设您的字符串仅包含小写英文字母 (a-z),这样

  • 洛雷姆
  • ipsum
  • 坐下
  • 阿美特

在这里你可以为每一列做简单的字符直方图。字符将是索引,数组值将是该字符的编号。喜欢

vector <int> _1st_column_hist (26,0);
_1st_col_hist['l' - 'a'] => 1
_1st_col_hist['i' - 'a'] => 1
_1st_col_hist['s' - 'a'] => 1
_1st_col_hist['a' - 'a'] => 1

//other values will be 0.

对其他列(或字母索引)执行相同的操作。最后,您将获得 2D 矢量。澄清一下:

vector< vector<int> > my_vector( 0, vector<int> (26, 0));
my_vector[1][25] => is the number of 'z' in second position of all words in your group.

好的!哈希表在哪里?我必须说您的问题与直方图有关,而不是散列。

这个二维向量用于一组字符串。我假设您有多个组,因此您的向量需要另一个维度。要检查我们的查找表是否已经有新的字符串组,您需要编写 group_of_strings_2_histcompare_hist_with_old_ones 函数 并比较查找表的每个元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-22
    • 2022-01-16
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    相关资源
    最近更新 更多