python – 是否有一个用于编程操作Big-O复杂性的库?

我对可以推断自己时间复杂性的编程语言感兴趣.为此,以某种方式以编程方式表示时间复杂度将非常有用,这将允许我执行以下操作:

f_time = O(n)
g_time = O(n^2)
h_time = O(sqrt(n))

fastest_asymptotically = min(f_time, g_time, h_time)  # = h_time
total_time = f_time.inside(g_time).followed_by(h_time)  # = O(n^3)

我目前正在使用Python,但我并没有特别依赖语言.我已经尝试过sympy,但是我无法在那里找到我需要的东西.

是否有提供此功能的库?如果没有,是否有一种简单的方法可以使用符号数学库来完成上述操作?

编辑:我按照@Patrick87的建议编写了a simple library,似乎有效.不过,如果有其他解决方案,我仍然感兴趣.

解决方法:

SymPy目前仅支持0的扩展(您可以通过执行移位来模拟其他有限点).它不支持无穷大的扩展,这是算法分析中使用的.

但它对它来说是一个很好的基础包,如果你实现它,我们很乐意接受一个补丁(nb:我是SymPy核心开发人员).

请注意,一般来说问题很棘手,特别是如果你有两个变量,甚至是符号常量.如果你想支持振荡功能,这也很棘手.编辑:如果您对振荡功能感兴趣,this SymPy邮件列表讨论会给出一些有趣的论文.

编辑2:我建议不要尝试从头开始构建这个,而不使用计算机代数系统.你最终将不得不编写自己的计算机代数系统,这是一项很多工作,如果你想做正确的事情并且不要慢,那就更需要工作.已经存在大量已经存在的系统,其中包括许多可以作为代码构建库的库(例如SymPy).

上一篇:python – 在同情中考虑多元化


下一篇:python – 加速SymPy方程求解器