Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算Python函数的算法复杂性?_Python_Complexity Theory_Big O - Fatal编程技术网

如何计算Python函数的算法复杂性?

如何计算Python函数的算法复杂性?,python,complexity-theory,big-o,Python,Complexity Theory,Big O,当需要显示算法的效率时,我们需要显示函数的算法复杂性——等等。在Python代码中,如何显示或计算函数的边界?通常,无法通过编程实现这一点(您会遇到停止问题) 如果您不知道从何处开始,您可以通过使用各种大小的输入运行一些基准测试(例如,使用时间模块)来了解函数将如何执行。您甚至可以收集足够的数据来怀疑运行时可能是什么。但这并不能给你一个严格的答案——为此,你需要从数学上证明你怀疑的界限事实上是正确的 例如,如果我在玩排序函数,并且观察到时间的增加大致与输入大小的平方成比例,我可能会怀疑这种排序的

当需要显示算法的效率时,我们需要显示函数的算法复杂性——等等。在Python代码中,如何显示或计算函数的边界?

通常,无法通过编程实现这一点(您会遇到停止问题)

如果您不知道从何处开始,您可以通过使用各种大小的输入运行一些基准测试(例如,使用
时间
模块)来了解函数将如何执行。您甚至可以收集足够的数据来怀疑运行时可能是什么。但这并不能给你一个严格的答案——为此,你需要从数学上证明你怀疑的界限事实上是正确的

例如,如果我在玩排序函数,并且观察到时间的增加大致与输入大小的平方成比例,我可能会怀疑这种排序的复杂性是
O(n**2)
。但这并不构成证据——特别是,一些在典型输入下表现良好的算法具有病态输入,导致性能非常差


为了证明界限实际上是
O(n**2)
,我需要看看算法在最坏的情况下做了什么——在本例中,我可能在分析一个选择排序,它重复地扫描列表的整个未排序部分,并选择最低的未排序数。很明显,我正在检查类似于
n*(n-1)==O(n**2)
元素的东西。如果检查元素是一个常数时间操作,并且将最后一个元素放在正确的位置也不比
O(n**2)
差,那么我的整个算法就是
O(n**2)

如果您试图为自己的函数获取大O符号,您可能需要变量跟踪以下内容: 运行时;比较的次数;迭代次数;以及一些调查这些数据如何与数据大小相对应的计算。 最好先手动完成,这样您就可以检查自己对算法的理解