Sunteți pe pagina 1din 7

O.

Doma-Algoritm NP-complet pentru determinarea arborelui parial

ALGORITM NP-COMPLET PENTRU DETERMINAREA


ARBORELUI PARIAL CU NUMR MAXIM DE FRUNZE
Ovidiu Doma
Abstract. Searching algorithms are the most common for data structares like string,
heap or graph. We propose to solve a NP complete problem of searchiog in a large graph.
The algorithm try to find a lubstructure with properties in a real time.
Keywords. alghorithm, graph, tree, data structures
I. TEMA
Una din structurile de date care permit reprezentarea datelor i a legturilor dintre
ecestea este graful conex. De regul cutarea soluiilor unor probleme pe structuri
ramificate presupune un consum mare de timp i memorie. Ne propunem in
continuare s dm un algoritm care rezolv o problem de cutare a unei structuri cu o
anumit proprietate ntr-un graf..
II. PROBLEMA
Se consider un graf neorientat G=(X,U), conex, cu n noduri. S se determine unul
din arborii pariali A=(X, V), V submultime a lui U, ai grafului dat, a crui numr de
frunze este maxim. Exemplu:
Pentru exemplificare am ales un graf conex cu n = 8 noduri i 15 muchii, Fig. 1.

Fig. 1. Graf neorientat cu 8 vrfuri


Pentru graful de mai sus un arbore parial cu numr maxim de frunze este dat in
Fig.2.
31

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial

Fig.2. Arbore parial cu numr maxim de frunze


Date de intrare
n fiierul ARBORE.IN pe prima linie este scris un numr natural n (3 < n <
2000) reprezentnd numrul nodurilor. Pe urmtoarele n linii urmeaz descrierea
grafului, care va avea cel mult 10000 de muchii i este conex. Primul numr de pe cea
de a j+l-a linie precizeaz numrul de noduri k, adiacente cu nodul j. Dup acest numr
urmeaz k numere naturale xke{l,n}\{j} reprezentnd nodurile adiacente nodului j.
Datele scrise pe aceeai linie sunt desprite prin cte un spaiu.
Date de ieire
n fiierul ARBORE.OUT, pe prima linie se va sscrie numrul maxim de frunze.
Pe urmtoarele n-1 linii se vor scrie perechi de numere naturale (desprite printr-un
spaiu) reprezentnd muchiile arborelui avnd acest numr maxim de frunze, n cazul n
care exist mai multe soluii, se va preciza una singur. Ordinea n care se afieaz
muchiile i ordinea n care se precizeaz vrfurile muchiilor este oarecare.
Exemplu
ARBORE. CSI
8
3238
41568
41478
43567
3246
42457
43468
41237

ARBORE.OUT
5
18
28
38
78
76
46
56

32

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial


III. MODURI DE REZOLVARE
O prim idee se bazeaz pe observaia c problema, fiind NP-complet, ne
trebuie o strategie euristic, dar care va fi optimizat astfel nct s asigure o soluie ct
mai apropiat de optimul cerut
Algoritmul urmtor este de 2-aproximare (n cazul cel mai defavorabil rezultatul
este de cel mult de dou ori mai ru dect optimul cutat). Poate fi implementat pentru a
rula ntr-un timp liniar, folosind structuri de date simple. {Galbiati et. al [2] au demonstrat
c problema este MAX-SNP complet, i deci nu exist nici un algoritm de aproximare
n timp polinomial pentru problem, dect dac P = NP. }
Exist n literatura de specialitate rezultate precum: orice graf conex cu n vrfuri
i grad minim k=3 are un arbore de acoperire cu cel puin n/4+2 frunze. Pentru k=4 s-a
demonstrat c numrul de frunze este cel puin (2+8)/5 etc.
Algoritmul nostru folosete reguli de expansiune. Totui, atribuim prioriti
regulilor i le folosim pentru a construi o pdure n locul unui arbore. In mod
ntmpltor, pdurea F construit de regulile noastre este o pdure cu frunze, i deci
profitm de structura sa special pentru a construi un arbore de acoperire cu un numr
de frunze apropiat de cel al pdurii.
Informai, regulile de expansiune de prioritate mic folosite de algoritm mresc
numrul de frunze din pdure cu o cantitate mic, iar regulile de prioritate mare mresc
numrul de frunze al pdurii cu o cantitate mare. Putem demonstra c factorul de
aproximare al algoritmului este 2 artnd c fiecare regul de prioritate mic adaug pdurii
cel puin un vrf care trebuie s fie interior n orice arbore T' cu numr maxim de frunze.
Mai mult, aceast mulime de vrfuri interne este disjunct fa de mulimea
vrfurilor interne necesare pentru interconectarea subarborilor indui pe T' de vrfurile
acoperite de F. Aceasta este suficient pentru de demonstra marginea de 2 pentru factorul
de aproximare al algoritmului.
IV. ALGORITM
Fie G=(V,E) un graf neorientat conex. Notm cu m numrul de muchii i cu n
numrul de vrfuri al lui G. Fie T' un arbore de acoperire al lui G avnd un numr maxim
de frunze.
Algoritmul construiete nti o pdure F folosind un ir de reguli de
expansiune, ce vor fi definite imediat. Apoi arborii din F sunt conectai ntre ei,
formnd un arbore de acoperire T. Cnd arborii din F sunt unii, unele frunze ale lui F
devin vrfuri interne ale lui T. Spunem c o frunz din F este ucis dac ea devine un vrf
intern al lui T. Regulile de expansiune folosite pentru construirea lui F sunt concepute in aa
fel nct o mare parte din vrfurile lui F sunt frunze i cnd Teste format, se ucide cel mai mic
numr de frunze posibil din F.
Fiecare arbore Ti al pdurii F este construit alegnd nti un vrf cu gradul cel puin
3 drept rdcin a sa. (Dac n nu este foarte mare poate fi util o ordonare a vrfurilor n sens
descresctor dup gradele lor.) Apoi se folosesc regulile de expansiune. Aceste reguli sunt
aplicate frunzelor arborelui. Dac o frunz x are cel puin doi vecini ce nu se afl n Ti toi
vecinii lui x ce nu aparin arborelui Ti devin copii ai lui. Dac x are un singur vecin y care nu
33

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial


