互いに素セットとフラットで

 

 

それは理解の多くは、問題の解決策ではない、制限されています

 

このこんにゃくを見ていただきありがとうございます

 

 

互いに素セット(ユニバーサル基礎知識)
1:目的
もセット内かどうか、同じ任意の2点を検出するために使用されるあなたの親戚の親戚の親戚である目的互いに素セットが人気のポイント、理解することは非常に簡単です。
2:対策を実装する
限り、二つの点(2点が、コレクションのルートが配置されている)として、我々はすべてのポイントの初めにFA [i]の配列表現私の父を、定義することができる共通の祖先かどうかを判断するために主に達成する方法を父親は、彼自身の(収集点1点のみだけ各店舗の始まりを表すので、このコレクションは、ルートノード点であるように)例えばABなどの着信データを読み取り、いくつかのグループが続くと、点を表します点Bは、相対的です。次いで、FA [A] AのBまたはFA [B]の割り当てに割り当て?組み合わせAとBは2点のみを表すものではありませんが、それらの集合体が配置されているので、明らかに間違っています。たとえば:あなたと女の子は...祖母の祖父の祖父のプロ、古い祖母になったと、あなたは、以前の関係にあるセントを持っていないが、今おじいちゃんの祖母、あなたの祖父と祖母が...になっている人親戚、そしてあなたは彼女のコレクションをマージ何を表していますか。
3:マージポイントは、ルートノードのコレクションであり
、我々だけが、我々が(x)は、検索機能を定義見つけることができ、実際に理解するのは非常に簡単だった点の集合Xのルートノードを表し、発音するのは難しい聞こえるかもしれませんその後、xの父を尋ねていない場合は父親のポイントは、自分自身のための点xかどうかを尋ねるために...これまでのルートを発見された場合、このようなコードの一部があります:

コード:

1件の int型の検索(INT O)
 2  {
 3。     IF(FA == [O] O)リターン O; // 父親点Oポイントは、次いでルートノードが存在する点Oに応じて設定された場合
4。     復帰探す(FA [ O]); // そうでない場合は、点o父依頼する
5 }

4:フラットハンドル
データが大きすぎると、上記のコードは、再帰的なアイデアを見ることは難しいことではありませんが原因互いに素セットに、役に立たない廃棄物の多くの原因となりますルートノードとの間の関係は、合流点のセットのみを必要とし、我々は単にFAを設定します[i]はiは直接設定(他の点役に立たないので)のルートノードに割り当てられている場合、そのような元のコレクションがあると言います。

 

 

 

そして、このような治療後(代わりに楕円の使用上、真ん中より少ない何を描いていない)は以下のようになります。

 

 

 

この後、元の検索は二回しか(10)を再帰的に5回、及び平坦化処理を見つけます。実際には、コードを書くことは非常に簡単です:

コード:

1件の int型の検索(INT O)
 2  {
 3      IF(O == FA [O])戻りO;
 4      戻り FA [O] =検索(FA [O]); // セットに対する直接FA [O]割付ルートノード
5 }

 

おすすめ

転載: www.cnblogs.com/nlyzl/p/11776269.html