當我讀這(Find the most common entry in an array),建議Boyer and Moore's Linear Time Voting Algorithm。線性時間投票算法。我沒有得到它
如果您點擊該網站的鏈接,可以逐步解釋算法的工作原理。對於給定的順序,AAACCBBCCCBCC
它提供了正確的解決方案。
當我們向前將指針移到 元素e:
- 如果計數器爲0時,我們設置當前候選至e和我們的 計數器設置爲1。
- 如果計數器不是0,我們根據e是否是當前的 候選人,遞增或遞減計數器 。
當我們完成後,目前 候選人是大多數元素,如果 有一大部分。
如果我在一張紙上用這個算法AAACCBB
作爲輸入,建議的候選人將成爲乙什麼顯然是錯誤的。
在我看來,有兩種可能性
- 作者們從來沒有嘗試過任何東西比其他
AAACCBBCCCBCC
他們的算法,是完全不稱職,應該當場(doubtfull)被解僱。 - 我明顯錯過了一些東西,必須禁止從Stackoverflow和永遠不允許再觸摸任何涉及邏輯。
注意:這裏是一個來自Niek Sanders的C++ implementation of the algorithm。我相信他正確地實施了這個想法,因此它有同樣的問題(或者不是嗎?)。
發生在每個人。不要太嚴格地執行第2點從你的答案:) – 2009-04-23 09:32:27
帶了我好幾分鐘:P – Blorgbeard 2009-04-23 09:32:54
好吧,現在我明白了。該算法規定「這個算法決定一個序列的哪一個元素是大多數」。一開始就忽略了大部分內容,並且假設它談論出現最多次數的元素。這裏的大部分意味着元素應該至少出現「元素數量」一半的一半! – texens 2013-09-03 21:00:42