aparine lui T, i cel puin doi vecini ai lui y nu sunt n Ti atunci l punem pe y drept unic fiu al lui
x i toi vecinii lui y ce nu se afl n T, devin copii ai lui y. Cnd regula este aplicat unui vrf x
spunem c vrful x este expandat de regul.
Atribuim prioriti regulilor de expansiune dup cum urmeaz. Regula prin care se
expandeaz o frunz x care are un singur vecin y ce nu se afl n F i y are exact doi vecini ce
nu aparin lui F are prioritatea 1. Toate celelalte reguli de expansiune au prioritatea 2. Cnd
construim un arbore, dac dou frunze diferite pot fi expandate, este expandat prima cea care
poate fi expandat cu o regul de prioritate mai mare. Dac dou frunze pot fi expandate cu reguli
de aceeai prioritate, atunci se alege una n mod arbitrar pentru expansiune. Un arbore Ti, este
expandat pn cnd nici o regul de expansiune nu mai poate fi aplicat frunzelor sale.
Regula l adaug dou noi frunze unui arbore Ti i n acelai timp ucide o frunz din Ti.
Algoritm arbore(G)
F
F4-0
ct timp
exist un vrf v de grad cel puin 3
execut
Construiete un arbore Ti cu rdcina v i avnd ca frunze vecinii lui v
ct timp
cel puin o frunz din Ti poate fi expandat
execut
gsete frunza din Ti care poate fi expandat cu o regul de prioritate maxim
i se expandeaz
sfrit ct timp
F F Ti ,
Elimin din G toate vrfurile din Ti i toate muchiile incidente lor
sfrit ct timp
Unete arborii din F i vrfurile ce nu se afl n F pentru a forma un arbore de
acoperire T.

V. ANALIZA ALGORITMULUI
Fie F = { T0, ... , Tk } pdurea construit de algoritm, i fie X mulimea vrfurilor
neacoperite de F. Vom numi X mulimea vrfurilor exterioare. E uor de observat c un vrf exterior
nu poate fi adiacent unui vrf intern al unui arbore Ti. Regulile de expansiune ne permit s
demonstrm urmtoarele proprieti ale vrfurilor exterioare.
Lema 3.1 Fie G'=(V, E') graful format prin contractarea fiecrui arbore Ti F ntrun singur vrf i prin eliminarea muchiilor multiple ntre perechile de vrfuri. In G fiecare vrf
exterior are gradul cel mult egal cu 2.

34

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial


