【问题标题】:How to efficiently search specific phrases in Array of words?如何有效地搜索单词数组中的特定短语?
【发布时间】:2017-12-28 20:05:04
【问题描述】:

我需要的是从数组 2 中的数组 1 中查找包含单词的短语。假设数组一包含 ["Margaret is a girl"; “爱”;“土豆”; “Swim”],另一个是随机的单词文本,被吐入数组。如何有效地检查短语(单词序列)和单词? 因为,按照我的想法,以老式的方式进行操作将是时间问题。

【问题讨论】:

  • 你尝试过什么,具体来说,你在为什么而苦苦挣扎?
  • 我尝试使用 FOR 循环对这个问题进行排序,并多次遍历同一个数组...我想改进它,以缩短所需时间
  • 您的问题并非微不足道,如果您需要最佳性能,则需要一个重要的解决方案。使用prefix trees(又名tries)可以有效地在大文本中搜索多个字符串。

标签: arrays string performance f#


【解决方案1】:

如果您使用 __.exists__.forall 函数,只要找到(非)匹配结果,它们就会短路,这将与 for 循环一样有效:

let arr1 = [| "Margaret is a girl"; "Loves";"Potato"; "Swim" |]
let arr2 = [| "Margaret"; "is"; "a"; "girl" |]

let ``can be built from`` words phrase = 
  phrase
  |> String.split ' '
  |> Array.forall (fun word -> words |> Array.contains word)

let buildablePhrases = arr1 |> Array.filter (``can be built from`` arr2)

如果数组很大并且上面的代码仍然太慢,我想你需要开始引入优化——删除重复项、缓存最频繁的搜索等。哪些优化有意义取决于你处理的数据与。

【讨论】:

  • 谢谢,我会尝试将您的想法落实到我的代码中!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2020-01-16
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多