2012-03-01 3 views
0

グラフ検索(AとBが接続されているかどうか)を実行し、単一の配列を使用してログ時に接続(接続AとBを接続)できますか?グラフ検索と接続操作のための単一の配列を使用してログ時間の複雑さを得ることができますか?

私のようないくつかのアルゴを学んだ:

は迅速(ルックアップで接続して、一定時間内に線形時間)を見つける - (一定の時間がに接続して、平均N/2つのアレイ

迅速組合をルックアップ) - 単一配列

加重和(ルックアップと定数接続時間でのログ時間)しかし、このアルゴリズムでは2つの配列、1つはノード、もう1つは各ノードに接続されたノードの数が必要ですオード。

私は好奇心を求めています。単一の配列を使用して、加重和集合の複雑さを得ることは可能ですか?

答えて

3

Disjoint-Setを使用できます。これはフォレストとして機能しますが、ノードごとにrootフィールドの代わりに配列を使用して、常にrootsの配列を使用してこのフォレストを実装できます。

この実装のarmotized複雑さがサブ対数あり、そして多くの場合、あなたが望むものO(log*(n))

+1

これはO(log * n)よりも優れています。それはO(alpha(n))です.αはAckermannの逆関数であり、ゆっくりと成長し、実用的に入力できるあらゆる入力に対して効果的に5になります。 – templatetypedef

+0

@templatetypedef:これは 'log(n)'と似ています。これは 'log(log(....(n)..))'です。私はそれが間違っているかもしれませんが、私は簡単な説明をしてくれますか? – amit

+0

私の理解は、アッカーマンの逆数はlog *よりも漸近的に小さいということです。私はそれを再確認する必要があります。 – templatetypedef

1

として標識されるDisjoint-Setです。あなたは非常に簡単な説明を見つけることができますhere

関連する問題