是否有编程方式或eclipse插件来计算java方法的big-O表示法?
答案 0 :(得分:2)
不,没有这样的插件,如果是的话,那只是一个近似值。即,即使确定程序是否将完成运行也是难以处理的 - 请参阅Halting problem。
现在,关于可能的近似值。假设您有一个插件,可以使用小型数据集(例如N = 1000
)和中型数据集(例如N = 10000
)来测试您的程序。如果您的程序使用中型数据集与小型数据集相比运行时间长10倍,则插件应该断定您的程序为O(N)
,对吧?不完全的。最佳/平均/最坏情况怎么样?例如,quicksort的最坏情况是O(N^2)
,但它通常被视为O(N*logN)
排序算法。因此,如果插件遇到特殊输入,则会产生错误的结果。常数怎么样?运行时间为O(N + k*logN)
的程序被视为O(N)
,但如果常量k
与N
相比足够大,则插件无法达到此结论,等等
关于你的评论:
如果有人尝试过鳕鱼挑战 他们正在评估您的解决方案 使用大O符号反对性能,我确信它们是 不是手动计算,这就是我问这个问题的原因。
Codility挑战的作者通过众所周知的时间复杂性(他们手动分析)解决了他们的问题。当他们测量您的解决方案的各种输入的运行时间并将其与同一输入的解决方案的运行时间进行比较时,他们可以自动确定您的程序的时间复杂度(当然,考虑到考虑您选择的编程语言和测量时间的某些偏差。