【发布时间】:2010-08-08 23:01:01
【问题描述】:
我为通用编程语言制作了一个编译器。作为工具链的一部分,我想包含一个能够估计给定表达式的时间复杂度的分析器。计算算法复杂度似乎相当简单——也就是说,假设所有恒定时间操作都花费相同的时间——但我希望能够近似真实 em> 复杂性也是如此。为此,我需要有关单个处理器操作(例如 inc、add、mul 等)以及某些更高级别操作(例如 I/O)的相对性能的信息。
我意识到这既依赖于架构,也依赖于实现,最多只能产生模糊的结果,和是一个双重问题。但是有没有人碰巧知道任何可以让我开始的高质量资源?查看更高级别操作的开源实现是否会给我足够的信息来提供对其复杂性的公平估计?
【问题讨论】:
-
这与停机问题有何不同? (en.wikipedia.org/wiki/Halting_problem)
-
问题的症结在于您不能总是知道某个随机程序是否会停止...而且您不会得到一个几乎有用的估计没有实际运行程序。我的意思是,如果你想尝试,那就去吧。但是比你聪明得多的人已经证明,在一般情况下,你想要做的事情实际上是不可能的——而一般情况正是你需要处理的。
-
@cHao:抛开“随机程序”的构成问题不谈,停止问题的不可判定性并不意味着我们无法确定所有甚至大多数感兴趣的程序的运行时间。这只是意味着存在适用于这种情况的程序。
-
@Rob:感谢您提供了一个很好的解释,我现在不必写了。 @cHao:在一般情况下,可能无法检测到应用程序是否会停止,但我根本不是在问这个问题。我在询问确定绝对停止表达式的复杂性的具体情况。所有这些关于它是否与停止问题有关的讨论只是在减损最初的问题。我只是想要关于操作 A 比操作 B 贵多少的一般准则,尤其是在它们具有相同时间复杂度的情况下。
标签: algorithm assembly profiling compilation complexity-theory