【发布时间】:2013-02-26 02:59:06
【问题描述】:
我正在自学正则表达式,并在网上发现了一个有趣的练习题,其中涉及编写一个正则表达式来识别所有可被 3 整除的二进制数(并且仅限于此类数字)。老实说,这个问题要求为这种场景构建一个 DFA,但我认为使用正则表达式应该是等效的。
我知道有一个小规则可以确定二进制数是否可以被 3 整除:取数字中偶数位的个数,然后减去该位奇数位的个数 - 如果这等于 0,该数字可以被 3 整除(例如:110 - 1 在偶数 2 插槽中,1 在奇数 1 插槽中)。但是,我在将其调整为正则表达式时遇到了一些麻烦。
我最接近的是意识到数字可以是 0,所以这将是第一个状态。我还看到所有可被 3 整除的二进制数都以 1 开头,所以这将是第二种状态,但我从那里被困住了。有人可以帮忙吗?
【问题讨论】:
-
那么,你能画出刚才描述的 DFA 吗?
-
@OliCharlesworth 不是真的,不。我最接近的是意识到这个数字可以是 0,所以这将是第一个状态。我还看到所有可被 3 整除的二进制数都以 1 开头,所以这将是第二种状态,但我从那里被困住了。
-
@Dan 我不明白相关性。
-
@JohnRoberts:确实。我认为那是因为它不能这样描述(假设你的把戏是正确的);它需要跟踪偶数和奇数之间的潜在任意差异,这反过来又需要任意数量的状态...
-
@OliCharlesworth 同意。我认为鉴于我的伎俩,这是不可能的。我想知道是否还有其他方法。