pol*_*nts 12
这不是通常可以自动执行的操作.Big-O分析不是一件小事.
你确定你不是在寻找一个分析器吗?
算法的Big-O分析通常在设计阶段,铅笔和纸上完成.有些人可能会编写简单的程序并使用自动化工具来测量和比较各种算法的原型实现以帮助分析,但即使在这种高度假设的情况下,Java也不会是首选语言(可能是Haskell).
对于用Java这样的实用(但理论上很丑陋)语言编写的应用程序,通常在实现之前设计和分析算法,然后一旦用Java翻译它,就可以根据需要进行分析和优化.此时您应该已经知道算法的Big-O复杂性.
这可能是一个惊喜,但假设你有一些算法的实现,然后你优化它,使它现在快两倍.也许三次.也许快十倍.也许快一百万倍!
然而,就Big-O分析而言,其复杂性仍然相同!如果你有一个线性算法,改进的百万倍快速优化版本仍然是线性的!如果它是二次方的,它将保持不变!
这是因为渐近分析的常数因子是无关紧要的(即随着输入大小趋向无穷大,它的增长速度有多快?).百万是一个很大的数字,但它仍然只是一个常数.
另一个复杂因素是渐近分析实际上具有阈值,在该阈值之后边界成立.也就是说,对于较小的输入,这些边界可以被打破,但是从这个阈值开始向无穷大,必须遵守边界.这使得通过测量进行自动分析非常困难,因为您不知道您是否达到了阈值.
我建议阅读一些基本的计算机科学教科书,以了解更多的主题.
有趣的事实:无法判断程序是否会停止.这被称为暂停问题.一开始可能看起来很荒谬,但这会产生许多严重的理论后果.