- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
代码:-
#Shortest DFA implementation in Python
S,D,F=input()
s=1
for c in S:s=D[s,c]
print(["Not a chance!","Accepted!"][F&s>0])
输入:-输入是字符串 S、增量函数 D 和最终状态掩码 F 的三元组。我用 2 的幂对每个状态进行编号,因此 F 只是每个接受状态的或。 D 是来自 (state,input char) -> state 的映射。
示例输入(接受所有以 b 结尾的字符串):
'abab',{(1,'a'):1,(1,'b'):2,(2,'a'):1,(2,'b'):2},2
输出:-
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-32-506f09a31940> in <module>()
1 #Shortest DFA implementation in Python
----> 2 S,D,F=input()
3 s=1
4 for c in S:s=D[s,c]
5 print(["Not a chance!","Accepted!"][F&s>0])
ValueError: too many values to unpack (expected 3)
同样,下面的代码是实现一个NFA。但它会抛出另一种错误,即使在添加 eval() 之后也是如此。代码如下:-
#Shortest NFA implementation
S,D,F=eval(input())
s=1
for c in S:
t,s=s,0
for a,b in D[c]:s|=t/a%2*b
print(["Not a chance!","Accepted!"][F&s>0])
输入:-我们像以前一样将状态编号为 2 的幂。 D 是从输入字符到由该字符标记的转换列表的映射。
示例输入(接受所有以 b 结尾的字符串):
'abab',{'a':[(1,1)],'b':[(1,1),(1,2)]},2
得到的输出是:-
'abab',{'a':[(1,1)],'b':[(1,1),(1,2)]},2
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-34-7e5418d2d6fc> in <module>()
4 for c in S:
5 t,s=s,0
----> 6 for a,b in D[c]:s|=t/a%2*b
7 print(["Not a chance!","Accepted!"][F&s>0])
TypeError: unsupported operand type(s) for |=: 'int' and 'float'
请告诉我上述代码中所需的必要但最少的修改,以便它成功执行并产生所需的输出。
最佳答案
此代码在 Python 2 中有效,但在 Python 3 中无效。我怀疑当您使用 Python 3 时,该代码实际上是为 Python 2 设计的。input
在 Python 2 中,不仅从输入中读取字符串,而且还执行 eval
语句,这意味着它将获取字符串并将其转换为 Python 语法。 input
在 Python 3 中返回您输入的字符串。eval
不再像您在 Python 2 中看到的那样执行。要模仿您在 Python 2 中看到的内容,您需要运行 eval
在 input
之上:
In [1]: S,D,F = eval(input())
'abab',{(1,'a'):1,(1,'b'):2,(2,'a'):1,(2,'b'):2},2
In [2]: S
Out[2]: 'abab'
In [3]: D
Out[3]: {(1, 'a'): 1, (1, 'b'): 2, (2, 'a'): 1, (2, 'b'): 2}
In [4]: F
Out[4]: 2
对于您正在运行的新代码,罪魁祸首是循环中的除法运算:t/a
。这默认返回一个 float ,而在 Python 2 中,如果 t
和 a
都是整数,它将返回一个整数。在 Python 3 环境中运行 Python 2 代码时必须小心。只需将 t/a
包装在 int
调用中:int(t/a)
。
In [7]: S,D,F=eval(input())
...: s=1
...: for c in S:
...: t,s=s,0
...: for a,b in D[c]:s|=int(t/a)%2*b
...: print(["Not a chance!","Accepted!"][F&s>0])
...:
'abab',{'a':[(1,1)],'b':[(1,1),(1,2)]},2
Accepted!
我最后要提醒您的是,在 Python 3 环境中运行 Python 2 代码时要格外小心。如果可能,请在为其设计的环境中运行代码。如果没有,这个有用的 Python 2 到 Python 3 习语比较指南应该有所帮助:http://python-future.org/compatible_idioms.html .特别是:
关于python - 尝试实现 DFA 但代码生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48751448/
我最近在读一篇论文 Algorithms to Accelerate Multiple Regular ExpressionsMatching for Deep Packet Inspection关于
我正在备考,完成了图中这个任务 通常,从 NFA 到 DFA 的转换对我来说很容易。我从 NFA 创建一个转换表,并为每个"new"组合状态创建一个新列等等(看看我的尝试解释得更好) 不知何故,我对
我正在练习我的 DFA,我遇到了这个似乎非常复杂的问题。我试着把它分成两个较小的问题,我有一个答案,但它看起来不适合我。 有人可以帮助我,或者至少给我一些提示。 顺便说一下,它们都是接受状态。 我能想
正如标题所示,我希望有人帮助我编写 NFA 到 DFA 的转换的代码。我只需要伪代码。我试过用谷歌搜索,甚至找到了整个源代码,但是几乎没有资源可以帮助我给我一个正式的方法(用书面文字,而不是通过图片)
我有一个关于 DFA 最小化的问题。所以我使用了众所周知的技术将正则表达式转换为 NFA,然后使用 goto/closure 算法从中构造 DFA。现在的问题是如何将其最小化?我在这里看过有关它的课文
我已经在纸上编写了DFA,并希望将其转换为一组正则表达式。有人知道这样做的好工具吗? 最佳答案 从我的Google小搜索中,我找到了JFLAP。他们也有关于how to Convert FA to r
一个多小时以来,我一直在尝试不同的方法来解决这个问题,但我感到非常沮丧。 问题是:给出以下每种语言在 Sigma = {0,1} 上的正则表达式和 DFA。 a). {w ∈ Σ* | w 包含偶数个
我正在学习如何使用配对表法(系统化约简法)来约简 DFA。这是我们要约简的 DFA。 第一步是在表格中布置 DFA: 0
有人能告诉我所附的 DFA 是否正确吗? 我想为具有字母 Σ ={a, b} 的语言提供 DFA 我需要 DFA ----> A={ε, b, ab} 最佳答案 不,有多种原因: 您的自动机 bab
我的程序应该为二进制字符串实现 dfa...dfa 是一台一次只能处于一种状态的机器(当您输入字符串时,机器应该使用它,并且在最后一步它应该到达最终状态。如果是这样,我们说该字符串被机器接受)...这
我想创建一个 O(1) 复杂度的自动机的转换函数。我在考虑使用 HashMap 或 Binary tree 。那些想法好吗?你有什么建议吗?感谢您的关注:) 最佳答案 如果您确实需要对转换函数进行持续
我有一个 DFA A 和一个 CFG G,然后我必须检查 G 是否生成了 A 不接受(被 A 拒绝)的无限单词,以及一个不错的复杂度时间。 我想用 CFG 构造一个图,如果它包含有向循环,则生成无限语
我正在查看将 DFA 转换为正则表达式的时间复杂度分析“Introduction to the Automata Theory, Languages and Computation”,第 2 版,第
我需要生成一个确定性有限自动机 (DFA),它是从满足以下属性的所有可能的 DFA 中选出的。必须选择均匀分布的 DFA。 DFA 必须具有以下四个属性: DFA 有 N 个节点。 每个节点都有 2
我有一个 DFA (Q, Σ, δ, q0, F) 和一些“不关心的转换”。这些转换模型符号已知在某些情况下不会出现在输入中。如果采取任何此类转换,则结果字符串是否被接受都无关紧要。 是否有一种算法可
我有一个程序,它只是将所有状态作为一组状态作为输入。然后下一个输入是状态集合中的初始状态,然后是最终状态集合。 接下来是我在状态之间进行的一组转换。 例如:q0,1,q1 这意味着在输入 1 上存在从
在修改封闭源代码游戏时,我在运行时修改机器代码以跳转到我自己的代码中。为了以通用方式执行此操作,我使用模式匹配来查找我想要修改的代码位置。 (模式仅由字符/字节和通配符组成,其中字节可以变化。)通过从
从这个语法开始:https://stackoverflow.com/a/14287002/1082002我会实现一个简单的语法来接受和评估这样的简单语言: { if a==c { a
有了 DFA 的图表,如何将其转换为图灵机?我是否必须找到 DFA 接受的语言,然后创建图灵机?或者有直接的方法吗? 谢谢你。 最佳答案 DFA 中的每个转换读取输入的一个字符,跟随一个转换,然后移动
我希望在我的词法分析器中实现一个 DFA 最小化器,但我似乎无法生成一个看起来不像它已经是表达式的最小 DFA 的 DFA。 我正在从 NFA 构建 DFA,该 NFA 是使用后缀正则表达式中的汤姆森
我是一名优秀的程序员,十分优秀!