【问题标题】:Is there a tool to automatically calculate Big-O complexity for a function [duplicate]是否有工具可以自动计算函数的 Big-O 复杂度 [重复]
【发布时间】: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


【解决方案1】:

不幸的是,不可行。见Halting Problem

【讨论】:

  • 我更新了我的问题,请您评论一下为什么它不可能
【解决方案2】:

一般情况下是不可能的。这是一个可以计算某些程序复杂度的 python 程序:https://github.com/Mortal/complexity

【讨论】:

  • 你能解释一下为什么不可能吗?在空间 Big-O 复杂度的情况下也
  • 好吧,对于一个人来说,不可能编写一个程序来决定另一个程序是否完全停止(请参阅en.wikipedia.org/wiki/Halting_problem)。决定复杂性可以归结为停止问题:如果你可以计算一个程序的大 O,那么它就会停止。
猜你喜欢
  • 2013-04-30
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
相关资源
最近更新 更多