【发布时间】:2014-01-22 19:45:33
【问题描述】:
我试图记住正确的算法,以在集合中找到与可能子集列表中的元素匹配的子集。例如,给定输入:
aehfaqptpzzy
和子集列表:
{ happy, sad, indifferent }
我们可以看到“happy”这个词是匹配的,因为它在输入中:
a e <strong>h</strong> f <strong>a</strong> q <strong>p</strong> t <strong>p</strong> z z <strong>y</strong>
我很确定有一种特定的算法可以找到所有这些匹配项,但我不记得它叫什么了。
更新
上面的例子不是很好,因为它有字母重复,事实上在我的问题中字典条目和输入字符串都是可排序的集合。例如,
输入:acegimnrqvy
字典: { cgn, dfr, lmr, mnqv, 例如 }
所以在本例中,算法将返回 cgn、mnqv 和 eg 作为匹配项。另外,我想找到“最佳”意味着最长的最佳互补匹配集。因此,在上面的示例中,“最佳”答案将是“cgn mnqv”,例如不会匹配,因为它与较长匹配的 cgn 冲突。
我意识到这个问题可以通过暴力扫描来解决,但这是不可取的,因为字典中可能有数千个条目,输入字符串中可能有数千个值。如果我们试图找到最佳匹配集,可计算性将成为一个问题。
【问题讨论】:
-
听起来你真的有一个列表,而不是一组。一个集合没有顺序,也不包含重复...
-
目标字符串中的匹配项是否必须按顺序排列?
-
在哪一点上,算法肯定只是简单的从左到右扫描?这将是
O(MN)(其中M是目标词的数量,N是原始列表中的字母数量)。 -
定义“所有这样的匹配”。对于输入
ssaadd,它是否应该为sad找到6 个匹配项?还是只是想检查sad是否存在? -
它是一套。我已经简化了问题。实际问题涉及声学频率集。例如,声学特征可能是 100/51 150/30 175/35 190/17,其中第一个数字是频率,第二个数字是幅度。问题是找出声学特征是否存在于环境中的一组音调中。
标签: algorithm set subset string-matching