【发布时间】:2009-09-11 13:19:35
【问题描述】:
给定一组字符串,例如:
EFgreen
EFgrey
EntireS1
EntireS2
J27RedP1
J27GreenP1
J27RedP2
J27GreenP2
JournalP1Black
JournalP1Blue
JournalP1Green
JournalP1Red
JournalP2Black
JournalP2Blue
JournalP2Green
我希望能够检测到这是三组文件:
- 整个[1,2]
- J27[红、绿]P[1,2]
- JournalP[1,2][红、绿、蓝]
是否有任何已知的方法来解决这个问题 - 我可以阅读任何已发表的论文?
我正在考虑的方法是为每个字符串查看所有其他字符串并找到常见字符以及不同字符的位置,尝试找到最常见的字符串集,但我担心这不是很有效并可能给出误报。
请注意,这与'How do I detect groups of common strings in filenames' 不同,因为它假定字符串后面总是有一系列数字。
【问题讨论】:
-
判断[J27Red,Journal]P27[Red,Green]不是集合的规则是什么?您是否优先考虑字符串中较早开始的匹配项?
-
请更具体地说明您希望如何定义您的集合。例如,除了先前的评论之外,是什么决定了 "J27[Red,Green]P[1,2]" 是一个集合并且 [A-Z][A-Z][A-Z][A-Z][A-Z][A-Z][0- 9] 或类似的不是。
-
除了定义模式匹配标准的规则缺乏特异性之外,这是一个很好的问题。这是一个孩子可以毫不费力地解决问题的例子,但它可能需要 SO 的集体大脑来勾勒出一个可行的算法 [具有实际的大 O 复杂度]
-
@djna @DVK 使用 J27[Red,Green]P[1,2] 和 JournalP[1,2][Red,Green,Blue] 代替提供更多的常用字符。可能存在寻找最常见字符会产生错误结果的理论示例,但我认为我的数据集不会发生这种情况。
标签: algorithm pattern-matching