【问题标题】:Regex crossword solver正则表达式填字游戏求解器
【发布时间】:2018-02-26 23:56:18
【问题描述】:

按照Find string to regular expression programmatically?,我们假设找到匹配正则表达式的字符串需要线性时间。我的直觉说我们也可以通过编程方式解决正则表达式填字游戏,对吧?

如果是,解决 NxM 正则表达式填字游戏的时间复杂度是多少?

例子:

【问题讨论】:

    标签: regex string algorithm performance time-complexity


    【解决方案1】:

    即使您不允许反向引用,这也是 NP 难题。从exact set cover problem 到这个问题有一个简单的映射。

    如果您有集合S[1], S[2], ..., S[n](与联合S),并且不失一般性,集合包含所有数字1...N 用于某些N。将S[i] 表示为长度为N 的字符串, 如果 k 在 S[i] 中,则 1 在第 k 位,否则 0。 让你的正则表达式拼图的列都一样——0*10*,第 k 行是“(S[k])|(0*)”。

    例如,如果S[1] = {1, 4}, S[2] = {2}, S[3] = {3}S[4] = {2, 3},那么拼图将是:

             0*10*  0*10*  0*10*  0*10*
    1001|0*
    0100|0*
    0010|0*
    0110|0*
    

    这个正则表达式难题的解决方案是用 S[i] 精确覆盖 {1, 2, 3, 4}。

    【讨论】:

    • "即使你不允许反向引用。"什么意思?
    • 您在问题中的示例有 \1\2 不是正则表达式的一部分,尽管某些实现允许它们。通常,确定带有反向引用的正则表达式是否与字符串匹配需要指数时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多