Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

graphs

.pdf
Скачиваний:
3
Добавлен:
21.02.2016
Размер:
477.89 Кб
Скачать

" . ,

.

, ,

. .

:

 

,

 

 

, ,

 

 

.

 

 

 

 

.

" " " .

, " " . ,

, ( . , ).

, " " ( ,

), . ,

,

, " " .

, ,

:

, ,

.

, ,

.

, , — ,

:

. , ( )

, ,

.

, , .

— " ",

.

,

,

. , , " "

, ,

. .

. 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.

, , .

.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]