我在分析此方法时遇到问题。我想弄清楚大的复杂性。 如果我是对的那么它是O(n ^ 2)因此两个for循环,这是算法的主要联合。但我似乎无法弄清楚如何证明它。
我到目前为止的事情是。
1 + N *((N-1)+1)/ 2 + N。但是,当我测试它时,它是对的,可以吗?
文字是挪威文,如果您对理解代码有任何疑问,请大声说出来。 (应该用英语编码,但是因为我们的老师用挪威语提供所有材料,他们希望用挪威语。所以英语和挪威语文本:P)
public void skrivUtStat(){
LinearNode<CD> temp = start;
int[] amt = new int[CD.GenreAmt()];
String[] genre = CD.sendGenre();
if(amount != 0){
for(int i=0; i<amount; i++){
for(int j=0; j<CD.genreAmount(); j++){
if(temp.getElement().getGenreNr() == j){
ant[j] += 1;
}
} // End inner for-loop
temp = temp.GetNext(); // O(1)
}// End outer for-loop
for(int a=0; a<CD.GenreAmt(); a++){
System.out.println(Genre[a] + ":");
System.out.println(ant[a]);
}
}
}
现在编辑为英文。
答案 0 :(得分:1)
据我所知,CD.genreAmount()是O(1),你有一个固定的流派列表。正确?
在这种情况下,您将遍历所有CD(for i
)并根据整个流派全局列表(for j
)检查每个CD。所以:
存在:
订单将O(N.M)
当然:你的算法再次迭代你的类型(在方法结束时),但那将是N.M + M
,当然O(M)总是低于O(NM)......因此O(N.M+M)
相当于O(N.M)