【问题标题】:How to get Similar Keys in Javascript Object to a given word in o(1) time complexity如何在 o(1) 时间复杂度内获取 Javascript 对象中给定单词的相似键
【发布时间】:2021-08-10 12:01:20
【问题描述】:
  • 请注意,我不想在 for 循环中执行此操作...我知道该解决方案已经有 10 种不同的方式,尤其是使用 Object.keys(myObject),然后快速执行 regex.search

由于我正在处理对象中超过 15k 的属性,因此数组系统并不是我想要的。任何其他解决方案。

是否有可能找到具有 O(1) 时间复杂度的相似键。例如:

const a = {
  warp1: 43,
  warp2: 87,
  warp.34: 19,
  warp_63: 82,
  warp_fundamental: 91,
  shop_41:9,
  warp.12:911,...
}

假设我想提取所有以 warp* 开头的键并将其提取到一个数组中。

我正在寻找的解决方案是['warp1','warp2', 'warp.34', 'warp_63','warp_fundamental', 'warp.12' ] 用javascript可以吗?

【问题讨论】:

  • 我可能是错的,但事实上,我很难相信在 O(1) 时间复杂度下可以做到这一点。
  • 解决方案作为数组很好。但是假设我做了 Object.keys(myObject)。现在我有一个长度为 15k 的数组。如果我使用这个长度的数组只是为了进行搜索是非常耗时的过程。
  • @JoseNuno 这就是我自己的恐惧。所以,我想在堆栈溢出中发布这个。使用 15-25k 数据作为 hashmap 确实非常快。但现在我被要求也显示类似的键,就像我提到的那样。

标签: javascript hashmap


【解决方案1】:

如上所述,不可能比O(n^2) 做得更好,因为您必须检查每个项目,并且对于每个项目,检查搜索字符串的每个字符(更准确地说,O(n*m),即项目数 x搜索的长度)。

但是,如果您将搜索重复应用于同一组数据,则可以先花费 n^2 个周期来构建 trie,然后以对数时间执行后续搜索。

O(1) 仅在您有一组固定的搜索字符串并为所有这些字符串预先计算结果时才有可能。

【讨论】:

  • O(n^2) 对于 15k 数据无论如何都不是一个好主意。
  • @TrickOrTreat:实际上是n*m,项目数 x 搜索长度。
  • n 是 15k... 不是好主意。 Hashmaps 非常适合搜索,即使在 25k 数据中搜索关键字本身也需要不到 0.01 毫秒,但这...
  • @TrickOrTreat 在 HashMap 中搜索一个键实际上是 O(1),但似乎您尝试做的事情总是需要某种迭代。
  • 搜索是我仅使用 O(1) 完成的一项任务。上面提到的是我正在尝试完成的另一项任务,至少看到任何导致它的原因。不幸的是没有运气。
猜你喜欢
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-25
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多