Вы находитесь на странице: 1из 12

7.

Repr e z e n t a r e a muli mil or disju n c t e


Fie mul ime a U = {1, 2, ... , n }, n 1. Defi ni i e Siste m ul S = {S 1 , S 2 , ... , S k }, k 1, cons titui e o partiie a mulimii U dac sunt nde plinit e urm t o a r e l e condiii : 1. Si U i{1, 2, ... , k} 2. Si i{1, 2, ... , k}

. Si S! = i!, i, ! {1, 2, ..., k} ". S1 S2 ... Sk = U. #at $iind mulim e a U %i S = {S 1 , S 2 , ... , S k } o partiie a mulimii U, pro&le m a const n a proiect a o struct ur de dat e care s per mit e'ec u t a r e a e$icient a urm t o a r e l or dou oper a ii $und a m e n t a l e : ( find(x) : det er mi n mulim e a SiS creia i apar in e ele m e n t ul ', ' U) - union(S i, S j) : reun e % t e mulim e a S i cu mulim e a S !, o&in* n d u( se un nou ele m e n t al mulimii S, ce +a nlocui S i %i S !. Obser va i e ,ceas t pro&le m est e cunos c u t %i su& denu mir e a de proble m a clas elor de echivale n -', . se +or nu mi ec/i+ale n t e dac apar in aceleia %i mulimi S iS, sau, alt$el spus $ind-'0 = $ind-.00, conce p t el e de relaie de ec/i+ale n %i partiie repr e1 e n t * n d dou a&ord ri di$erite ale aceleia %i struct u ri mat e m a t i c e . #e e'e m pl u, dat $iind un 2ra$ neorie n t a t , comp o n e n t e l e cone' e ale 2ra$ului cons tituie o partiie a mulimii +*r$urilor 2ra$ului. Un al2orit m de det e r mi n a r e a comp o n e n t e l o r cone' e ale unui 2ra$ neorie n t a t poat e $i $ormul a t cu a!utorul oper a iilor union - find 3 :

4ro2r a m ul Desco m p u n e r e - n- om p o n e n t e - one x e de la s$ * r5 itul capitolului cure n t reali1e a 1 6 desco m p u n e r e a n com p o n e n t e con e' e a unui 2ra$ neorie n t a t , utili1 * nd oper a iile union( $ind.
3

