【发布时间】:2019-11-18 21:14:39
【问题描述】:
我想知道 Python3 中的解析器模块用于eval 表达式的算法或时间复杂度。
这是我的代码:
import random
import parser
equation_ = '(x**3 + 5*(x**2) - 3*x + 3) + (4*(x**5) - 2*(x**2) + 1)'
code = parser.expr(equation_).compile()
test_cases = [random.randrange(-100, 100) for _ in range(10)]
for x in test_cases:
print(eval(code))
现在,我想知道使用了哪种算法或者该方法的时间复杂度是多少:parser.expr() 和eval()。
我尝试阅读documentation,但无法弄清楚,source code 也是如此:parser.c 和 parser.h
【问题讨论】:
-
您是在询问解析或评估的复杂性吗?以及表达式中的字符数、变量数等方面的复杂度是多少?
-
@Barmar 两者,我已经编辑了这个问题。谢谢。
-
解析是O(n),求值就是方程本身的复杂度。
-
@Barmar 你是怎么做到的?看源码还是已经知道算法了?
-
我知道这一点是基于我 40 年前对解析的了解。一般来说,解析器不需要做任何嵌套循环,它们只是顺序扫描输入。
标签: python c python-3.x