【发布时间】:2015-03-16 08:18:23
【问题描述】:
我正在尝试通过使用字符串的哈希值来节省空间。我有一个很具体的要求,简述如下:
我有两组字符串值,并且在运行时提供了一个值。我需要从第二组中获取所有字符串的列表,该列表以第一组中的字符串开头并以查询值结尾。这是一个显着简化的表示和描述:
set1:
my_test_val_1
my_test_val_2
set2:
my_test_val_1_extended_to_another_value
my_test_val_2_extended_as_well
我的目标是保持这些集合的哈希值如下:
set1:
hash(my_test_val_1)
...
set2:
hash(my_test_val_1_extended_to_another_value)
为了节省空间,当 '_extended_to_another_value' 作为查询到达时,请使用具有分配属性的哈希函数来执行以下操作:
hash(my_test_val_1) + hash('_extended_to_another_value') = hash_value_to_search
我的搜索尝试找到支持此属性的哈希函数很可能是由于没有使用正确的关键字进行搜索,所以即使您可以为我上面描述的内容描述正确的术语,它也会有所帮助
【问题讨论】:
-
您是否依赖只是保留哈希值?处理哈希冲突的计划是什么?
-
您需要生成的哈希函数的哪些属性?最终哈希可以使用多少位?
-
" 需要从第二组中获取所有字符串的列表,该列表以第一组中的字符串开头并以查询值结尾。" Are you looking for a trie?
-
也许像 prefix hash tree 这样的东西在这里是相关的?
-
@JonSkeet 是的,哈希冲突是一个问题,但我可以忍受低冲突率并伴随一些广泛的测试(这是所有合成数据,所以我可以大规模测试它)看看什么率,如果有的话我有碰撞。