java – 计算Big-O复杂性
作者:互联网
我最终会给这个程序一个类似60,000个400像素图像的输入文件,所以我试着想一想这个代码如何用大输入运行.为了便于阅读,我用“blah”和所有带有简单字母(nn,mm和kk)的ArrayList名称替换了不重要的东西.
for (Perceptron P : nn){
//blah
}
for (Perceptron P : mm) {
//blah
}
for (Perceptron P : kk){
//blah
}
for (Perceptron P : mm) {
for (int i = 0; i < nn; i++) {
//blah
}
for (int j = 0; j < kk; j++){
//blah
}
}
for (Perceptron X : nn){
for (Perceptron Y : mm){
//blah
}
}
for (Perceptron Z : kk){
for (Perceptron Y : mm){
//blah
}
}
我认为答案是O(nn mm kk mm(nn kk)nnmm kkmm).如果我知道nn是400,mm是300,kk是10,那么这是O(246710).但是现在我被卡住了.我真的不知道O(246710)是什么意思.我是否必须一次仅针对其中一个变量计算big-O?如果是这样,那会有什么好处呢?我只是想知道这将如何表现.谢谢
解决方法:
Big-O仅涉及运行时间中的最大项,在这种情况下为O(mm *(nn kk)).生成此术语的代码部分是以下嵌套循环:
for (Perceptron P : mm) {
for (int i = 0; i < nn; i++) {
//blah
}
for (int j = 0; j < kk; j++){
//blah
}
}
如果你告诉我们kk,mm和nn与图像的实际大小有什么关系,那么我们可以用更有意义的术语来限制你的运行时间.
标签:java,big-o,time-complexity 来源: https://codeday.me/bug/20190727/1556502.html