【发布时间】:2013-10-24 04:10:40
【问题描述】:
当需要展示算法的效率时,我们需要展示函数的算法复杂性 - Big O 等等。在 Python 代码中,我们如何显示或计算函数的边界?
【问题讨论】:
标签: python complexity-theory big-o
当需要展示算法的效率时,我们需要展示函数的算法复杂性 - Big O 等等。在 Python 代码中,我们如何显示或计算函数的边界?
【问题讨论】:
标签: python complexity-theory big-o
一般来说,没有办法以编程方式执行此操作(您会遇到停止问题)。
如果您不知道从哪里开始,您可以通过运行一些具有各种大小输入的基准测试(例如,使用 time 模块)来深入了解函数的执行情况。您甚至可以收集足够的数据来形成关于运行时可能是什么的怀疑。但这不会给您一个严格的答案 - 为此,您需要在数学上证明您怀疑的界限实际上是正确的。
例如,如果我正在使用排序函数并观察到时间大致与输入大小的平方成正比,我可能怀疑这种排序的复杂性是 @ 987654322@。但这并不构成证明——特别是,一些在典型输入下表现良好的算法具有导致性能非常差的病态输入。
为了证明边界实际上是O(n**2),我需要看看算法在最坏的情况下做了什么——在这个例子中,我可能正在分析一个选择排序,它反复扫过整个未排序的部分列表并选择最低的未排序数字。很明显,我正在检查类似n*(n-1) == O(n**2) 的元素。如果检查元素是一个常数时间的操作,并且将最终元素放置在正确的位置也不比O(n**2)差,那么我的整个算法就是O(n**2)。
【讨论】:
如果您想为自己的函数获取大 O 表示法,您可能需要变量来跟踪以下内容: 运行时间;比较次数;迭代次数;等等,以及一些调查这些如何对应于您的数据大小的计算。 最好先手动执行此操作,以便检查您对算法的理解。
【讨论】: