シーケンスの主要素を探しています。


http://yilee.info/major-element-algorithm.html
http://www.cnblogs.com/ly772696417/archive/2012/03/22/2410921.html
主元素とは何ですか?具体的には、配列A[1.n]の半分以上の要素が同じである場合、配列は主要素を含むと呼ばれる。(a)有効アルゴリズムを設計して、この配列に主要素が含まれているかどうかを決定します。(b)線形時間アルゴリズムを提示してもいいですか?
この配列の要素間に順序が存在しない可能性があることに注意してください。すなわち、「A[i]の大きさで判断しますが、同等かどうかの判断ができます。一般的なアルゴリズムは2つのforサイクルを必要とし、各数字の個数を算出するのが簡単であり、ここでは与えられず、時間の複雑さはO(n^2)である。
 
まず、サイズを比較してみます。
時間複雑さは線形O(n)であり,分割法の線形時間依存主要素アルゴリズムに基づいている。アルゴリズムの中央値:数列の並べ替えの後、真ん中の数に位置します。数列に主要素があるなら、その中の桁数は必ず必要です。数列に主要素があるかどうかを求めて、桁数が主要素であるかどうかを見てください。中央値を求める方法:分割点として要素を選択して、それより小さいものを左に移動し、右に移動します。このようにして要素を二つの部分に分けます。このとき、要素の位置を区切るのはkです。k>n/2の場合、同じ方法で左の部分を探し続けます。kが右側にあると探します。k=n/2は中位元素を見つけました。高速秩序化の考え方によれば、平均時間の複雑度がO(n)の時間内に、一列の中央値を見出すことができる。そしてO(n)の時間を使って,それが主要素であるかどうかを調べた。C言語のソースコードは以下の通りです。
int partition(int a[],int low,int high){    
	int pivotkey = a[low];    
	while(low=pivotkey)           
			-–high;        
		if(lown/2)           
			quick_sort(a,low,position-1);       
		else if(position n / 2)      
		printf("      %d     %d  
",mid,count); else printf("
"); system("pause"); }
 
下で開けます。大きさを比較できないなら、同じかどうかだけ比較できます。
次を見てみましょう。無秩序であれば、大きさのアルゴリズムを比較できません。具体的な思想は「一つのセットの中で、二つの異なる数を削除すれば、集合の主要素は変わらないままになります。」最後に残った要素だけがメイン要素かもしれません。
#include 
int getMainElement(int a[],int len){
	int i,mainElement,repeatTimes = 0;

	//             ,      
	for(i = 0;ilen/2)
			printf("%d
",mainElement); else printf("None
"); } return 0; }