Python 如何通过实例计算给定算法的O(n,x)?

Python 如何通过实例计算给定算法的O(n,x)?,python,algorithm,computer-science,asymptotic-complexity,Python,Algorithm,Computer Science,Asymptotic Complexity,我想计算一个给定算法的运行时间O(n,x)=θ(n,x),这取决于n和x,通过大量(>100)的示例(该算法对n和x需要多长时间)。 真的有办法做到这一点吗 我知道运行时间随着n和x(!)的增加而增加,但我认为相干性太复杂了,无法用“手”计算出O(n,x),因为n或x mac像n^x一样增加,甚至更糟 顺便说一句,我最喜欢的解决这个问题的语言是Python或PHP。最好的方法是仔细研究算法并分析每个步骤,以计算平均和最坏情况下的运行时类 如果不可行,可以使用相对较小的数字运行算法,并相互比较。如

我想计算一个给定算法的运行时间O(n,x)=θ(n,x),这取决于n和x,通过大量(>100)的示例(该算法对n和x需要多长时间)。 真的有办法做到这一点吗

我知道运行时间随着n和x(!)的增加而增加,但我认为相干性太复杂了,无法用“手”计算出O(n,x),因为n或x mac像n^x一样增加,甚至更糟


顺便说一句,我最喜欢的解决这个问题的语言是Python或PHP。

最好的方法是仔细研究算法并分析每个步骤,以计算平均和最坏情况下的运行时类

如果不可行,可以使用相对较小的数字运行算法,并相互比较。如果运行时间是按任何参数的指数顺序排列的,那么即使相差10或20,也应该非常明显。简单地绘制运行时,例如

  • x=10,y在范围内(50)
  • y=10,x在范围内(50)
  • 范围(50)内的x,y=x
应该给你一个大概的想法。当运行时变大时,您可以提前中止,例如大于运行时
(1,1)
的10000倍

这应该给你一个粗略的估计,但你应该清楚,它既不精确(你的测试数据可能无意中遵循某些模式并符合一个好的情况),也不充分(涉及的因素可能非常小-你无法正确识别,比如说,
x+0.0001*1.05^y
)。幸运的是,在许多情况下,指数算法中的基数明显大于1


在Python中,您可以使用该模块正确测量运行时。

有一个名为的免费工具,您可能会感兴趣。你可以给它数据,它会找到适合你数据的候选方程。例如,您在不同的输入大小上运行algo,并记录每个输入的执行时间,然后将此数据提供给Eureqa。然后,它将为您提供适合您的数据的数学方程式

许多算法的运行时间高度依赖于输入数据中的特定值。正因为如此,这并不总是一个伟大的方法来做渐近分析,因为你只是不知道你的数据是否推动算法的边界

但是,我们使用渐近分析作为达到目的的手段——我们通常希望选择一种在现实世界中对真实世界数据可能运行良好的算法。而且,这就像基准测试,但你可以获得令人敬畏的额外数学洞察力。另外,请记住,渐近分析本身是一种让步,因为我们需要简化和降低我们的期望,以得到一些足够简单有用的答案


观看他们的youtube视频

我认为从经验角度而非分析角度来看,这样做的希望不大。大O符号不一定与实际运行时间有关。运行时间不一定随着n的增加而增加。您应该能够通过分析算法来确定算法的大O效率;你不应该试图根据实际的数值数据来计算它,就像你通过实验来确定任何事情一样——在许多不同的
n
下测量常数x(或几个)的计时。查看图表,并将其与合理的值进行拟合,以查看其是否随着
n
n**2
等的增加而增加。对
x
执行相同的操作。希望你没弄错。必要时重新评估。当然,您还没有排除交叉术语的可能性(
O(n*x)
)。关于这一点,你真的无能为力……什么是
O(n,x)
?我熟悉大Oh的一般定义,但我以前从未见过这种符号。@Phantom--我认为这只是大Oh,但在函数依赖未知的2个变量中。e、 g.
O(n*m)
=>
Theta(n,m)
。。。(但我只是在猜测)我一定要试试这个,谢谢!