【问题标题】:minimizing dfa in python在python中最小化dfa
【发布时间】:2012-03-20 18:13:40
【问题描述】:

我正在尝试找到一种在 python 中最小化 DFA 的算法。我找到了一些例子,它们都有代码类。现在,我不知道如何转发放置在 .txt 文件中的 DFA 定义并将它们放入这些类中。 .txt 格式如下:

  1. 行:以逗号分隔的状态集,按字典顺序排列
  2. 行:一组用逗号分隔的字母符号,按字典顺序排列
  3. 行:以逗号分隔的可接受状态集,按字典顺序排列
  4. 行:第一个状态
  5. 和所有其他行:格式为当前状态的传递函数,字母符号->下一个状态

定义示例:

dyny,fllf,gdci,gwtj,knos,kole,mjnw,msdl,mtfz,nbat,njgb,nzwx,rzpn,vcsc,zgfx

b,d,e,f,g,k,l,m,n,o,p,q,r,t,u,w

dyny,njgb,zgfx

mtfz

dyny,b->rzpn

dyny,d->msdl

dyny,e->gdci
.
.
.

类示例

class DFA:

    def __init__(self, states, alphabet, delta, start, accepts):
        self.states = states
        self.start = start
        self.delta = delta
        self.accepts = accepts
        self.alphabet = alphabet
        self.current_state = start

我用

加载 .txt 文件
f = open('definition.txt','r')

lines = f.readlines()

【问题讨论】:

  • 您能发布到目前为止您尝试过的内容吗?我假设这是你的作业。
  • 是的,类似于家庭作业。我有 dfa 类,以及用于打印、验证、删除无法访问的状态的方法……但我不知道如何在类及其方法中填充数据……
  • 我也不知道如何为您做作业;)但是,如果您向我们提供更多信息,那么我们可以为您提供帮助。
  • 我只想知道如何将 .txt 文件中的数据转发到类及其方法
  • @skywlk:“前锋”是什么意思。解析并调用构造函数?

标签: python minimize dfa


【解决方案1】:

到目前为止,这与自动机的最小化无关,对吧?您正在尝试从某种(给定的)文件格式创建自动机。

由于这是作业,我只是给你一些提示:

readlines 返回一个列表。您可以按索引处理特定行,即lines[0] 用于第一行,lines[1] 用于第二行,等等。 这些行中的每一行都是一个字符串。以包含状态集的行为例(lines[0],其中包含'dyny,fllf,gdci,gwtj,knos,kole,mjnw,msdl,mtfz,nbat,njgb,nzwx,rzpn,vcsc,zgfx'),您可以使用

lines[0].split(',')

用逗号分割它,它会给你一个字符串列表,每个字符串代表一个状态。代表单个转换的那些行遵循稍微复杂的格式:

<state>','<input symbol>'->'<next state>

您想要解析这些行,以便获得上面描述的三个组件。 string.split 又是你的朋友。您还应该为转换函数 (delta) 确定合适的数据结构。

注意:readlines 一次读取整个文件。在实践中,自动机通常很大,在这种情况下,最好以增量方式读取文件。文件对象(代码中的f)实现了迭代器协议并允许您遍历文件的行。特别是,我建议使用

line1 = f.next()  # Next line (first line, if first call of next)
line2 = f.next()  # Next line
...

对于前四行(获取状态集等)并遍历其余行(转换):

for line in f:
    ...

详情请见http://docs.python.org/tutorial/inputoutput.html

【讨论】:

  • 感谢您。是的,我的想法是首先从给定文件创建自动机,然后将其最小化。这是好方法还是我应该跳过这一步?
  • 不,那样做也没关系。但是您可能应该将问题的标题更改为更合适的名称。
猜你喜欢
  • 2020-08-01
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2021-06-11
  • 2016-05-26
  • 2019-11-14
  • 2014-12-30
相关资源
最近更新 更多