私はBoyer-Mooreアルゴリズム(here)を勉強しています。私は簡単な質問がありました。その要素の頻度を見つける)。最初のパス自体はの要素が大部分のものであることを保証していませんか?私はいくつかの例を考えてと感じました。私の気持ちに対抗するためのいくつかの例を親切に教えていただけますか? (必要な場合)Boyer-Moore大多数投票アルゴリズムの2回目の要求の必要性
コードは以下の通りです:
int majorityElement(vector<int>& nums) {
int candidate=0, count=0;
for(auto value: nums) {
//update the candidate if the count == 0
if(count==0)
candidate=value;
//if the value == candidate then increment count
if(value==candidate)
count++;
else
//decrement count
count--;
}
//return candidate
return candidate;
}
編集:私が正しく理解していれば大多数の要素の周波数が実際に(vector size())/2
よりも大きい場合、アルゴリズムにのみ適用されます。だから、2回目のパスは本当に必要ですか?コードを書くたびに、(入力ベクトルが空であるかどうかを確認するなどの)簡単な健全性チェックを行います。この場合、なぜアルゴリズムの一部として「健全性チェック」を使用するのでしょうか?それとも何かもっとあるの?
2回目のパスで候補候補が拒否されることはありますか?だから、もしあなたが2回目のパスをしなければ、それはどのようにして偽の候補者を特定するでしょうか? – gautamaggarwal
私は、リストには常に多数の要素があることを当然のように考えていると思います。 – gautamaggarwal
@greybeard、私に知らせてくれてありがとう。私はそれを知らなかった。これを反映するようにタイトルを更新しました。 –