我有数百个密钥,例如:
我有与这些键相关的数据,数据是一个字符串,末尾有相关的键。
预计我将使用哈希表和哈希函数根据键记录数据,并希望能够从表中恢复数据。
我知道使用哈希函数和哈希表,这里没有问题。
;
我希望给程序一个字符串,该字符串作为子字符串进行,并为匹配的键检索数据。
例如,:
我必须给“红色”,并且必须能够
作为输出。
或
我必须给“苹果”,并且必须能够
作为输出。
我只能考虑搜索所有的键,如果它们有匹配的子字符串,还有其他的解决方案吗?如果我搜索每个查询的所有键字符串,那么使用散列是不必要的,没有意义,是吗?
但是,搜索子字符串的所有键都是O(N),我希望用O(1)来解决这个问题。
通过散列,我可以散列一个键,例如“红苹果”到943,把"maninred“散列到332。
查询人给出字符串"red“,如何从943和332中发现键有"red”子字符串?这是我的电脑思维能力的问题。
谢谢你的建议,想法。
发布于 2012-05-10 10:56:25
可能您应该使用反向索引的n-格拉姆,同样的方法是使用拼写纠正。对于word redapple,您将拥有一套3克的红色、eda、dap、app、ppl、ple。对于每一个n-gramm,您将有一个包含它的字符串列表。例如,对于红色,它将是
红苹果( red -> maninred,红苹果)
必须对此列表中的单词排序。当您想要找到包含给子字符串的all字符串时,您可以在n上潜入该子字符串,并拦截n的单词列表。
这个模不是O(n),但它的速度是足够的。
发布于 2020-02-07 01:47:37
我最近研究过这个问题,我相信这是做不到的。我希望哈希表能帮助我像你一样提高搜索速度,但它让我失望了。
https://stackoverflow.com/questions/10529915
复制相似问题