【发布时间】:2011-11-02 00:53:41
【问题描述】:
我想知道如何构造一个正则表达式来知道以 2 为底的数字(二进制)是否是 3 的倍数。我在这个线程中读过 Check if a number is divisible by 3 但他们不使用正则表达式,并且有人画的图是错误的(因为它不接受偶数)。我尝试过: ((1+)(0*)(1+))(0) 但它不适用于某些值。希望你能帮助我。
更新: 好的,谢谢大家的帮助,现在我知道如何绘制 NFA,这里我留下了图形和正则表达式:
在图中,状态是以 10 为底的模 3 数。
例如:要进入状态 1,你必须有 1,然后你可以加 1 或 0,如果你加 1,你将有 11(以 10 为底的 3),而这个数字 mod 3 是 0 那么你将圆弧绘制到状态 0。
((0*)((11)*)((1((00) *)1) *)(101 *(0|((00) *1 *) *0)1) *(1(000)+1*01)*) *
其他的正则表达式也可以,但它更短。
非常感谢:)
【问题讨论】:
-
真的必须是正则表达式吗?检查可分性会更容易
-
属于P还是NP问题?