主元素問題解法--蒙特

算法課上老師在講分治法時提到了主元素算法,一時心血來潮搜了一搜,沒想到解法真是不少。這裏整理了幾個較爲常見的,最後會給出蒙特卡洛的解法。

解法1:假設第一個元素爲主元素,遍歷數組,若數組元素值等於所假設的主元素,則count++(count初始化爲0),若count<0 ,則將當前的數組元素設置爲主元素,若count>size/2,則找到主元素,返回,直至遍歷完成整個數組。最後遍歷一遍數組驗證假設的主元素是否爲真正的主元素,時間複雜度O(n)

解法2:與解法一類似,同時去掉兩個不同的元素,數組的主元素是不變的,這種方法也需要驗證最後留下來的元素是不是真正的主元素。

解法3:用數組或者哈希表來分別存儲元素和重複的次數。

解法4:
隨機算法之蒙特卡羅:
1首先在0~size-1之間生成一隨機數,然後遍歷數組看這個元素是否爲主元素,是則返回true,否則false,
2.多次調用1這個函數(至於到底調用多少次,接下來會講),若在有限次內沒有找到主元素,則認爲主元素不存在;
具體調用多少次參見王曉東算法p229,因爲在證明上我還有些疑問,等搞清楚再來填這個坑!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章