Demonstraie. S presupunem c exist un vrf v X care are gradul cel puin egal cu 3
n G'. S considerm 3 dintre vecinii lui v. Se observ c aceste 3 vrfuri nu pot fi vrfuri exterioare
pentru c atunci algoritmul arbore l-ar fi ales pe v ca rdcin a noului arbore. De aici, cel puin un
vecin al lui v se afl n F. Fie Ti , primul arbore generat de algoritm, care conine unul din vecinii u
ai lui v. Deoarece v este adiacent cu dou vrfuri ce nu se afl in Ti, algoritmul arbore l-ar fi
expandat pe u.
Lema 3.2 Fie u o frunz a unui arbore Ti F. Dac u este adiacent cu
dou vrfuri v, w Ti , atunci v i w sunt w frunze ale aceluiai arbore Tj F.
Demonstraie. Evident, v i w nu pot fi ambele vrfuri exterioare. De asemenea, nici v
nici w nu pot fi vrfuri interne ale unui arbore Tj , pentru c dac, de exemplu, v este un vrf intern
al lui Tj , atunci
1. dac algoritmul construiete arborele Tj naintea arborelui Ti atunci vrful u ar fi
plasat drept copil al lui v n Tj, i
2. dac Ti este construit primul, atunci v ar fi fost plasat drept copil al lui u. Pentru a
demonstra acest lucru trebuie s observm c fiecare vrf intern al unui arbore Tj F are cel
puin 3 vecini n Tj. . Astfel, vrful w ar fi fost expandat n timpul construirii arborelui Tj.
De aici, cel puin unul din vrfurile u, w trebuie s fie o frunz n F. Fie v o frunz ntrun arbore Tj. Fie p printele lui u n Ti. Dac w nu este o frunz n Tj, atunci putem presupune fr
a reduce generalitatea c, atunci cnd algoritmul arbore adaug vrful v arborelui Tj, vrful v nu
aparine lui F. Se observ c arborele Ti nu poate fi construit naintea lui Tj, pentru c algoritmul
1-ar fi plasat pe v i w drept copii ai lui u. Deci fie Tj construit naintea lui Ti. Atunci vrfurile u, p i
w nu se afl nc n F atunci cnd este construit Tj. Aceasta nseamn c algoritmul arbore 1-ar
expanda pe v i 1-ar plasa pe u drept copil al su n Tj . De aici, v si w trebuie s fie frunze n Tj.
A doua modalitate de rezolvare este de asemenea euristic.:
Iniial se marcheaz, toate nodurile cu 0.
Se alege nodul de grad maxim i se marcheaz fiecare vecin al acestuia cu l, i se
sper c dintre acestea unele vor rmne frunze.
Se parcurg pe rnd, n ordine descresctoare a gradelor, aceste noduri i se
procedeaz similar, nodurile care devin noduri interne se marcheaz cu 2.
Algoritmul se termin cnd nu exist nici un nod avnd marcajul 0.
VI. PROGRAMARE C
#include <stdio.h> tfinclude <stdlib.h>
#defineNMAX4000 #define MMAX 10000
int *1[NMAX+1], nl[NMAX+l], deg[NMAX+l],
m[NMAX+l];
int IsafNMAX], IsbfNMAX], nls;
int i j,k,t,n,max,nf,pr, nm;
35

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial


void citeste()
{
FILE* f= fopen("arbore.in","rt");
fecanf(f,"%d",&n);
for(i=l;i<=n;i++)
{
fscanf(f,"%d",&t);
nl[i]= t; if (0[i]= new int[t+l])==NULL) {puts("alloc err"); exit(l);};
for (k=l; k<=t; k++) ftcanf(f,1I%d",&l[i][k]);
}
fclose(f);
}
void mark(int a, int b)
{
nls-H-; lsa[nls]= a; lsb[nls]= b;
static int i;
for(i=l;i<=nl[b];i++) deg[l[b][i]]-;
nf++; nm-H-;
m[b]=l;
}
void rezolva()
{
for (i=l; i<=n;i-H-) deg[i]= nl[i];
pr=l;
while (1)
{
max=0; for(i=l;i<=n; i++)
if ((m[i]==l || pr) && deg[i]>max)
{
max= deg[i]; k=i;
}
if (pr) { mark(0,k); nls--; pr= 0; }
if (!max)break;
nf--;
m[k]= 2;
for(i=l;i<=nl[k];i++)
if(!ml[[k][i]])mark(k,l[k][i]);
}
if (nm<n) {puts("Neconex!");>;
}
void scrie()
}
FILE* f= fopenC'arbore.out.wt");
if (nm!=n) fputs(Neconex!\n,f);
fprintf(f,%d %d\n, nf);
36

O. Doma-Algoritm NP-complet pentru determinarea arborelui parial


for (i=l; i<=nls; i++)
fprintf(f, %d %d\n, lsa[i],lsb[i]);
fclose(f) ;
}
void main()
{
citeste();
rezolva();
scrie();
}
BIBLIOGRAFIE
[1] Cormen T.H., Leiserson E.C., Rivest R.R., Introducere n algoritmi, Editura
Libris Agora, 2000 (traducere n limba romn).
[2] Dahi O.J., Dijkstra E.W., Hoare C.A.R., Structured Programing,
Academic Press, 1972.
[3] Freniu M, Motogna S., Lazr L, Prejmerean V., Elaborarea algoritmilor,
Litografia Universitii "Babe Bolyai", Cluj Napoca, 1998.
Autor.
Ovidiu DOMA, Universitatea l Decembrie 1918", Alba lulia Alba lulia, e-mail:
ovidiu@uab.ro

37

S-ar putea să vă placă și