首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哈希表和子字符串匹配

哈希表和子字符串匹配
EN

Stack Overflow用户
提问于 2012-05-10 08:10:13
回答 2查看 4.3K关注 0票数 4

我有数百个密钥,例如:

  • 红苹果
  • 玛宁红
  • 孔雀
  • 蓝苹果

我有与这些键相关的数据,数据是一个字符串,末尾有相关的键。

  • 红苹果:树上有红苹果。
  • 玛宁瑞德:她锯了那个马宁红
  • 福拉曼:他们买了现在的孔雀。
  • 蓝苹果:它是令人惊讶的,但它是一个蓝苹果。

预计我将使用哈希表和哈希函数根据键记录数据,并希望能够从表中恢复数据。

我知道使用哈希函数和哈希表,这里没有问题。

我希望给程序一个字符串,该字符串作为子字符串进行,并为匹配的键检索数据。

例如,

我必须给“红色”,并且必须能够

  • 红苹果:树上有红苹果。
  • 玛宁瑞德:她锯了那个马宁红

作为输出。

我必须给“苹果”,并且必须能够

  • 红苹果:树上有红苹果。
  • 蓝苹果:它是令人惊讶的,但它是一个蓝苹果。

作为输出。

我只能考虑搜索所有的键,如果它们有匹配的子字符串,还有其他的解决方案吗?如果我搜索每个查询的所有键字符串,那么使用散列是不必要的,没有意义,是吗?

但是,搜索子字符串的所有键都是O(N),我希望用O(1)来解决这个问题。

通过散列,我可以散列一个键,例如“红苹果”到943,把"maninred“散列到332

查询人给出字符串"red“,如何从943332中发现键有"red”子字符串?这是我的电脑思维能力的问题。

谢谢你的建议,想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-10 10:56:25

可能您应该使用反向索引的n-格拉姆,同样的方法是使用拼写纠正。对于word redapple,您将拥有一套3克的红色、eda、dap、app、ppl、ple。对于每一个n-gramm,您将有一个包含它的字符串列表。例如,对于红色,它将是

红苹果( red -> maninred,红苹果)

必须对此列表中的单词排序。当您想要找到包含给子字符串的all字符串时,您可以在n上潜入该子字符串,并拦截n的单词列表。

这个模不是O(n),但它的速度是足够的。

票数 3
EN

Stack Overflow用户

发布于 2020-02-07 01:47:37

我最近研究过这个问题,我相信这是做不到的。我希望哈希表能帮助我像你一样提高搜索速度,但它让我失望了。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10529915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档