有没有渐近符号的替代方法?

Are there any alternatives to Asymptotic Notation?

我找到了这个定义:

Asymptotic Notations are languages to analyze an algorithm's running time by identifying its behavior as the input size for the algorithm increases. This is also known as an algorithm's growth rate.

这让我开始思考,是否有任何其他符号,或者是否有可能使用除输入大小以外的任何度量来分析算法?

是的,有很多选择。例如,由于渐近符号忽略了前导系数,因此它不是推理精确操作计数的好工具。但是,使用更精确的分析,在某些情况下,您可以确定算法 运行 时间的主要系数是输入大小的函数。这在数值方法等领域有应用,在这些领域中输入是巨大的并且这些主要常数很重要。

您还可以查看算法中固有的并行度,如果您想 运行 在多核计算机上使用该算法,这将很有用。或者你可能会看看算法并行化时需要多少通信,这在分布式计算中有应用。

您还可以查看算法实现方式的结构元素。对于代码,您可以查看诸如圈复杂度之类的东西,它根据一段代码存在多少控制路径来衡量它的“复杂度”。对于布尔电路,您可以查看电路的深度。对于排序网络,您可以查看网络中的轮数。

您也可以从查看输入的大小切换到其他 属性 输入。 fixed-parameter 易处理性的想法是基于这样一种洞察力,即算法的输入可能具有“简单”部分和“困难”部分,如果“困难”部分没那么难,您也许可以即使在常规意义上输入很大,也能快速解决问题。

您还可以分析算法对其输入的微小变化的敏感性。也许算法 运行 在大多数情况下都非常快,但在其他情况下却慢得令人痛苦(线性规划的单纯形法就是一个很好的例子)。诸如平滑复杂性之类的工具正是关注这一点。