(C) Rudolf Marek

Semestrální práce z TI

Zadání 5.4.1

Nech» jsou v grafu G=<H,U> zadány dvì disjunktní podmno¾iny hran , pro které je tøeba nalézt fator T = <H',U> grafu G s minimální sumou ohodnocení hran takový, ¾e platí:

(a) Navrhnìte vhodnou úpravu algoritmù urèení min. kostry, pomocí které se získá algoritmus øe¹ení této roz¹íøené úlohy a urèete jeho asymptotickou slo¾itost.

(b) Urèete, za jakých podmínek bude nalezený faktor T kostrou grafu G

Návrh øe¹ení

Faktor grafu, který máme nalézt, má dle zadání obsahovat v¹echny hrany z mno¾iny B, naopak nemá obsahovat hrany z mno¾iny A. Pokud nebudeme uva¾ovat zápornì ohodnocené hrany tak øe¹ením je pøekvapivì faktor T = <B,U>. Pokud budeme uva¾ovat zápornì ohodnocené hrany pak je do øe¹ení zahrneme také (B+). Nalezený faktor bude kostrou právì tehdy nebude-li B nebo B+ obsahovat kru¾nice.

Zdá se, ¾e v zadání mé semestrální práce je nìco ¹patnì a tak pokud budeme chtít pou¾ít algoritmy pro nalezení min.kostry tak pouze za pøedpokladu, ¾e v øe¹ení pøipustíme hrany které nejsou v B a ani v A, ale mají men¹í váhu ne¾ MAXw(B).

Abychom toto zaøídíli pøiøadíme nechtìným hranám váhu oo a naopak hranám ¾ádaným váhu 0. Oba algorimy (Jarník-Prim, Borùvka-Kruskal) musíme je¹tì modifikovat tak aby skonèili právì ve chvíli kdy jejich èásteèné øe¹ení splòuje podmínku zadání. První modifikace algoritmù spoèívá v pøidání dvou for cyklù na zaèátek ka¾dého z algoritmù. Tyto for cykly modifikují jen ohodnocení tìch hran v mno¾inì H, které patøí do A nebo B dle navrhovaných zmìn. Dále pro algorimus Borùvka-Kruskal zmìníme pouze øádek 5 (viz skripta str 100), tak abychom skonèili právì tehdy, bude-li splnìna zadávající podmínka.

5 for ka¾dou hranu [u,v] z H v poøadí neklesajících vah maximálnì v¹ak do MAXw(B)

Tím zajistíme ¾e se ve faktoru neobjeví hrany, které by zvy¹ovali jeho min. ohodnocení.

Pro algoritmus Jarník-Prim bude postup obdobný, ale jeliko¾ tento algorimus postupuje pøi tvoøení min. kostry (faktoru) spojitì mù¾e se se stát ¾e budeme muset pøejít pøes nìjakou hranu její¾ ohodnocení bude vìt¹í ne¾ MAXw(B), abychom do øe¹ení zahrnuli i hranu z mno¾iny B, ke které bychom se jinudy nedostali. Proto kdykoli do øe¹ení zahrneme hranu z mno¾iny B poznamenáme si to. (napø do mno¾iny X) Algoritmu dovolíme pøidávat i hrany s vìt¹ím ohodnocením ne¾ je MAXw(B) pokud se mno¾iny X a B neshodují. Jestli je X = B nebudeme nic pøidávat a pøípadnì mù¾eme i skonèit.

8 if X!=B then if and (w(u,v)<d[v])

9 then p[v]:=u; d[v]:=w(u,v);

10 if then

Algoritmy

Upravený algoritmus Borùvka - Kruskal:

KB-MST-MOD(G,w,A,B)

0 v¹em hranám z A zmìò w na oo, z B zmìò na 0

1 Z:=

2 for ka¾dý uzel

3      do MAKE-SET(u)

4 uspoøádej H do neklesající posloupnosti podle váhy w

5 for ka¾dou hranu [u,v] z H v poøadí neklesajících vah maximálnì v¹ak do MAXw(B)

6     do if FIND-SET(u)!=FIND-SET(v)

7         then Z:=

8             UNION(u,v)

9 return(Z)

Upravený algoritmus Jarník - Prim:

JP-MST-MOD(G,w,r,A,B)

0 v¹em hranám z A zmìò w na oo, z B zmìò na 0

1 Q = U

2 for ka¾dý uzel

3     do d[u] = oo

4 d[r] = 0 p[r]=NIL

5 while do

6     u = EXTRACT-MIN(Q)

7     for ka¾dý uzel do

8         if X!=B then if and (w(u,v)<d[v])

9         then p[v]:=u; d[v]:=w(u,v);

10             if then

Èasové slo¾itosti

Èasová slo¾itost algoritmu Borùvka - Kruskal závisí (podle skript) na zpùsobu implementace øazení a operací s mno¾inovým rozkladem. Proto¾e modifikovaný algoritmus skonèí je¹tì døív ne¾ jeho originál bude mít tedy nejhùøe stejnou èasovou slo¾itost. Tj V prùmìrném pøípadì bude slo¾itost algoritmu závistet na mohutnosti mno¾in A a B je¾ jsou disjunktními podmno¾inami H. Pro algoritmus Jarník-Prim je slo¾itost dána vztahem: Proto¾e ani mno¾inovými operacemi s novì pøidanou mno¾inou X nezhor¹íme tuto slo¾itost tak i øe¹ení této roz¹íøené úlohy bude mít v nejhor¹ím pøípadì tuto slo¾itost. Prùmìrná slo¾itost bude patrnì záviset na mohutnosti mno¾iny A a B.