graphs
.pdf" . ,
.
, ,
. .
:
|
, |
||
|
|
, , |
|
|
|
. |
|
|
|
|
. |
" " " .
, " " . ,
, ( . , ).
, " " ( ,
— ), . ,
,
, " " .
, ,
:
, , —
.
, ,
.
, , — ,
:
. , ( )
, ,
.
, , .
— " ",
.
,
,
. , , " "
, ,
. .
. N ( ,
— 0 N-1). .
, 1 . ,
.
: , :
MakeSet(X) — X, 1 . Find(X) — , X.
— .
, ,
:
if (Find(X) == Find(Y)).
Unite(X, Y) — , X Y, .
.
DSU Bernard Galler Michael Fischer 1964 ,
( ) 1975.
, , .
, DSU .
, —
, . ,
.
p,
X — ).
DSU:
MakeSet(X)
X, , ,
.
public void MakeSet(int x)
{
p[x] = x;
}
Find(X)
.
, .
: ( )
O(N), . . ,
, ,
. —
(Unite) ,
O(N).
:
. DSU, (path compression).
: , , X
.
. , Find
.
Find(3). — ,
. . ,
.
|
|
|
|
|
|
|
: |
public int Find(int x)
{
if (p[x] == x) return x; return p[x] = Find(p[x]);
}
Unite(X, Y)
.
Find. , ,
, (
) .
— .
: ? , , X,
: , N —
N . DSU,
.
Rank.
— . , —
Find ,
. Rank ,
.
: DSU,
. — ,
. Rank.
|
|
|
|
Unite |
( , |
|
|
8 |
|
19):\ |
|
|
|
|
|
|
|
|
|
public void Unite(int x, int y)
{
x = Find(x);
y = Find(y);
if (rank[x] < rank[y]) p[x] = y;
else
{
p[y] = x;
if (rank[x] == rank[y]) ++rank[x];
}
}
, O(N)
. — ,
, .
DSU, ,
.
C++:
public void Unite(int x, int y)
{
x = Find(x);
y = Find(y);
if (rand.Next() % 2 == 0) swap(x, y);
p[x] = y;
}
,
— . MakeSet —
O(1). .
1975 . : Find, Unite N
O( (N)).
(N) , , , f(N) = A(N,
N). A(N, M) , . , A(4, 4) = 22265536-3, . , N
5. O( (N)) O(1).
, :
MakeSet(X) |
O(1) |
Find(X) |
O(1)- |
Unite(X, Y) |
O(1)- |
|
O(N). |
DSU .
— ,
, . .
. ,
, .
:
DSU. DSU N ,
. ;
— .
— .
( ,
), « » «
?» .
. ,
, . DSU.
:
«flashback- », DSU;
.
: .
:
, , .
. , ,
DSU), ( ).
: , ; ,
.
Find(X), , ,
.
, path compression.
1: path splitting.
( ).
2: path halving. path splitting, ,
, — « ».
, Find(3).
path splitting, — path halving.
:
Undo, .
DSU , ,
, (
).
persistent,
, .
DSU
. , 2007 Sylvain Conchon JeanChristophe Filliâtre , Unite
. , ,
, , persistent DSU —
.
— , « »:
, , ,
. ,
O(log2 N) , DSU
.
.
. ,
, ( . )
.
.
, ,
.
, . ,
(
).
.
, )
. (
)
,
.
(Kruskal) 1956 .
,
, .
, ( ).
: ( ),
, ,
. ,
.
" " (DSU),
O (M log N).
, , .
( . ) DSU MakeSet -
O (N). ( ) O (1)
, ( FindSet O (1)).
, Union - O (1).
O (M log N + N + M) = O (M log N).
11.
.
,
. ,
.
12.
. , , ,
– ,
. ,
, 1 .
13.
. ,
100, . ,
. , 1,
.
, 1 0, –
.
14.
, ,
.
. . ,
« » .
, .
15.
,
. . .
. , ,
. , ,
, . ,
, , .
.
, ,
.
16.
, , ,
. . ,
.
. ,
, . .
17.
2 1(
, 1 ). :
, .
+ 1 .
18.
(DSU) .
,
. , n.
. (x, y) , x y
. , 1.
1 ( ),
.
19.
.
. ,
O (M log N).
20.
, , .
.