Sunteți pe pagina 1din 10

Ministerul nvmntului a Republicii Moldova

Universitatea Tehnic a Moldovei


Facultatea Calculatoare,Informatic i Microelectronic

la disciplina Structuri de Date i Algoritmi

Tema: METODA DRUMULUI CRITIC


CRITICAL PATH METHOD

A efectuat :
Studentul grupei AI-082
A verificat :

Rusnac Denis
Nastas Valentina

Chisinau 2009
APROB
0

eful catedrei
Informatica aplicat
_________dr.,conf.univ.V.Moraru

Sarcina
Pentru lucrarea de curs la disciplina Structuri de date i algoritmi

Tema:
Metoda drumului critic.

Scopul lucrarii:
Studierea i aplicarea algoritmului Ford pentru determinarea drumului critic ntr-un graf
orientat.

Sarcina:
Elaborarea programului care determina drumul critic, n limbajul de programare C.

DATA NMNRII LUCRRII:

13 aprilie 2009

TERMENUL DE PREZENTARE A LUCRRII:

19 iunie 2009

Conductorul lucrrii: _____________ lector superior:

Valentina Nastas

Executtorul lucrrii

Rusnac Denis

_____________ studentul gr.AI-082

1.Scurt istoric
Critical Path Method este procedeul fundamental al "analizei drumului critic" .
In anul 1956 firma E. I. Du Pont de Nemours a creat un grup de studii, format din
matematicieni i analiti care aveau la dispozitie un calculator UNIVAC I. In 1957 la
UNIVAC Application Research Center, sub conducerea lui 1. W. Mauchly, s-a pus la punct
procedeul CPM de catre J. E. Kelley (de la Remington Rand) i W. Walker (de la Du
Pont). Procedeul a fost aplicat de firma Du Pont la revizia uzinei din Louisville i a avut ca
rezultat reducerea duratei lucrarilor de la 125 ore la 93 ore, i apoi la 78 ore.
In 1958 J. W. Mauchly Intemeiaza firma de consultare Mauchly Associates, care a avut un
rol important in dezvoltarea i difuzarea analizei drumului critic. Succesele obtinute cu
ajutorul CPM ncep sa intereseze un cerc larg de cercetatori i utilizatori (universiti,
firme de consultare, intreprinderi) i metoda cunoate o popularitate fr precedent.
In 1961 apare studiul lui Kelley "Critical - Path Scheduling: Mathematical
Basis", in care CPM este prezentat Intr-o forma desavarit [9].
Procedeul CPM este o metoda folosita cu precdere de tarile anglo-saxone, cunoscuta i ca
metoda "sagitala", fiind una dintre cele mai simple procedee de analiza a drumului critic,
constituind procedeul fundamental al ADC.
CPM este considerat procedeul fundamental al ADC, deoarece procedeele mai
perfectionate nu au facut altceva dect sa adnceasca i sa extinda notiunile sale de
baza,fr sa le anuleze sau sa le infirme.
Procesul de conducere a unui proiect prin CPM ia in analiza parametrul timp, in care
fiecare activitate are o durata constanta, corespunzatoare conditiilor normale de lucru,
obtinandu-se programe de termene i durata totala de executie.
Prin faptul ca procedeul CPM ia pentru analiza proiectelor numai
parametrul timp, acesta se incadreaza in procedeele ADC/TIME.

2. Note teoretice
a) Activitatile sunt actiuni sau conditii care contribuie la realizarea unui proiect.
Principala caracteristica graficii a activitatilor este prezentarea lor sub forma de arce sau
sageti orientate in sensul desfurarii procesului tehnologic.
Fiecare activitate Aij - este definita i delimitata de durata dij

b) Evenimentele sau fazele reprezinta anumite stadii de executie a


lucrarilor (activitatilor), marcand inceperea sau terminarea uneia sau mai multor activitati.
Evenimentele sunt plasate in nodurile retelelor, delimiteaza activitile i marcheaza
momente instantanee in desfaurarea lor.
La nivelul unui proiect, evenimentele ce contureaza nodurile graficelor n reea se pot
defini in raport cu semnificatia momentelor pe care le marcheaz astfel:

