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

时间:2011-12-19 07:24:37

标签: computation-theory dfa

我一直在努力解决这个问题,但我无法想出任何东西。任何指针都会非常感激。

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

为了找到从起始状态到接受状态的所有路径,但我不知道如何处理循环,我考虑制作一个覆盖给定DFA的图灵机,例如BFS / Dijkstra算法。 / p>

谢谢!

2 个答案:

答案 0 :(得分:1)

这似乎只需要两个州。

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

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

答案 1 :(得分:1)

我认为它在P中,最差的是二次方。 DFA的每个状态可以具有四个奇偶校验状态

  1. 未访问 - 状态0
  2. 已知可以奇数个步骤到达 - 状态1
  3. 已知
  4. 可在偶数步骤中到达 - 状态2
  5. 已知
  6. 可以在奇数和偶数步骤中达到 - 状态3
  7. 将所有状态标记为未访问状态,将起始状态置于队列中(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个孩子是否需要采取行动。

相关问题