是否有工具可以自动计算函数的 Big-O 复杂度

Igo*_*nov 13 python algorithm big-o computer-science

在研究算法和数据结构时,我手动评估了脚本的 BigO 复杂性。有没有办法,比如任何 Python IDE 或包中的一个按钮,来计算任何给定函数或程序的 BigO?

更新:

假设我有

def print_first_element(a):
    print a[0]
Run Code Online (Sandbox Code Playgroud)

为什么我不能编写分析器,它会说我可以通过索引及其 O(1) 访问数组(列表),或者

def print_all_element_of_list(a):
    for i in a:
        print i
Run Code Online (Sandbox Code Playgroud)

好的,你有完整的扫描,所以复杂度是 O(n)

等等

fer*_*mas 7

不幸的是,不可行。请参阅停止问题

  • 我更新了我的问题,你能评论一下为什么不可能吗 (2认同)

Rey*_*les 4

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

  • 好吧,对于一个人来说,编写一个可以决定另一个程序是否完全停止的程序是不可能的(请参阅https://en.wikipedia.org/wiki/Halting_problem)。决策的复杂性可以简化为停止问题:如果你可以计算一个程序的大O,那么它就会停止。 (3认同)