~ evenimentul initial "0" este evenimentul ce marcheaza inceputul proiectului i care nu


are nici o activitate precedent;
~ evenimentul final "n" este evenimentul ce pune in evident sfritul sau terminarea
executiei proiectului i care nu are nici o activitate urmatoare.
~ evenimentul precedent "i" este evenimentul aflat la nceputul unei activitati oarecare
Aij - i care reprezint momentul cnd toate activitatile direct precedente s-au terminat i
poate s ncep activitatea Aij;
~ evenimentul urmator "j" constituie evenimentul aflat la sfritul unei activitati
oarecare Aij - i care releva momentul cind toate activitatile premergatoare lui, deci
inclusiv activitatea Aij,s-au terminat, asigurnd posibilitatea de incepere pentru toate
activitaile imediat urmatoare.

c) Drumul in graficul retea CPM este 0 succesiune de arce orientate i noduri, intre nodul
initial i nodul final. Drumul in CPM poate s fie definit ca o succesiune de activitati
parcurse in sensul sageilor,n care evenimentul final al fiecarei activitati coincide cu
evenimentul iniial al activitatii urmatoare.
Drumurile retelelor CPM pot sa fie definite astfel :
~drum complet - este considerat drumul parcurs ntre nodul iniial i nodul final al
retelei. In graficele retea CPM pot sa existe unul sau mai multe drumuri complete;
~ drum incomplet - este drumul parcurs tntre diferite secvene ale retelei. In retelele CPM
distingem urmatoarele tipuri de drumuri incomplete:
drumul care precede nodul "i" este drumul incomplet care incepe in nodul initial i
care se termina in nodul "i".
drumul care succede nodul "i" se considera drumul incomplet care incepe in nodul
"i" i se termina in nodul final "n".
drum intermediar este drumul incomplet ce se parcurge ntre dou noduri oarecare
ale reelei,spre exemplu ntre nodul i i nodul p.
Un drum poate sa fie identificat atat prin nodurile sau evenimentele sale,ct i prin
activitatile componente plasate pe traiectoria sa, dar toate drumurile sunt delimitate prin
lungimea lor.
3

d) Lungimea unui drum in graficul retea CPM este egala cu suma duratelor activitalilor
ce se situeaza pe drumul considerat.
Intr-o retea CPM exista mai multe drumuri complete, cu lungimi diferite:
e) Drumul critic in relelele CPM este drumul complet cu lungimea maxima, care pune in
evidenta durata totala minima posibila de realizare a intregului proiect.
g) Numerotarea nodurilor unei retele CPM este necesara pentru identificarea
evenimentelor ce delimiteaza activitalile proiectului. Fiecare nod este purtatorul unui
numar distinct, corespunzator unui sistem de numerotare adoptat:
~ numerotare secventiala continua, cand nodurile se numeroteaza in
ordinea crescatoare i imediat urmatoarea numerelor naturale:
0,1,2.....11,12,13.....23,24...........
~numerotare secventiala cu lacune, cand nodurile se numeroteaza in
ordinea crescatoare a numerelor naturalc, dar nu imediat urmatoare:
0,1,5.....11,15,27,.....35,45.........
~numerotare arbitrara, cand nodurile se numeroteaza aleator indiferent de ordine:
0,1,5,3,.....11,9,18,.....27,23, ......
La efectuare lucrrii de curs am folosit algoritmul lui Ford pentru determinare drumului
critic,cu putine modificri.
Algoritmul lui Ford pentru detrminarea drumului critic
Permite determinarea drumului critic care ncepe cu un vrf iniial xi pn la oricare vrf al
grafului G. Dac prin Lij se va nota ponderea arcului (xi, xj) atunci algoritmul conine
urmtorii pai:
1. Fiecrui vrf xj al grafului G se va ataa un numr foarte mare Hj(). Vrfului iniial i
se va ataa Ho = 0;
2. Se vor calcula diferenele Hj - Hi pentru fiecare arc (xi, xj). Sunt posibile trei cazuri:
a) Hj - Hi < Lij,
b) Hj - Hi = Lij,
c) Hj - Hi > Lij.
Cazul "c" permite micorarea distanei dintre vrful iniial i xj din care cauz se va
realiza Hj = Hi + Lij.
Pasul 2 se va repeta atta timp ct vor mai exista arce pentru care are loc inegalitatea
c. La terminare, etichetele Hi vor defini distana de la vrful iniial pn la vrful dat
xi.
3. Acest pas presupune stabilirea secvenei de vrfuri care va forma drumul critic. Se va
pleca de la vrful final xj spre cel iniial. Predecesorul lui xj va fi considerat vrful xi
pentru care va avea loc Hj - Hi = Lij. Dac vor exista cteva arce pentru care are loc
aceast relaie se va alege la opiune.

