實驗一 尋找多數元素

2021-09-29 17:09:28 字數 1411 閱讀 2005

實驗一:尋找多數元素

實驗題目1:尋找多數元素 (10.11日實驗) 要求:

(1)分別設計普通演算法和歸納法演算法,

(2)寫出**,並除錯成功

(3)給出乙個存在多數元素的陣列作為例子,執行**,輸出結果

在乙個整數序列裡,當某個元素a出現的次數多於(>)【n/2】的底數,則為多數元素。

暴力法:

把每個元素與其他的相比較,並計數,如果count>【n/2】的底數,則為多數元素。時間複雜度為o(n

2n^2

n2)。還有一種就是將其排序,如果存在多數元素,則陣列中間的值a【n/2】就是多數元素。取得這個值後還要掃瞄一遍確定count是大於【n/2】底數的。

觀察結論1:

在序列去除兩個不同(劃重點)的元素後,原序列的多數元素在新序列還是多數元素。

簡單解釋一下,一撥是給多數元素,另一撥是非多數元素。去掉兩個不同,第一種多數元素去乙個,非多數去乙個,還是多數元素;第二種多數不動,非多數去掉兩個,多數還是不變。第三種從多數元素去掉兩個,但是相同,所以與前提不符合。

演算法基本原理:

從第乙個元素開始,我們給它乙個count=1;代表當前元素已經有乙個了。

(1)下乙個元素如果與它相等,則count+1;

(2)不等,就count-1

如果所有元素都掃瞄完畢,且最終count>0則該元素作為候選多數元素返回。如果在沒有掃完的時候,count=0了,則從後乙個元素開始遞迴呼叫函式。返回的候選元素仍然需要再掃一遍陣列,看其個數是否大於【n/2】的底數。

元素不相等的時候,count-1相當於去除兩個元素,也就是抵消,當前和下乙個與它不相等的就抵消掉。count=0則這個元素被抵消掉了,從下乙個元素再開始。

#include

#define max 1000

#define none 0

using

namespace std;

intmajority1

(int

*a,int n)

if(count>

(n/2))

//大於n/2就是多數元素

return i;

}return none;

}int

candidate

(int

*a,int m,

int n)

if(j==n)

return c;

else

return

candidate

(a,j+

1,n)

;//從抵消後的一位開始

}void

majority2

(int

*a,int n)

int

main()

python尋找多數元素 尋找多數元素

今天實現的演算法是尋找多數元素,多數元素是指在乙個含有n個元素的序列 現次數多於 n 2 向下取整 的元素。蠻力尋找多數元素是對每個元素進行計數,如果某個元素的計數超過 n 2 則斷言它是多數元素,否則不存在多數元素。這種方法的時間複雜度過高,可以尋找更高效能的演算法解決這類問題。如果乙個序列存在多...

python尋找多數元素 尋找多數元素 演算法

定義 整型陣列a 1.n 如果整數x在陣列a 現的次數多於半數,則x稱為多數元素 應用概念 觀察結論5.1 在原序列中去除兩個不同的元素後,那麼在原序列中的多數元素在新序列中還是多數元素。例1 1,2,2,3,2,2,3 顯然2是多數元素 去除1,2,在2,3,2,2,3中2仍是多數元素 去除1,3...

演算法之道 尋找多數元素演算法(Java)

定義 整型陣列a 1.n 如果整數x在陣列a中出現的次數多於半數,則x稱為多數元素 應用概念 觀察結論5.1 在原序列中去除兩個不同的元素後,那麼在原序列中的多數元素在新序列中還是多數元素。例1 1,2,2,3,2,2,3 顯然2是多數元素 去除1,2,在2,3,2,2,3中2仍是多數元素 去除1,...