とのチェックに定義されたセット

互いに素なセット:データ構造のセットを維持する方法

合併タマネギ

第二に、検索の検索

初期化、検索(パス圧縮)、合併

ヒープ:基本的にバイナリツリー

互いに素セットのレビュー// 
//スタック審査
する#include <iostreamの> 
の#include <CStringの> 
の#include <cmath> 
の#include <アルゴリズム> 
書式#include <スタック> 
の#include <cstdioを> 
する#include <キュー> 
書式#include < >地図
の#include <ベクトル> 
の#include <SET> 
使用して名前空間STD; 
CONST INT MAXN = 1010; 
CONST INT = INF 0x3FFFFFFF; 
//互いに素なセットデータ構造:配列
FA INTを[MAXN]; 
//:探し、合わせた
最適化を見つける//:パスコンプレッサー
INT findfa(INT X){ 
	IF(!FA = X [X])FA [X] = findfa(FA [X]); 
	戻りFA [X]; 
} 
//マージ事実をそこにはまた、最適化され、そして時には選択値を確認する権利時間は合計重量の大きさに応じて組み合わせることが設定されている
ボイドINI(int型、int型B){ 
	int型= findfa FA1();  
	int型findfa FA2 =(B );
	!IF(FA1 FA2 = )FA [FA2] = FA1。
} FA2] = FA1場合、 
セット生成//互いに素セット:木

//スタック:
//ヒープベースのIS A特殊なデータ構造ツリー(木)、互いに素セット、実際には、ヒープの本質は木することができ
//一般的な高速データ構造:プライオリティキュー:
//デフォルトのプライオリティキュー:大きな山の頂上(独自の関数を記述していない)
PRIORITY_QUEUE <整数> Q1; 
//トップ小さなヒープ
PRIORITY_QUEUE <int型、ベクトル<整数>、グレーター<int型>> Q2; 
//一般的なデータ構造(機能の独自の種類を記述する必要があります)と

、あなた自身の書き込みに//関数が必要
int型のヒープを[MAXN]; //だけのようなヒープ
//しかし、ヒープのマスター双方向最大アップ頂部および底部に重要である
//スタックプロセスを構築:、上部下方調節から、しかし、調整は、N / 2から1に、後方全ての非リーフノードの調整を列挙する必要があります後方の調整が、調整は、トップダウンで
あってノードを削除//:(1、N-)、その後downjust調整し、第一の被覆最後の要素で、一番上のスタック要素を削除し
、ボイドdownadjust(低int型、int型の高){//下方修正:削除、ヒープ構造は、ヒープはソート
	、私は低を= int型J = 2 * I、
	しばらく(J <=ハイ){ 
		//子が存在する場合、そして子供たちと 値は、単にシフトした後、左側の子よりも大きい、と私は大きさを比較することで、その後の話します
		IF(J + 1 <=高&&ヒープ[J + 1]>ヒープ[J]。)J ++; 
		IF(ヒープ[J]>ヒープ[I]){ 
			//子が父親よりも大きい場合、それは交換する必要がある
			(交換ヒープ[J ]、ヒープ[I]); 
			Iは、Jが=、
			J = 2 * I; 
		} 
		そうBREAK; //そうでない場合は終了
	} 
} 
ボイドのcreate(){ 
	(INT I = 1; I <= N; I ++)CIN> > [I]ヒープ; 
	のための(INT I = N / 2、I> = 1; i--)downadjust(I、N-); 
} //後方調整:各ノードを満たすために親が彼にあります最大ノード
//上部スタック素子を除去
ボイドデル(){ 
	ヒープ[1] =ヒープ[N--]は、
	downadjust; //ヒープの最上部を調整(N-1)
} 
//の要素を追加すると、さらなる添加最後に顔、ボトムアップと調整し
、ボイドupadjust(int型ハイ、ローINT){ 
	私はハイ、ハイ= J / 2を= int型、
	しばらく(J> =低){ 
		//常に父の比較を、何のjはありません++あるいはj--は、直接比較をすることができる
		場合(ヒープ[J] <ヒープ {[i])と 
			、スワップ(ヒープ[J]、ヒープは、[I])は、
			I Jが=; //それが父親よりも小さい場合、交換
			J / = 2; 
		} 
		そうBREAK; 
	} 
} 
ボイドINSERT(INT X){ 
	ヒープ[N - ++] = X; //別の追加端
	upadjust(N ,. 1); 
} 
//スタックの上部を削除し、最後に追加
 
//ヒープソート
要素のスタックがので、スタックの最上位にすべての要素及び最後部のスイッチング素子ことが、決定された最大であるため、スタックの//トップ、そしてトップダウン調整からスタックの頂部から
@スタック要素のそれぞれの最大トップだけでなく、縮小の範囲ように除去される
空隙ヒープソートは(){ 
	()を作成し; //第一の反応器の構築
	のために(INT I =をN-; I> 1; i--){ 
		スワップ(A [I]、A [1]); //交換
		downadjust(1、I-1) ; // 範囲がさらに低減される
	} 
	。I;(INT I = 1 <= N; I ++)COUT <<ヒープ[I] << ""; 
	//が大きい順にもたらし
}

  

 

おすすめ

転載: www.cnblogs.com/shirlybaby/p/12274055.html