posts - 9,  comments - 11,  trackbacks - 0
最近用Java做一个regex等价判断的东东,发现垃圾回收真的很强大,资源重用轻轻易易就实现了。C++加上右值引用和move构造函数能够提高资源重用,但是可以预见要一些idiom才能用好,又带入了新的复杂性。
.
..
...
忍不住show一下,谁能够实现一个算法,在4秒内给出能够区分这两个正则表达式的字符串:
(a|b)*b(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)
(a|b)*a(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)(a|b)
要知道识别倒数第n个字符是a的正则表达式,其DFA至少有2^n个状态(见龙书第二版英文版P164)。
posted on 2009-07-13 01:03 lingol 阅读(538) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 资源重用、右值引用杂感
2009-07-13 21:16 | 陈梓瀚(vczh)
求DFA的简化DFA(理论证明只要表达式的意义是一样的,那么简化DFA一定是一样的)都是瞬间完成的,为什么要4秒……我记得之前写一个x86的机器码翻译器的时候,我的C++程序分析一个两个15寸屏幕那么大面积的正则表达式,debug模式下也就4秒……  回复  更多评论
  
# re: 资源重用、右值引用杂感
2009-07-14 03:43 | lingol
@陈梓瀚(vczh)
"两个15寸屏幕那么大面积的正则",说明不了问题,可能状态数还没过200。
而我那个测试样例则保证即使在化简后,至少有2^11=2048个状态。你能够秒掉?另外,注意我不仅仅要求判断两个正则表达式是否等价,还要给出能够区分它们的一个输入串。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

留言簿(5)

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