!entru i{", #, $$$ , n}, Si :% &i'( !entru )i, j* m uc hi e n +raf , -% find(i)( . -% find(j)( dac , . atunci union(,, .)( 7'ist di+ers e posi&iliti de repr e1 e n t a r e a mulimilor : 1. repr e1 e n t a r e a mulimilor prin +ectorul caract e ris tic: $iecar e mulim e , S este repr e1 e n t a t cu a!utorul unui +ector de n &ii ast$el: Ai = 0, iA 1, iA 8 ast$el de repr e1 e n t a r e est e a+a n t a! o a s n ca1ul n care dorim s +eri$ic m apar t e n e n a unui ele m e n t la o mulim e . #e as e m e n e a , reuniun e a %i inters e c i a se reduc la oper a iile de dis!uncie, res p e c ti+ con!unci e lo2ic pe &ii a +ectorilor caract e ris tici, dar timp ul de e'ec u i e est e proporion al cu n, dime n si u n e a mul imii uni+ers U, nu cu nu m r ul de ele m e n t e din cele dou mulimi. 2. 8 alt soluie ar $i repr e1 e n t a r e a $iecr ei mulimi prin lista ele m e n t e l or sale. 9n ipote1 a c e'ist o relaie de ordine ntre ele m e n t e l e mulimii %i c primul ele m e n t din mulim e est e repr e1 e n t a ti+, oper a i a find(x) nec e sit un timp const a n t , iar timpul de e'ec u i e a oper a iilor de reuniun e %i inters e c i e est e propor ion al cu su m a cardin al elor celor dou mulimi. . 8 soluie e$icient est e repr e1 e n t a r e a mulimilor dis!unct e cu a!utor ul ar&orilor cu rd cin . Fiecar e ar&or e repr e1int o mulim e , iar $iecar e nod din ar&or e un ele m e n t al mulimii. :dcin a ar&or elui +a $i ele m e n t ul repr e1 e n t a t i+ al mulimii. #e e'e m pl u , dac n = 1;, o partiie a mulimii {1, 2, , ", <, =, >, ?, @, 1;} e s t e : S 1 = {1,>,?, @ } S 2 = {2,<,1 ; } S = { ,",= } 4artiia S = {S 1 , S 2 , S }po a t e $i repr e1 e n t a t ca o
2

R S T

pdur e $orma t din trei ar&ori :

Fi2. 1. :epr e1 e n t m ar&orii prin re$erin e asce n d e n t e , deci pentr u $iecar e nod din ar&or e, cu e'ce p i a rd cinii, reine m le2t ur a spre print el e su : tata( x) = 0, dac ' este rdcina ar&orelui nodul printe al lui ', alt$el 8per a i a find(x) cons t n a det er mi n a ar&or elui al crui nod est e '.

R | S | T

rd cin a

fun c ti o n find ( x: int e g e r ) : int e g e r !egin " #il e tat a $ x % & ' do x := tat a $ x % find := x // tata(x)% 0 dac 1i nu m ai dac x est e rdcin en d 8per a i a union se poat e reali1a trans$or m * n d unul din ar&ori n su& ar & o r el e celuilalt. :euniun e a S 1 S 2 poat e $i repr e1 e n t a t n dou mod uri :

Fi2. 2. #eci rd cin a unuia din ar&ori de+in e print el e rd cinii celuilalt ar&or e. proc e d u r e unio n ( i , j: int e g e r ) //proce d ur a nlocuie1 t e muli mile disjunct e repre2 e n t a t e prin arborii //cu rdcinile i, resp e c ti v j, cu reuniun e a lor av3n d rdcina j !egin

tat a $ i % := j en d ,ce%ti al2orit mi sunt $oart e simpli, dar nu sunt e$icieni. S consid e r m , de e'e m pl u partiia S = {{1 } , {2},...,{ n } } . #eci con$i2ur a i a iniial cons t dintr( o pdur e n care $iecar e ar&or e est e $orm a t doar din rd cin : tat a-i0 = ;, i{1, 2,.., n }. S consid e r m acu m urm t o a r e a sec+ e n de oper a ii union %i $ind : union-1,20, $ind-10, union-2, 0, $ind-10, union- , "0, $ind-10, ... $ind-10, union-n( 1, n0. ,ceas t sec+ e n conduc e la urm t o r ul ar&or e de2 e n e r a t :

Fi2. . Aum timp ul nec e s a r oper a i ei union est e const a n t , cele n( 1 oper a ii union au timpul de e'ec u i e de 8-n0. #ar $iecar e oper a i e $ind-10 parcur2 e tot dru m ul de la nodul 1 p*n la rd cin . Aum timp ul de e'ec u i e nec e s a r oper a i ei $ind pentr u un nod de pe ni+elul i est e 8-i0, o&in e m un timp de e'ec u i e de 8-n 2 0 pentr u cele n( 2 oper a ii $ind-10. 4ute m m&un t i e$icien a oper a iilor union %i $ind, aplic*n d urm t o a r e a re+ul de pond er ar e pentr u union-i, !0: dac num r ul de ni+eluri din ar&or el e cu rd cin a i est e mai mic dec * t nu m r ul de ni+eluri din ar&or el e cu rd cin a !, atunci ! +a de+ e ni print el e lui i, alt$el i +a de+ e ni print el e lui !. Utili1*nd ace a s t re2ul sec+ e n a de oper a ii union %i $ind de mai sus +a cond uc e la urm t o rii ar&ori :
"

Bniial union-1,20

union-2, 0

union-$ind-n( 10,n0

Fi2. ". 9n ace s t ca1 timp ul de e'ec u i e nece s a r oper a iilor $ind est e 8-n0, deo ar e c e ar&orii o&inu i au nlim e a cel mult e2al cu 1. Cotu%i, e'ist ca1uri mai de$a+or a &ile. #e e'e m pl u, $ie n = ?. Bniial +om a+e a pd ur e a :

union-1,20

union- ,"0

union-<,=

<

union->,?0

. union-2,"0

union-=,?0

union-2,=0

Fi2.<. 9nlim e a ar&or elui o&inut est e = lo2 2 ?. (em a ). #ac , est e un ar&or e cu n noduri o&inu t n urm a aplicrii oper a i ei union $olosind re2ula de pond e r a r e , nlim e a ar&or elui , est e cel mult e2al cu Dlo2 nE. De m o n s tr a i eFom proc e d a prin inducie dup n, num r ul de noduri.
=

4entru n = 1, re1ulta t ul est e e+ide n t . 4resu p u n e m a$irma i a ade+ r a t pentr u ar&ori cu i noduri -1 i n( 10, o&inu i n urm a aplicrii al2orit m ul ui union. S de m o n s t r m c nalim e a oricrui ar&or e cu n noduri ,n , o&inu t n urm a aplicrii al2orit m ului union est e cel mult e2al cu Dlo2 nE. Fie union-!, k0 ultima oper a i e union e'ec u t a t pentr u o&in er e a ar&or elui ,n . Got m cu m num r ul de noduri din ar&or el e cu rd cin a !. ,r&orele cu rd cin a k are m( n noduri. 4ute m pres u p u n e , $r a restr * n 2 e 2en e r alit a t e a , c 1 m nH2. #eci nl ime a / a lui ,n +a $i e2al cu nlim e a ar&or elui cu rd cin a k sau cu o unitat e mai mar e dec * t nlim e a ar&or elui cu rd cin a !.

Fi2. =. 9n primul ca1: / Dlo2 -n( m0E Dlo2 nE. 9n al doilea ca1: / Dlo2 mE Dlo2 -nH20E I 1 Dlo2 nE. J.7.#. 4entru a aplica re2ula de pond e r a r e est e nec e s a r ca pentr u $iecar e ar&or e s cuno a % t e m num r ul de ni+eluri. Fie /, un +ector n care /DiE repr e1int nu m r ul de ni+eluri din ar&or el e cu rd cin a i. ,cest +ector +a $i actu ali1at e+e n t u al la oper a ii union. procedure union*ponderare(x, +: integer) //ex e c u t operaia de reuniun e a muli milor repre2 e n t a t e prin arborii //cu rdcina x, resp e c ti v 4, aplic3nd re+ula de pond er ar e !egin if #$x% & #$+% t#en tata$+% := x
>

else !egin tata$x% := + if #$x% = #$+% t#en #$+% := #$+%,) end end Kema 1 2ar a n t e a 1 un timp de e'ec u i e de 8-lo2 n0 pentr u oper a i a $ind-'0, pentr u orice nod ' dintrLun ar&or e o&inut prin oper a ii union $olosind re2ula de pond e r a r e . 4entru a m&u n t a i n continu a r e timp ul de e'ec u i e a oper a i ei $ind-'0, +om utili1a urm t o a r e a re+ul de co m pr e si e : orice nod . de pe dru m ul de la rd cin a ar&or elui la nodul ' +a de+ e ni $iu al rd cinii ar&or elui. function find*compresie(x: integer): integer //det er m i n rdcina arborelui din care face parte nodul x 1i aplic //re+ula de com pr e si e -ar r, +, t: integer !egin r := x "#ile tata$r% & ' do r := tata$r% + := x // r est e acu m rdcina arborelui "#ile + r do //aplic re+ula de com pr e si e !egin t := tata$+% tata$+% := r + := t end find := r end Funcia find5co m p r e si e parcur 2 e dru m ul de la nodul ' la rd cin de dou ori, o dat pentr u det er mi n a r e a rd cinii, a dou a oar pentr u compri m a r e a dru m ul ui de la ' la rd cin . Cotu%i, ace a s t modi$icar e repr e1int o m&un t ir e , deo a r e c e ntrLo sec+ e n de
?

oper a ii union( $ind, timpul total de e'ec u i e +a $i mai mic. S consid er m ar&or el e o&inut prin sec+ e n a de oper a ii union din e'e m pl ul prec e d e n t 7'ecut * n d prima oar oper a i a $ind-?0 o&in e m ar&or el e :

Fi2. >. ,u $ost nec e s a r e depla s ri pe le2t uri asce n d e n t e pentr u a identi$ica rd cin a ar&or elui %i apoi, pentr u compr e si a dru m ului de la rd cin la nodul ? alte dou depla s ri. #ar urm t o a r el e ap eluri ale $unciei $ind-?0 +or nece sit a o sin2ur depla s a r e p*n la rd cin a ar&or elui. ,st$el costul total al unei sec+ e n e de oper a ii $ind-?0 +a $i mai mic. 9n 1@>< Car!an a de m o n s t r a t o lem ce caract e ri1 e a 1 comp o r t a r e a n ca1ul cel mai de$a+or a &il a al2orit milor union( $ind care utili1ea1 re2ula de pond e r a r e %i re2ula de compr e si e . (em a . . Fie C-m, n0, m n, timpul nec e s a r n ca1ul cel mai de$a+or a &il e'ec u t rii unei sec+ e n e de m oper a ii $ind %i n( 1 oper a ii union, utili1*nd re2ula de pond e r a r e %i re2ula de compr e si e . ,tunci C-m, n0 est e de O(m (m ,n)), und e -m, n0 = min{1 1 M ,-1, " mHn 0 N lo2 2 n}. Obser va i e 4rin , am nota t $uncia lui ,cker m a n n y+1, dac\ x=0 A( x1,1), dac\ y=0 A( x, y) = A( x1, A( x, y1)), altfel

R | S | | T

Funcia nu est e in+ers a $unciei lui ,cker m a n n n cel mai ri2uros sens mat e m a t i c, dar $uncia cre% t e tot at* t de ncet, pe c*t $uncia lui ,cker m a n n de rep e d e . #e e'e m pl u, -m,n0 , pentr u lo2 n O ,- ,"0. #ar ,- , "0 = #eci, n practic , put e m consid er a -m, n0 . /xerci ii ). #escriei n lim&a!ul 4asc al al2orit mii cores p u n 1 t o ri oper a iilor u nion %i find pentr u ca1ul n care mulimile sunt repr e1 e n t a t e prin liste simplu nlnuit e ce conin ele m e n t e l e mulimilor. Aonsider a i c ele m e n t e l e mulimilor sunt ordon a t e %i c primul ele m e n t est e repr e1 e n t a t i+. ,nali1ai comple 'it a t e a al2orit milor. .. Fie n= 1 < %i partiia S = {{1 } , { 2 } ,...,{ 1 < } } . Aonstr uii ar&orii o&inui n urm a aplicrii urm t o a r e i sec+ e n e de oper a ii union - fiind : union-1,20, union- ,"0, union-<, =0, union->, ?0, union-2,@0, union-",1 ;0, union-=,1 10, union-?,1 20, union-1 , 1 "0, union-1 ", 1 <0, union-@,1 ;0, union-1 1, 1 2 0, $ind-10, union-1 ;, 1 <0, union-1 <, 1 1 0, $ind-20, $ind-<0, $ind-<0, $ind-<0. Aonstr uii ar&orii cores p u n 1 t o ri aceleia %i sec+ e n e utili1*n d re2ula de pond e r a r e . ,poi re1ol+a i ace e a % i pro&le m a , dar utili1*n d at* t re2ula de pond e r a r e c*t %i re2ula de compr e si e . 7+aluai costul sec+ e n ei de oper a ii n cele ca1uri. 0. Fie n, nu m r nat ur al %i S = {{1 } , {2} , ......... , {n} } . 4reci1ai o sec+ e n de n( 1 oper a ii union %i m oper a ii $ind care s nec e sit e un timp de e'ec u i e de 8-m lo2 n0, atunci c*nd aplic m doar re2ula de pond e r a r e .

1;

1nex2
program Descompunere_in_Componente_Conexe;
const NMaxVf = 20; NMaxMuchii = NMaxVf*(NMaxVf-1) div 2; type Vf = 0..NMaxVf; NrMuchie = 1..NMaxMuchii; Muchie = record x y! Vf; end; "raf = array#NrMuchie$ of Muchie; var n cx cy! Vf; %n-nu&aru' de varfuri( & i! NrMuchie;%&-nu&aru' de &uchii( )! "raf;%)rafu' repre*entat prin &atricea &uchii'or( c! array#Vf$ of Vf; %c#i$ = 0 daca i este repre*entantu' co&p. conexe din care face parte; + daca + este parinte'e 'ui i in ar,ore'e ce repre*inta co&ponenta conexa a 'ui i( h! array#Vf$ of Vf; %h#i$ = nu&aru' de nive'uri din ar,ore'e ce repre*inta co&ponenta conexa a 'ui i( procedure citire; var f! text; i! NrMuchie; +! Vf; ,e)in assi)n(f -conex.in-); reset(f); read'n(f n &); for i != 1 to & do read'n(f )#i$.x for + != 1 to n do ,e)in c#i$ != 0; h#i$ != 1; end; c'ose(f); end; function find(a! Vf)! Vf; var r t nod! Vf; ,e)in r != a; .hi'e c#r$ / 0 do r != c#r$; nod != a; .hi'e nod 0/ r do

)#i$.y);

11

,e)in t != c#nod$; c#nod$ != r; nod != t; end; find != r; end; procedure union(a ,! Vf); ,e)in if h#a$ / h#,$ then c#,$ != a e'se ,e)in c#a$ != ,; if h#a$ = h#,$ then h#,$ != h#,$11 end end; procedure afisare; var i + nr! Vf; ,e)in nr != 0; for i != 1 to n do if c#i$ = 0 then ,e)in inc(nr); .rite(-2o&ponenta conexa - nr - ! -); for + != 1 to n do if find(+) = i then .rite(+ - -); .rite'n end; read'n end; ,e)in %pro)ra& principa'( citire; for i != 1 to & do ,e)in cx != find()#i$.x); cy != find()#i$.y); if cx 0/c y then union(cx end; afisare; end.

cy);

12

Вам также может понравиться