可计算性:在 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 状态最多被处理两次,每次最多检查 size
children 以获取所需的操作。
【讨论】:
【参考方案2】:看起来这只需要两个状态。
您的输入状态将是空字符串,也将是一个接受状态。向字符串添加 anythign 会将其移动到下一个状态,我们可以将其称为“奇数”状态,而不是使其成为接受状态。添加另一个字符串使我们回到原始状态。
我想我不确定一种语言是否在 P 中的术语,所以如果你在那里给我一个定义,我可以告诉你这是否适合它,但这是最简单的 DFA 之一...
【讨论】:
感谢您的宝贵时间!不幸的是,问题不在于实际构建一个接受 /all/ 偶数长度词的 DFA,而是决定给定 DFA 是否只接受偶数长度词的问题 我现在更清楚地看到了您的问题。那么我可能会问,在 P 中的语言的确切定义是什么?与什么有关?我只见过它在时间和计算复杂性方面的应用,老实说,一旦你离开大学,你就不会充分利用这门课程:)以上是关于可计算性:在 P 中接收偶数长度词的 DFA 的语言是啥?的主要内容,如果未能解决你的问题,请参考以下文章