时间复杂度 - Python 的 eval 的大 O 表示法
Time Complexity - BigO Notation of Python's eval
Python的eval计算数学表达式的时间复杂度是多少?我找不到任何说明它的来源。我的假设是它是 O(n),其中 n 是表达式中运算符的数量。
如果有人提到了说明此内容的网站,如果您能分享,我们将不胜感激。
运算符没有时间复杂度。 对值的操作。
例如:
1 + 1
时间复杂度O(1)
;将两个整数相加很简单 (*)
[1, 2, 3] + [4, 5, 6]
具有不同的时间复杂度 O(len([1, 2, 3]) + len([4, 5, 6])
,因为连接两个列表需要将所有引用从两个列表复制到一个新的列表对象。对于一般情况,list_len_N + list_len_K
是一个 O(N+K)
操作。
常见的Python类型运算的时间复杂度可以在Python wiki中查看,外加一些常识。例如,每当一个操作必须产生一个新对象时,就考虑一个副本。 +
在两个列表上生成一个新的列表对象,因此它涉及复制和扩展操作。
在不同类型上使用多个运算符时,适用算法复杂性的正常规则;顺序运算中的复杂运算求和,但是O(N) + O(N)
仍然是线性的O(N)
.
* Python的整数类型是未绑定的,所以时间复杂度稍微复杂一点,因为CPython的内部C实现可以使用 N C 整数来表示值。在实践中,这不是问题,因为与 运行 动态语言的解释器循环相比,添加小整数和大整数之间的差异变得微不足道。
Python的eval计算数学表达式的时间复杂度是多少?我找不到任何说明它的来源。我的假设是它是 O(n),其中 n 是表达式中运算符的数量。
如果有人提到了说明此内容的网站,如果您能分享,我们将不胜感激。
运算符没有时间复杂度。 对值的操作。
例如:
1 + 1
时间复杂度O(1)
;将两个整数相加很简单 (*)[1, 2, 3] + [4, 5, 6]
具有不同的时间复杂度O(len([1, 2, 3]) + len([4, 5, 6])
,因为连接两个列表需要将所有引用从两个列表复制到一个新的列表对象。对于一般情况,list_len_N + list_len_K
是一个O(N+K)
操作。
常见的Python类型运算的时间复杂度可以在Python wiki中查看,外加一些常识。例如,每当一个操作必须产生一个新对象时,就考虑一个副本。 +
在两个列表上生成一个新的列表对象,因此它涉及复制和扩展操作。
在不同类型上使用多个运算符时,适用算法复杂性的正常规则;顺序运算中的复杂运算求和,但是O(N) + O(N)
仍然是线性的O(N)
.
* Python的整数类型是未绑定的,所以时间复杂度稍微复杂一点,因为CPython的内部C实现可以使用 N C 整数来表示值。在实践中,这不是问题,因为与 运行 动态语言的解释器循环相比,添加小整数和大整数之间的差异变得微不足道。