2016-12-16 9 views
0

がに適用ビーゴアルゴリズムです:JAVA:ビーゴアルゴリズム - equalsIgnoreCaseとのCompareTo

//O(N) 
public boolean isSameName(Candidate otherCan) { 
    return this.name.equalsIgnoreCase(otherCan.getName()); 
} 

//O(N) 
public int compareTo(Candidate otherCan) { 
    return this.name.compareToIgnoreCase(otherCan.getName()); 
} 

//O(N) 
public int getTotalVotes() { 
    int t = 0; 
    for(int i = 0; i < 4; i++) { 
     t += stateVotes[i]; 
    } 
    return t; 
} 

//O(1) 
public Candidate(String name) { 
    this.name = name; 
} 

それらにBigOアルゴリズムを持たせることができますか、それとも単にループと配列用ですか?それらは適切ですか?

+2

あなたの 'getTotalVotes'メソッドはステップ数が入力のサイズに依存しないので(常に4ステップです) –

答えて

1

少しの間違いがあるので、すべてのコードには時間と空間の複雑さがあります。定義によると、コードには時間がかかり、そのコードのデータには(たとえその時間/スペースがゼロであっても)ある程度のスペースが使用されます。

具体的には、最初の2つがO(N)であるかどうかは、Java内のコードに依存しますが、正しいと思われます。

4番目の文字列割り当てでは、これは参考コピーで、O(1)です。

しかし、実際にはNが含まれていないため、3番目のものはではなく、O(N)です。 stateVotesのサイズに関係なく正確に4回繰り返しますので、O(1)にする必要があります。

+0

ああ、すべてのループにBigOアルゴリズムが必要ですか?制限がある場合、たとえば正確に5または6回繰り返すと、O(1)ではなくO(N)になります。 Try-WhileとWhileのBigOアルゴリズムは何でしょうか? –

+0

@ M.A、yes、non-loops :-)さらに、最悪の場合big-Oについて話していると仮定すると、定限界ループはO(1)になります。 'while'に関しては、あなたが残したビット(ループを制御する条件)に完全に依存しています。' while'自体は単にO(1)になりがちな状態チェックとジャンプですが、もちろん、条件自体は非O(1)であってもよい。 – paxdiablo

+0

例4では文字列のコピーはありません。文字列への参照を別の変数に代入するだけです。これはO(1)であり、これはJVM仕様で修正されています。オブジェクト参照の割り当ては多相アクションではないため、StringがJavaでどのように実装されるかには依存しません。 –