问题 –绘制具有至少两个 0 和至少两个 1 的字符串的确定性有限自动机 (DFA)。
阅读这个问题后,我们想到的第一件事就是计算 1 和 0 的数量。此后,如果它们都至少为 2,则接受字符串,否则不接受。但是我们在 DFA 中没有任何内存概念,所以我们不能通过这种方法来做到这一点。
Input : 1 0 1 1 0 0
Output : Accepted
Input : 1 1 1 0 1
Output : Not accepted
使用的方法 –
我们观察到的第一件事是 0 和 1 都应至少为 2。如果其中任何一个小于 2,则字符串将不被接受。在这个字符串,只有在 0 和 1 都至少为 2 的最后一种情况下才会被接受。
State | Count of 0 | Count of 1 |
---|---|---|
Q0 | 0 | 0 |
Q1 | 0 | 1 |
Q2 | 0 | >=2 |
Q3 | 1 | 0 |
Q4 | 1 | 1 |
Q5 | 1 | >=2 |
Q6 | >=2 | 0 |
Q7 | >=2 | 1 |
Q8 ACCEPTED | >=2 | >=2 |
最初 0 和 1 的计数都为零,我们处于状态 Q0。
- 步骤 1:如果输入为 1,则 1 的计数增加到 1。转到状态 Q1
如果输入为 0,则 0 的计数增加到 1。转到状态 Q3 - 步骤 2:如果输入为 1,则 1 的计数增加到 2。转到状态 Q2
如果输入为 0,则 0 的计数增加到 1。转到状态 Q4 - 第 3 步:如果输入为 1,则 1 的计数继续增加 1。保持相同状态
如果输入为 0,则 0 的计数增加到 1。转到状态 Q5 - 步骤 4:如果输入为 1,则 1 的计数增加到 1。转到状态 Q4
如果输入为 0,则 0 的计数增加到 2。转到状态 Q6 - 步骤 5:如果输入为 1,则 1 的计数增加到 2。转到状态 Q5
如果输入为 0,则 0 的计数增加到 2。转到状态 Q7 - 第 6 步:如果输入为 1,则 1 的计数继续增加 1。保持相同状态。
如果输入为 0,则 0 的计数增加到 2。转到状态 Q8 - 步骤 7:如果输入为 1,则 1 的计数增加到 1。转到状态 Q7
如果输入为 0,则 0 的计数继续增加 1。保持相同状态。 - 步骤 8:如果输入为 1,则 1 的计数增加到 2。转到状态 Q8
如果输入为 0,则 0 的计数继续增加 1。保持相同状态。 - 步骤 9:如果输入为 1,则 1 的计数继续增加 1。保持相同状态。
如果输入为 0,则 0 的计数继续增加 1。保持相同状态。
如果字符串完成则接受