13

我还没有看到任何东西,我怀疑定义“n”有困难,因为通常用于分析复杂函数的定义不止一个或两个变量。

有用于圈复杂度的分析工具,但是否有用于时间(和/或空间)复杂度的分析工具?如果是,是哪些,如果不是,为什么不呢?不可行吗?不可能的?只是有人没有解决它吗?

理想情况下,应用程序的整体复杂性(定义不同的可能“n”)以及应用程序中的每个方法

编辑:因此,由于停机问题,似乎不可能有一个精确的解决方案,但是,某种启发式近似是否可能?我意识到,出于实际目的,一个好的分析器会提供更多有用的信息,但这似乎是一个有趣的问题。

另外,一个计算某个程序子集的程序怎么样?

4

4 回答 4

13

不幸的是,有一个叫做停机问题的问题......

于 2009-03-11T19:06:47.380 回答
7

不,由于停机问题,这是不可能的。

如果您想这样做以改进您的应用程序,则可以考虑进行分析。它可以让您确定实际花费最多的时间。这样您就不会花时间优化仅在小型数据集上运行的 O(n^3) 算法。

于 2009-03-11T19:09:55.343 回答
1

一些想法:

真正的计算机是近似确定性的有限状态机,因此停机问题实际上并不是一个实际限制。一个实际的限制是算法的运行时间比你想等待的时间长,排除了任何蛮力分析方法。

要大致了解算法的复杂性,您始终可以在一组随机输入上运行它并测量所花费的时间。然后通过数据绘制一条曲线。

分析算法的时间复杂度可能相当复杂,需要一些创造性的步骤。(参见快速排序的示例分析)。该问题与逻辑定理证明和程序验证密切相关。构建一个能够实现复杂性的半自动解决方案的有用工具可能是可行的,即一种可以系统地搜索给出人类提示的解决方案的工具,但这当然并不容易。

于 2009-03-11T19:46:54.523 回答
0

从未见过这样做的工具,但我们利用分析工具来更好地了解瓶颈在哪里。这并不总是很明显,我曾有几次对我认为需要很长时间的事情实际上花费很少,反之亦然感到惊讶。在 .NET 世界中,我使用过ANTSJetBrains工具。

于 2009-03-11T19:22:37.747 回答