我正在寻找一个算法分析工具的java,可以计算一个函数的大0。理想的我想让它成为我的构建过程的一部分,以及我的其他代码度量工具。即使在google上搜索之后,我也找不到任何商业工具的开源。欢迎提出任何建议。
谢谢
发布于 2010-04-15 01:47:32
这并不是通常可以自动完成的事情。大O分析不是一件小事。
你确定你不是在找侧写器吗?
算法的大O分析通常是在设计阶段,在纸和笔上进行的.有些人可能会编写简单的程序,并使用自动化工具来度量和比较各种算法的原型实现,以帮助进行分析,但即使在这种高度假设的情况下,Java也不会是首选语言(Haskell,可能)。
为应用程序编写的实用(但理论上丑陋!)像Java这样的语言,通常在实现之前设计和分析算法,然后将其翻译成Java,然后根据需要对其进行概要分析和优化。此时,您应该已经知道算法的大O复杂度。
这对你来说可能是个惊喜,但是假设你有一个算法的实现,然后优化它,使它现在的速度是原来的两倍。大概三次。可能快十倍。可能要快一百万倍!
然而,就大O分析而言,它的复杂性仍然是一样的!如果你有一个线性算法,改进的百万倍-更快的优化版本仍然是线性的!如果它是二次的,它将保持如此!
这是因为常数因子在渐近分析中是不重要的(例如,随着输入大小走向无穷大,它增长的速度有多快?)。一百万是一个很大的数字,但它仍然只是一个常数。
另一个复杂的因素是,渐近分析实际上有一个阈值,在此阈值之后,边界保持不变。也就是说,对于较小的输入,这些边界可以被打破,但是从这个向无穷远的阈值开始,必须遵守边界。这使得通过测量进行自动分析非常困难,因为您不知道是否达到了阈值。
我建议阅读一些基本的计算机科学教科书来学习更多的这门学科。
有趣的事实:要知道程序是否会停止是不可能的。这就是所谓的停止问题。起初这听起来可能很荒谬,但这有许多严重的理论后果。
另请参阅
关于Java分析器的问题
https://stackoverflow.com/questions/2642217
复制相似问题