回答
你NFA图形是正确的。它将匹配正则表达式ab*((b|d)|c*)
而没有别的。然而,它可能更简单,例如像这样:
我不认为这是完全正确的,分支部分'((b | d)| c *)'是两个分支,而不是三个,它是(b | d)或c *节点将它表示为一个完全独立的路径,然后分支到'b'或'd'中是否更准确? –
我敢肯定,上面的一个不使用汤普森建设。它比较短,但我的演讲者给了我一种如何去做的风格。 – unleashed
@unleashed我会说汤普森是一种创建NFA的算法(一种程序),而不是一种NFA。你可以看到我的NFA是由汤普森创建的,然后进行了优化。 (bw:问题是你的NFA是否等同于你的正则表达式,Thomspon没有:-)) –
- 1. 在java中的sendmail模拟?
- 2. 模拟Java中的延迟
- 3. Java中的物理模拟
- 4. java中的用户模拟
- 5. 的Java:在模拟
- 6. java模拟
- 7. Java lotto模拟
- 8. 在Java中模拟Oracle SPOOL
- 9. 在java中模拟Android SystemClock.uptimeMillis
- 10. Java中,模拟浏览器
- 11. C#中的NFA/DFA实现
- 12. 如何将NFA/DFA转换为java?
- 13. 模拟退火模板java
- 14. 模拟问题Java
- 15. 模拟app.config for Java?
- 16. Java模拟组件
- 17. 行人模拟Java
- 18. Java mockito模拟集
- 19. Java方法模拟
- 20. 模拟C++ - 用Java
- 21. Java模拟键盘
- 22. 模拟HTTPS在Java
- 23. 模拟汽车(Java)
- 24. 模拟Java的Netty中的对象 -
- 25. Qt中的Java Form Layout的模拟
- 26. java中的静态类的模拟
- 27. Java ScheduledExecutorService的Ruby模拟
- 28. 骰子模拟java的
- 29. 的Java模拟,从集合
- 30. winapi模拟java的synchronized/wait()
节点10,11,12和13可能会被压缩成两个节点? –
这就是我最初的想法,但演讲者希望这种风格能够重复使用并使用汤普森建构来创建NFA。我只是怀疑2到3 e的过渡,3到4 e的过渡和4到5或4到7 e的过渡。 – unleashed
那么,2-3可以减少,在'b *'的情况下导致没有'b's,你会有一个从'1-2'转换的'e'。除此之外,我认为其余部分似乎是合适的。最终的结果是一样的,只有一个节点。 –