python - 时间复杂度 - Python eval 的 BigO 表示法
问题描述
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 wiki中查找对常见 Python 类型的操作的时间复杂度,以及一些额外的常识。例如,每当一个操作必须产生一个新对象时,都要考虑一个副本。+
在两个列表上生成一个新的列表对象,因此它涉及复制和扩展操作。
当在不同类型上使用多个运算符时,算法复杂性的正常规则适用;对顺序操作中的复杂操作求和,但O(N) + O(N)
仍然是线性O(N)
的。
* Python 的整数类型是无限制的,所以时间复杂度稍微复杂一点,因为 CPython 内部的 C 实现可以使用 NC 整数来表示值。在实践中,这不是问题,因为与为动态语言运行解释器循环相比,添加小整数和大整数之间的差异变得毫无意义。
推荐阅读
- mysql - 计算配置单元中分区表中不匹配的行
- overriding - prestashop 覆盖和组合
- java - 使用 JayWay JSONPath 提取不同深度的多个 JSON 对象
- c# - vsnprintf 和 snprintf 导致 dll 无法加载
- c# - 从 IIS 中的 Web 应用程序交换端口号
- apache-spark - 过滤到pyspark数据框中特定行的最佳方法
- concourse - fly登录不使用GITHUB账号
- ios - Swift Firebase 保存/更新具有相同子值的多个父级
- acumatica - localhost 实例上缺少 acumatica 项目自定义项目 ID
- azure-functions - 在 Azure Functions 中加载第 3 方 dll