摩爾投票算法

摩爾投票算法(Moore majority vote algorithm)算法

這個在wiki的介紹在https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm,摩爾投票算法是一種使用線性時間和常數空間查找大部分元素序列的算法。它以1981年出版的Robert S. Boyer和J Strother Moore的名字命名,而且是流式算法的典型例子。數組

最簡單的形式就是,查找輸入中重複出現超過一半以上(n/2)的元素。若是序列中沒有這種元素,算法不能檢測到正確結果,將輸出其中的一個元素之一。若是不能保證輸入數據中有佔有一半以上的元素,須要再遍歷一下驗證。blog

具體的算法以下,該算法在其局部變量中維護一個序列元素和一個計數器,計數器最初爲零。而後,它一次一個地處理序列的元素。處理元素x時,若是計數器爲零,則算法將x存儲爲其維護的序列元素,並將計數器設置爲1。不然,它將x與存儲的元素進行比較,並使計數器遞增(若是相等)或遞減計數器(不想等)。ip

其實咱們也能夠換個角度想,就是若是存在大於n/2的元素和其餘元素,那麼實際就是這個元素和其餘元素作消除的操做,剩下的那個就是咱們要的那個元素。it

好比若是一個數組[2,2,1,1,1,2,2],找出其中大於n/2數量的元素是哪個,固然若是不存在這樣的元素,那麼摩爾投票算法並不能得出最多的那個,因此要再遍歷一遍計算一下。變量

相關文章
相關標籤/搜索