我一直在努力解决这个问题,但我无法想出任何东西。任何指针都会非常感激。
问题是:鉴于所有DFA的语言只接收偶数长度的单词,请证明它是否在P中。
为了找到从起始状态到接受状态的所有路径,但我不知道如何处理循环,我考虑制作一个覆盖给定DFA的图灵机,例如BFS / Dijkstra算法。 / p>
谢谢!
答案 0 :(得分:1)
这似乎只需要两个州。
您的输入状态为空字符串,也是接受状态。将anythign添加到字符串会将其移动到下一个状态,我们可以将其称为“奇数”状态,而不是使其成为接受状态。添加另一个字符串会使我们回到原始状态。
我想我不再确定语言是否在P语言中,所以如果你给我一个定义,我可以告诉你这是否适合它,但这是最简单的DFA之一...
答案 1 :(得分:1)
我认为它在P中,最差的是二次方。 DFA的每个状态可以具有四个奇偶校验状态
将所有状态标记为未访问状态,将起始状态置于队列中(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
个孩子是否需要采取行动。