【发布时间】:2015-09-25 21:43:13
【问题描述】:
在研究算法和数据结构时,我为我的脚本手动评估 BigO 复杂性。有没有办法,比如说任何 Python IDE 或包中的一个按钮,来计算任何给定函数或程序的 BigO?
更新:
假设我有
def print_first_element(a):
print a[0]
为什么我不能编写分析器,它会说我可以通过索引及其 O(1) 访问数组(列表),或者
def print_all_element_of_list(a):
for i in a:
print i
好的,你有完整的扫描,所以复杂度是 O(n)
等等
【问题讨论】:
-
一般来说,没有这样的东西可以用于任意代码。
-
您甚至无法判断给定程序和给定输入是否会在有限时间内运行(寻找停机问题),更不用说获得比任意输入更详细的答案了。
-
我认为你可以为函数使用 python 分析器并查看不同输入大小的运行时间。在你的脑海中画出图表(如果你觉得书呆子,也可以画一个实际的图表)
-
在第一种情况下,
a可以是具有树实现的字典,在这种情况下,函数将为 O(log n)。或者完全不同的东西;我们不能真的假设它是 Python 内置列表的一个实例。
标签: python algorithm big-o computer-science