Schema bloc a progamului:

void Matr();

Start
k=1

int y=2,x=1;

Prezentarea
n

temei

k!
=0

i=1..n

Meniu
a[i][j]
k
return

k=1
Matr();
k=2
DC();

Stop

void DC();

H[0]=0;

i=1..n

H[i]=d;

i=0..n1

r=0
r=1
j=n1..0

(j!=n-1)&&
(a[j][n-1]!
=0)

j=1..n

(a[i][j]!
=0)

H[j]H[i]>a[i]
[j]H

H[n-1]H[j]=
=a[j][n-1]

dr[i]=j+1;i++;
n=j+1;
if(n>0) r=0;

H[j]=H[i]+a[i][j];
j=i-1..0
dr[j
]
i=0..n
j>0
H[i]

dr[0]=n;i=1;

->

return

H[n-1]

LISTING-UL PROGRAMULUI:
//
Lucrare de curs.
//
Tema:METODA DRUMULUI CRITIC
//
CRITICAL PATH METHOD
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<values.h>
#define d 10000;
int n,k,j,i,u,a[20][20],H[20],dr[10];
//------------------------------------------------------------------/* Matricea de incidenta si ponderile*/
void Matr()
{clrscr();
int y=2,x=1;
printf("Introduceti numarul de evenimente:");scanf("%d",&n);
clrscr();
printf("Introduceti matricea de incidenta si lungimea activitatilor: ");
for(i=0;i<n;i++)
{
y=y+1;
for(j=0;j<n;j++)
{
gotoxy(x,y);
scanf("%d",&a[i][j]);
x=x+3;
}
x=1;
}
}
//------------------------------------------------------------------/* Algoritmul aflarii drumului critic */
void DC()
{clrscr();
H[0]=0;
for(i=1;i<n;i++)
H[i]=d;
for(i=0;i<n-1;i++)
for(j=1;j<n;j++)
if(a[i][j]!=0)
{if(H[j]-H[i]>a[i][j])H[j]=H[i]+a[i][j];}
dr[0]=n;i=1;
printf("\nDrumul critic este:%d\n",H[n-1]);
//-------------------------------------------------------------------/* Afisarea succesiunii evenimentelor */
printf("Succesiunea evenimentelor este:\n");
int r=0;
while(r==0){ r=1;
for(j=n-1;j>=0;j--)
if((j!=n-1)&&(a[j][n-1]!=0))
if(H[n-1]-H[j]==a[j][n-1])
7

{dr[i]=j+1;i++;
n=j+1;
if(n>0) r=0; }}
for(j=i-1;j>=0;j--)
{printf("X[%d]",dr[j]);
if(j>0)printf("->");}
getch();
}
void main()
{int k=1;
//------------------------------------------------------------------/* Prezentarea temei */
clrscr();
printf("\n\n\n\n\t");
textcolor(3); cprintf("Lucrare de curs la disciplina Structuri de Date si Algoritmi.");
printf("\r\n\n\t\t\t");
cprintf("Drum critic.");
textcolor(15);
getch();
textcolor(10);
//------------------------------------------------------------------/* Meniul principal */
while(k!=0)
{
clrscr();
printf("\n\
\n\
[ MENIU ]
\n\
\n\
[1] - Introducerea grafului: ( MatIn ).
\n\
\n\
[2] - Aflarea drumului critic.
\n\
\n\
[0] - Iesirea.
\n\
\n");
scanf("%d",&k);
switch(k)
{
case 1:Matr(); break;
case 2:DC(); break;
case 0:;
}
}
}

Testarea:

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