可计算性:在 P 中接收偶数长度词的 DFA 的语言是啥?

Posted

技术标签:

【中文标题】可计算性:在 P 中接收偶数长度词的 DFA 的语言是啥?【英文标题】:Computability: Is the language of DFAs that receive even-length words in P?可计算性:在 P 中接收偶数长度词的 DFA 的语言是什么? 【发布时间】:2012-01-23 09:39:24 【问题描述】:

我已经为此苦苦挣扎了一段时间,但无法提出任何建议。任何指针将不胜感激。

问题是:给定所有只接收偶数长度单词的 DFA 的语言,证明它是否在 P 中。

我考虑过制造一台图灵机,它可以像 BFS/Dijkstra 的算法那样遍历给定的 DFA,以便找到从起始状态到接受状态的所有路径,但不知道如何处理循环?

谢谢!

【问题讨论】:

【参考方案1】:

我认为它在 P 中,最坏的情况是二次方。 DFA的每个状态可以有四个奇偶状态

    未访问 -- 状态 0 已知可通过奇数步到达 -- 状态 1 已知可通过偶数步到达 -- 状态 2 已知在奇数步和偶数步中都可以到达 -- 状态 3

将所有状态标记为未访问,将起始状态放入队列(FIFO、优先级等),将其奇偶校验状态设置为 2。

child_parity(n)
    switch(n)
        case 0: error 
        case 1: return 2
        case 2: return 1
        case 3: return 3

while(queue not empty)
    dfa_state <- queue
    step_parity = child_parity(dfa_state.parity_state)
    for next_state in dfa_state.children
        old_parity = next_state.parity_state
        next_state.parity_state |= step_parity
        if old_parity != next_state.parity_state // we have learnt something new
            add next_state to queue // remove duplicates if applicable
for as in accept_states
    if as.parity_state & 1 == 1
        return false
return true

除非我忽略了某些东西,否则每个 DFA 状态最多被处理两次,每次最多检查 sizechildren 以获取所需的操作。

【讨论】:

【参考方案2】:

看起来这只需要两个状态。

您的输入状态将是空字符串,也将是一个接受状态。向字符串添加 anythign 会将其移动到下一个状态,我们可以将其称为“奇数”状态,而不是使其成为接受状态。添加另一个字符串使我们回到原始状态。

我想我不确定一种语言是否在 P 中的术语,所以如果你在那里给我一个定义,我可以告诉你这是否适合它,但这是最简单的 DFA 之一...

【讨论】:

感谢您的宝贵时间!不幸的是,问题不在于实际构建一个接受 /all/ 偶数长度词的 DFA,而是决定给定 DFA 是否只接受偶数长度词的问题 我现在更清楚地看到了您的问题。那么我可能会问,在 P 中的语言的确切定义是什么?与什么有关?我只见过它在时间和计算复杂性方面的应用,老实说,一旦你离开大学,你就不会充分利用这门课程:)

以上是关于可计算性:在 P 中接收偶数长度词的 DFA 的语言是啥?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 中norm函数是啥意思

从正则表达式到 NFA 到 DFA 到最简 DFA (结束)

matlab中的norm是啥函数

Dreamoon-Two matchings(DP)

从正则表达式到 NFA 到 DFA 到最简 DFA

LDA 主题模型效果度量