Documente Academic
Documente Profesional
Documente Cultură
Facultatea de Stiinte
Exacte, Departamentul de Informatica
Lucrare de disertatie
Absolvent
Ecaterina Litu
Coordonator Stiintific:
Conf. Costin Radu
Boldea
Absolvent
Ecaterina Litu
Coordonator Stiintific:
Conf. Costin Radu
Boldea
Cuprins
1 Introducere
1.1 Biologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Informatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Bioinformatica . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Calcul ADN
2.1 Structura ADN-ului . . . . . . . . . . . . . . . .
2.2 Operatii cu ADN . . . . . . . . . . . . . . . . .
2.2.1 Sinteza . . . . . . . . . . . . . . . . . . .
2.2.2 Denaturarea, Hibridizarea si Fuzionarea
2.2.3 Separarea sirurilor . . . . . . . . . . . .
2.2.4 Electroforeza gelului . . . . . . . . . . .
2.2.5 PCR: Reactia in lant a polimerazei . . .
2.2.6 Enzimele de restrictie . . . . . . . . . . .
2.2.7 Clonarea . . . . . . . . . . . . . . . . . .
3 Grafuri
3.1 Tipuri de grafuri . . . . . . . . . . . . . . . .
3.1.1 Subgrafuri . . . . . . . . . . . . . . . .
3.2 Grafuri ADN . . . . . . . . . . . . . . . . . .
3.2.1 Operatii de baza asupra grafului ADN
3.2.2 Algoritmul implementat de Adelman .
3.2.3 Problema colorarii grafului . . . . . . .
4 Modele de filtrare ADN
4.1 Metode de calcul ADN . . . . . .
4.2 Metode de filtrare . . . . . . . . .
4.2.1 Modelul nerestrictionat . .
4.2.2 Modelul de satisfiabilitate
4.2.3 Metoda de filtrare paralela
4.2.4 Un prim algoritm . . . . .
4.2.5 Permutarile . . . . . . . .
.
.
.
.
.
.
.
.
.
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
5
.
.
.
.
.
.
.
.
.
6
6
9
9
9
10
11
13
15
16
.
.
.
.
.
.
18
18
19
20
20
21
23
.
.
.
.
.
.
.
26
26
26
27
31
32
33
34
4.2.6
4.2.7
4.2.8
4.2.9
N P complete: Prob. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
.
.
.
.
35
36
36
37
5 Prezentarea aplicatiei
40
5.1 Aplicatii ale problemei colorarii grafului . . . . . . . . . . . . . . . 40
5.2 Originile limbajului C++ . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 Tehnici de programare folosite in aplicatia lucrarii . . . . . . . . . . 42
6 Concluzii
48
1
1.1
Introducere
Biologie
Cromozomii sunt responsabili de transmiterea catre urmatoarele generatii a materialului genetic al organismelor celulare. Acesti cromozomi sunt formati
din doua substante, proteinele si ADN-ul, sau acidul dezoxiribonucleic. Intrebarea care i-a macinat pe cercetatori era: care din aceste substante este de fapt
responsabila cu transmiterea informatiei genetice? La inceput, s-a considerat ca
responsabile de transmiterea genomului sunt proteinele, deoarece au o structura
mult mai complexa (contin 20 de aminoacizi) decat ADN-ul (compus numai din
4 aminoacizi), si nimeni nu a recunoscut sau a crezut ca , de fapt, ADN-ul cu
structura sa simpla, transmite, intr- adevar, informatia genetica atat de complexa
catre urmatoarele generatii. ADN-ul uman are in jur de trei miliarde de aminoacizi
(baze), si mai mult de 99 % din ele sunt identice la toti oamenii!
Dogma centrala a bilogiei moleculare este ca aceea ca ADN-ul produce
ARN-ul (Acid ribonucleic), care la randul lui produce proteine. Blocurile de constructie de baza ale informatiei genetice sunt genele. Fiecare gena codifica o anumita proteina si poate fi activa sau deactivata cand este nevoie. proprietatea unei
proteine rezulta dintr-o secventa de amino-acizi pe care aceste le contin. Proteinele
sunt lanturi simple de amino- acizi, legati unul de altul ca margelele intr-un colier.
Exista 20 de aminoacizi diferiti, si dat fiind faptul ca proteinele pot avea de la 50
pana la 500 de aminoacizi, numarul de proteine posibile este imens.
Pionierul geneticii este considerat a fi Mendel, a carui munca si cercetare
asupra plantelor de mazare a dus la recunoasterea oficiala cum ca ambii parinti
sunt responsabili cu contributia materialului genetic asupra progeniturilor sale.
Cercetarile sale au pus bazele geneticii moderne si au ajutat la descoperirea celor
mentionate mai sus.
1.2
Informatica
Termenul informatica desemneaza stiinta procesarii sistematice a informatiei, in special a procesarii cu ajutorul computerelor si provine din alaturarea
termenilor informatie si matematica. Inainte de anii 90, termenul de computer se
3
zilele noastre, computerele pe care le avem, fiecare dintre noi, sunt enorm de mici
in comparatie cu primul produs vreodata.
Tot conceptul de calculator are la baza logica de decizie. Toata informatia
este criptata in cifrele 0 si 1, care reprezinta raspunsul da sau nu la anumite
intrebari (de decizie).
1.3
Bioinformatica
In mod traditional, biologia a fost privita mai degraba ca o stiinta observationala, decat ca o stiinta deductiva. Cu toate ca descoperirile recente nu au
influentat aceasta observatie, tipul datelor s-a schimbat dramatic.
Bioinformatica reprezinta aplicarea informaticii si tehnologiei informatiei
in campul biologiei si medicinei. Bioinformatica include algoritmi, tehnologii web,
inteligenta artificiala, inginerie sofware, procesarea imaginilor, statistici e.t.c. Ea
a luat nastere prin creearea si intretinerea unei baze de date ce trebuia sa stocheze
informatii biologice cum ar fi secventele de nucleotide su secventele de amino-acizi.
Principala tinta este de a creste intelegerea proceselor biologice. De exemplu,
imaginati-va ca, asa cum un tranzistor amplifica semnalele electrice, reactia in
lant de polimeraza amplifica mostrele de ADN.
Exista deja multe produse software si unelte de dezvoltare pentru bioinformatica. Ele oscileaza intre unelte cu linii simple de comanda pana la programe
grafice mult mai complexe. Exemple de programe specializate: Bioconductor,
BioPerl, Biophyton, BioJava, BioEclipse, EMBOSS sau BioRubby.
Parintele bioinformaticii este considerat a fi Adelman. El a demonstrat in
laborator solutia unei probleme utilizand instrumente standard de biologie moleculara. Acest experiment (problema Drumurilor Hamiltoniene)a fost starterul interesului pentru calcul ADN. Ulterior lui Adelman, Lipton a demostrat ca mai multe
probleme N P complete pot de asemenea fi rezolvate prin codificarea datelor in
molecule de ADN.
Calcul ADN
2.1
Structura ADN-ului
cu cresterea proportiei perechilor de G-C. Cele doua lanturi simple de ADN sunt
aliniate complementar in directie opusa: lantul principal are o orientare de la 5 la
3, iar lantul complemenatr are orientare opusa, de la 3 la 5 (Fig. 1 ).
Bazele imperecheate pot fi rupte reversibil, procedura esentiala replicarii
ADN-ului. Fortele non- covalente care stabilesc spirala dubla ADN pot fi perturnate complet prin incalzire. procesul de restrangere a structurii native si a
disocierii lantului bicatenar in doua lanturi mono- catenare este numit denaturare. Renaturarea este procesul invers denaturarii: temperatura descreste usor,
iar imperecherea corecta a bazelor poate fi restabilita.
Procesul de legare a doua lanturi simple si de formare a unui lant dublu
este cunoscut sub numele de tratament termic sau hibridizare. Acest tratament
termic trebuie sa asigure o modificare lenta a temperaturii, deoarece o descrestere
brusca forteaza o renaturare rapida(Fig. 3)
2.2
Operatii cu ADN
Sinteza
Oligonucleotidele (molecule monocatenare scurte) pot fi sintetizate la comanda de un mecanism de dimensiunea unui cuptor cu microunde. Sinetizatorul
este alimentat cu 4 baze de nucleotide, care sunt combinate in conformitate cu
secventa introdusa de utilizator. Instrumentul face milioane de copii ale oligonucleotidei necesare si le plaseaza intr-o solutie intr-o eprubeta.
2.2.2
ADN-ul dublu inlantuit poate fi redus la un singur lant (sau denaturat) prin
incalzirea solutiei la o temperatura determinata de compozitia sirului. Caldura
rupe legaturile de hidrogen dintre sirurile complementare. Deoarece o pereche GC este compusa din 3 legaturi de hidrogen, temperatura necesara pentru a produce
ruptura este usor mai ridicata decat pentru o pereche A- T, compusa din numai 2
legaturi de hidrogen.
Hibridizarea este opusul dizolvarii (topirii),prin care o solutie din siruri
simple este racita, permitand componentelor complementare sa se uneasca intre
ele (Fig. 4)
In ADN-ul dublu inlantuit, daca unul dintre componente contine o discontinuitate (o nucleotida nu este legata de vecina ei) atunci aceasta poate fi reparata
de legarea( fuzionarea) ADN-ului. Acest lucru ne permite sa creeam un lant
unitar din mai multe siruri legate impreuna de complementele lor respective. De
exemplu, Fig. 5.a reprezinta 3 componente diferite care pot fuziona, cu o dicontinuitate unde cele 2 componente mai scurte se intalnesc. Ele pot fi reparate de
ligarea ADN-ului (Fig. 5.b), formand un lant dublu unificat (Fig 5.c).
Separarea sirurilor
10
Electroforeza gelului
11
Figure 8: Electroforeza
12
Enzimele de restrictie
15
Figure 12: a) Adn-ul dublu inlantuit restrictionat de SAU3AI; b) Capetele lipicioase care rezulta
2.2.7
Clonarea
Odata ce structura moleculei de ADN a fost elucidata iar procesul transcriptiei sau translatiei au fost intelese, biologii moleculari au fost frustrati de lipsa
tehnicilor potrivite pentru experimente care ar facilita o examinare in detaliu a
materialului genetic..
Clonarea este definita, in general, ca producerea de multiple copii identice
ale unei singure gene, celule, virus sau organism. In cazul calculelor moleculare,
clonarea ne permite deci sa obtinem mai multe copii de secvente specifice de ADN.
Acest lucru este posibil astfel:
Secventa specifica este introdusa intr-o molecula de ADN circulara, cunoscuta ca vector, producand o molecula ADN recombinata . Acest lucru este efectuat
prin separarea vectorului ADN dublu inlantuit si sirul tinta cu aceeasi enzima de
restrictie. Din moment ce vectorul este dublu-inlantuit, restrictiile cu enzimele
potrivite produc 2 regiuni cu un singur sir scurt la fiecare capat al moleculei( capatul lipicios). Acelasi lucru se aplica si sirului tinta. Procesul de insertie este
reprezentat in Fig 12. Vectorul si tinta sunt amandoua supuse restrictiei; apoi,
o populatie de siruri tinta este introdusa in solutia ce contine vectorul. Capatul
lipicios al tintei se uneste cu capatul lipicios al vectorului, integrand tinta in vector. Dupa ligare, noi molecule dublu- inlantuite sunt prezente, fiecare continand o
16
noua secventa-tinta.
17
Grafuri
3.1
Tipuri de grafuri
Graful este de mai multe feluri, fiind clasificat in functie de:
directia arcelor; in cazul in care arcele dintre nodurile grafului sunt nedirectionate, graful este neorientat; cand exista sens intre doua noduri Vi si Vj
si arcul este directionat (Ni Nj ), atunci graful este unul orientat;
18
Subgrafuri
19
3.2
Grafuri ADN
Exemplu: se considera doua grafuri ADN cu capete lipicioase complementare (Fig 18). Hibridizarea produce un graf ADN combinat. Dupa procesul
de legare, graful ADN este denaturat, rezultand doua lanturi simple.
Leonard Adelman a folosit capacitatea incredibila de stocare a ADN-ului pentru a implementa algoritmul drumurilor Hamiltoniene. Acest algoritm presupune
gasirea unui drum printr-un graf care trece prin fiecare varf o singura data.
Abordarea sa era simpla:
Genera siruri ce codificau drumurile aleator astfel incat problema era reprezentata cu probabilitate mare. Cantitatile de ADN folosite depaseau cu mult
necesarul pentru un graf mic , asa ca mai degraba existau mai multe siruri
care codificau drumurile .
21
Problema colorarii grafului este una dintre cele mai vechi si mai intens studiate probleme din cadrul Combinatoricii si Algoritmicii. Cerinta acestei probleme
(problema colorarii nodurilor) este de a colora varfurile grafului astfel incat doua
noduri adicacente sa nu aiba aceeasi culoare.DIn punct de medere matematic, colorarea grafului devine interesanta numai daca restrictionam numarul de culori la
o multime finita S.
Formal, o k- colorare a grafului G este o functie : V (G) {1, 2, ..., k}
care satisface relatia (i) 6= (j) pentru orice muchie e= ij. Se spune despre graf
ca este k- colorabil daca exista o astfel de functie. Numarul cromatic xG este
numarul minim de culori k pentru caregraful este k- colorabil, si spunem ca G este
k- cromatic daca xx(G)= k.
Problema colorarii varfurilor unui graf are multe date si teoreme:
Un graf este 2- colorabil (cunoscut de asemenea si sub denumirea de graf
bipartit) numai si numai daca nu contine un numar impar de cicluri.
Decizia ca un graf 3- colorabil ( sau k- colorabil pentru oricare k3) este o
problema NP- completa si gasind numarul cromatic este # P-completa.
Teorema colorarii grafului cu 4 culori sustine ca fiecare graf plan este 4colorabil
Cum se poate determina numarul cromatic al unui graf dat? Ideea este
simpla: selectam doua noduri i, j din V(G) fara nicio muchie intre ele. Putem
clasifica colorarile in doua categorii:
23
24
25
4.1
4.2
Metode de filtrare
Modelul nerestrictionat
Adelman a generat impulsul pentru munca sa recenta prin solutia experimentala a problemei Drumurilor Hamiltoniene. Totusi, aceasta solutie nu a fost
rezolvata prin modelele normale de calcule. Lipton i-a aratat lui Adelman cum
poate include solutiile unui alte probleme N- P. Aici vom rezuma operatiile in
modelul nerestrictionat a lui Adelman ulterior. Toate operatiile sunt efectuate pe
multimi de caractere ale unui alfabet .
separarea (T, S). Fiind data o multime T si o subsir de caractere S, se
creeaza 2 multimi noi + (T, S) si -(T, S), unde +(T, S) sunt toate sirurile
de caractere din T care il contin pe S , iar -(T, S) sunt sirurile de caractere
din T care nu il contin pe S.
combinarea. Fiind date multimile T1 , T2 , ...Tn , se creeaza (T1 , T2 , ...Tn ) =
T1 , T2 , ...Tn .
identificarea. Fiind data o multime T, se returneaza true daca T e nevida,
in caz contrar se returneaza false.
27
28
4.
5.
6.
7.
8.
9.
10.
end for
se combina rosu, verde si albastru pentru a forma noul canal T
4.
5.
6.
Tr (Tr , rj )
7.
Tg (Tg , gj )
8.
Tb (Tb , bj )
9.
10.
end for
T combina( Tr , Tg , Tb )
30
4.2.2
Modelul de satisfiabilitate
4.
5.
6.
sfarsit pentru
7.
8. sfarsit pentru
9. daca T este nevida atunci I este satisfacator
31
4.2.3
Acest model a fost primul care a furnizat un cadru formal pentru o mai
facila descriere a algoritmilor ADN pentru orice problema a clasei N P complete.
Aici vom descrie oeratiile de baza pe multimile acestei metode. Alegerea noastra
este determinata de ceea ce stim ca poate fi implementat de niste reactii chimice
complete si foarte precise asupra lantului ADN. Principala diferenta dintre filtrarea
paralela si cea de mai sus se afla in implementarea extragerii sirurilor de caractere.
Toate celelalte modele promovau pasii emphsepararii, unde sirurile de caractere
erau pastrate, si puteau fi folosite mai tarziu in calcule. In metoda filtrarii paralele,
sirurile eliminate sunt aruncate, si nu mai pot face parte din calcule. Aceasta
metoda este primul exemplar al asa numitei marcheaza si distruge din calculele
moleculare.
sterge(U, {Si }). aceasta operatie elimina din multimea U, orice sir de caractere care contine cel putin o aparitie a oricarui substring si . Aceasta operatie
este compusa dintr-un set de alte operatii, dupa cum urmeaza:
marcarea (U, S). Aceasta operatie marcheaza toate sirurile din multimea U care contin cel putin o aparitie a subsirului S.
distruge (U). Aceasta operatie distruge toate sirurile marcate din multimea U.
marcarea (U, S) este implementata prin adaugarea la U a mai
multor copii ale primerului corespunzator lui S (Figura 22 b). Primerul
hibrideaza numai cu lanturile simple ce contin subsecventa S. Adaugam
apoi polimeraza ADN-ului pentru a extinde primerii odata ce au hibrizat, formand lanturi duble numai sirurilor ce il contin pe S.
Putem apoi distruge sirurile ce il contin pe S prin adaugarea enzimelor de restrictie Sau3AI. ADN-ul dublu inlantuit este taiat la
zonele de restrictie integrate in el, sirurile singure ramanand intacte.
Apoi putem sa eliminam toate sirurile intacte prin separarea pe lungime
folosind electroforeza gelului.
32
Un prim algoritm
33
copieaza(U, {U1 , U2 , .., Un })), urmata de eliminarea operatiilor (ca in elimina (Ui ,
{pj 6=i, pk i}) este o operatie de compunere foarte folositoare.
4.2.5
Permutarile
34
4.2.6
4.2.7
36
Date de intrare: multimea de intrare U este multimea Ps a iesirilor permutarilor din algoritmul permutarilor. Pentru 1 j t un element p1 i1 p2 i2 ...ps is
din multimea Ps este privit ca nodul asociat pj {u1 , u2 , .., ut } al lui ij
{v1 , v2 , .., vs }. Algoritmul este proiectat pentru a inlatura orice element care
catalogheaza nodurile v1 in V2 intr-un mod care nu reflecta cerinta initiala
ca daca (ps , pt ) E1 , atunci (is , it ) E2 .
Algoritm:
pentru j =1 la t- 1 executa
incepe
copiaza (U, {U1 , U2 , ..., Ut })
pentru fiecare l, j l t astfel incat (pi , pl ) E2 si (ii , il )
/ E1
in paralel executa elimina (Uj , {pl il })
uniune ({U1 , U2 , ..., Ut },U )
sfarsit
selecteaza (U )
Complexitate: O(|Vs |)
Pentru fiecare sir ramas, primele t perechi pl il reprezinta o asociere unula- unu ale nodurilor lui G1 cu nodurile G2 indicand subgraful lui G1 , care
este izomorf la G2 . Daca selecteaza (U ) returneaza zero, atunci G2 nu este
subgraf al lui G1
4.2.9
Metoda Sticker
5.
6.
7.
8. sfarsit pentru
Acum separam pentru folosiri viitoare numai acele memorii in care ultimul
subsir i este setat pe on.
1. pentru i= q+1 la q+p incepe
38
2.
N0 +(N0 , i)
3. sfarsit pentru
Sortam acum sirurile care raman in functie de cate pachete codifica
1. bf pentru i= 0 la q-1 incepe
2.
3.
4.
5.
Nj (Nj , i + 1)
6.
sfarsit pentru
7. sfarsit pentru
Linia 3 separa fiecare tub in functie de valoarea lui i, iar linia 4 executa
schimbul din dreapta sirurilor selectate. Apoi vom cauta iesirea finala:
1. Citeste N1
2. altfel daca este goala atunci citeste N2
3. altfel daca este goala atunci citeste N3
4. ...
39
Prezentarea aplicatiei
Aplicatia lucrarii Calcul ADN. Modele de filtrare este reprezentata de o implementare in limbajul C++ a clasicii probleme de colorare a varfurilor unui graf.
Reamintim ca aceasta problema are ca cerinta principala colorarea nodurilor
unui graf astfel incat doua noduri adiacente sa nu aiba aceeasi culoare. Acest
algoritm are la baza o idee destul de simpla: se construieste solutia pas cu pas;
daca se constata ca pentru o anumita valoare nu se poate ajunge la o solutie, se
renunta la acea valoare si se reia cautarea din punctul unde am ramas.
5.1
5.2
41
existenta claselor, fiecare obiect ar trebui definit explicitandu-se toate caracteristicile sale. Insa, prin folosirea clasificarilor, un obiect are nevoie doar
de definirea acelor calitati care il fac unic in clasa sa. Mecanismul mostenirii
este acela care face posibil ca un obiect sa fie un exemplar specific al unui
caz mai general.
5.3
care sunt definite intr-o functie se numesc variabile locale. O variabila locala este
creata atunci cand se intra in acea functie si este distrusa la iesirea din ea. Acest
lucru inseamna ca variabilele locale nu isi pastreaza valorile intre apelarile functiei.
Acest lucru poate fi modificat prin folosirea specificatorului de memorare static,
care determina compilatorul sa trateze variabila ca si cum ar fi una globala, in
scopul stocarii ei, dar o limiteaza la interiorul functiei.
Functiile care alcatuiesc programul sunt :
initGraf ()
desenareGraf ()
desenareSolutii ()
colorareGraf ()
main()
Functia initGraf() genereaza un graf cu muchii aleatoare si noduri , cu
ajutorul functiei ran() si creeaza matricea de adiacenta.
void initGraf(int n)
{
int i, j,f;
for(int i=1;i<n+1;i++)
{
nod[i].x=(int ) rand()%350+100;
ran=rand()%101 /100.0;
if (i%2==0)ran=rand()%101 /100.0;
nod[i].y=(int ) rand()%350+100-rand()%15;
//printf("Nodul %d este dat de (%d,%d)\n",i,nod[i].x,nod[i].y);
};
for(i=1;i<n;i++)
{
f=0 ;
for(j=i+1;j<=n;j++)
43
{
ran=rand()%101 /100.0; ran=rand()%101 /100.0;
if ((ran<0.7)&& (f<3))
{
mat[i][j]=1;
mat[j][i]=1;
f++;
}
else
{
mat[i][j]=0;
mat[j][i]=0;
};
};
};
}
Functia desenareGraf() deseneaza graful creat in functia anterioara, cu
ajutorul functiilor setcolor() (seteaza culoarea grafului), line() (traseaza muchiile),
circle() (reprezinta nodurile cu ajutorul unor cercuri).
void desenareGraf()
{
int i,j;
char c[3];
setcolor(0);
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(mat[i][j]==1)
line(nod[i].x,nod[i].y,nod[j].x,nod[j].y);
setcolor(0);
setfillstyle(SOLID_FILL, 0);
for(i=1;i<=n;i++)
{
44
circle(nod[i].x,nod[i].y,3);
itoa(i,c,10);
outtextxy(nod[i].x+3,nod[i].y+3,c);
};
}
Functia desenareSolutii() genereaza cele trei culori ale cercurilor pe
care le pot primi nodurile.
void desenareSolutii()
{
int i,j;
for(i=1;i<=n;i++)
{
setcolor(2*cf[i]+9);
circle(nod[i].x,nod[i].y,3);
circle(nod[i].x,nod[i].y,2);
circle(nod[i].x,nod[i].y,4);
}
}
In functia colorareGraf() se parcurge algoritmul de colorare a nodurilor
unui graf; se cauta solutii la rezolvarea problemelor; daca acestea exista, se coloreaza nodurile grafului; daca nu exista, se afiseaza un mesaj de avertizare.
void colorGraf(int n)
{
int max,i,j,k;
max=(int) floor(pow(3,n));
for (nr=1; nr< max;nr++)
{
m=nr; k=0;
for(k=1;k<=n;k++)
{
cf[k]=m%3; m= m/3;
45
};
esol=1;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if ( (mat[i][j]==1 ) && (cf[i]==cf[j]))
esol=0;
if(esol)
{
sol++;
for(i=1;i<=n;i++)
{
col[sol][i]=cf[i];
printf("%d ", cf[i]);
};
printf("\n ");
desenareGraf();
desenareSolutii();
getchar();
}
}
if (sol==0)
printf("\n Nu avem colorari posibile ale acestui graf! \n ");
else
printf("\n Acestea au fost toate variantele gasite.
\n ");
}
Functia principala a programului, main() gestioneaza functiile deja create. Pe baza numarului de noduri pe care dorim sa il aiba graful, se genereaza
graful, se deseneaza, se citesc datele de la consola (numar de noduri si muchiile
aleator generate), se calculeaza solutiile si se afiseaza graful si solutiile gasite.
int main()
46
{
int gd,gm;
int i,j;
printf("Introduceti numarul de noduri n=");
scanf("%d",&n);
initwindow(600,600, " Colorarea varfurilor unui graf",650,50);
setbkcolor(15);
cleardevice();
printf("Se genereaza graful...\n");
initGraf(n);
desenareGraf();
getchar();
printf("Solutiile de desenare: \n");
colorGraf(n);
setcolor(0);
getchar();
getchar();
closegraph();
return 0;
}
47
Concluzii
Calculul ADN reprezinta o modalitate de a regandi cu totul metodele obisnuite de calcul. Matematica reprezinta, probabil pentru majoritatea oamenilor,
fundatia tuturor lucrurilor. Prin descoperirea calculului ADN, realizam ca matematica sta, de asemenea, si la baza biologiei.
Microprocesoarele fabricate din siliciu isi vor atinge cu timpul limitele
in ceea ce priveste viteza si eficienta. Fabricantii de cipuri au nevoie de un nou
material pentru a produce viteze mai mari de calcul. Oamenii de stiinta au descoperit ca viitoarea generatie de microprocesoare se poate afla in organismele vii,
si anume in ADN. Aceste molecule au potentialul de a efectua calcule mult mai
rapid decat cel mai performant computer actual. ADN-ul ar putea fi integrat pe
viitor intr-un chip, pentru a creea asa- numitul biochip, care va avea performante
mult mai bune. Computerele ADN vor avea capacitatea de a stoca de un miliard
de ori mai multe date decat computerele personale.
Aceste noi computere ADN, care se afla inca in stadiul de cercetare, pot
reprezenta urmatoare generatie de computere, dupa cele bazate pe microprocesoare
de siliciu. S-a observat o similaritate intre ADN si hard disk-ul unui computer, in
ceea ce priveste modul de a stoca permanent informatiile.
Folosirea biochipului prezinta cateva avantaje fata de folosirea unui chip
fabricat din siliciu:
Vor exista provizii de ADN, atata vreme cat vor exista organisme celulalre;
Biochipurile nu sunt fabricate din materiale toxice;
Computerele ADN vor fi cu mult mai mici decat cele de astazi;
Pe langa faptul ca sunt mai mici, ele vor avea capacitatea de a stoca mai
multe date;
Fata de computerele traditionale, cela cu ADN pot efectua calcule in paralel
(de aici rezulta viteza cu care se efectueaza calculele);
Rezervele mari de ADN fac din acesta o sursa ieftina.
48
Avantajele potentiale ale calculului ADN fata de calculele electronice obisnuite se observa destul de clar, in cazul problemelor de genul Drumurilor Hamiltoniene, Metodei de satisfiabilitate, s.a.m.d. Pe de alta parte, aceste exemple sunt
probleme particulare rezolvabile cu ajutorul biologiei moleculare.
Prin prezenta lucrare, am incercat sa raspundem la urmatoarele intrebari
fundamentale:
1. Ce fel de probleme se pot rezolva cu ajutorul calculului ADN?
2. Exista o sansa reala, de a proiecta un calculator ADN programabil?
3. Este calculul ADN complet din punct de vedere computational, in sensul ca
o actiune a unei functii de calcul (sau calculul oricarei masini Turing) poate
fi dus mai departe prin manevrarea ADN-ului?
49
References
[1] Theoretical and experimental DNA Computation, Martyn Amos
[2] Introduction to bioinformatics,Arthur M. Lesk
[3] DNA Computing models, Zoya Ignatova, Israel Martinez- Perez, KarlHeinz Zimmermann
[4] DNA computers, tomorrows reality, Lila Kari
[5] DNA Computation, Martyn Amos
[6] On the computational power of DNA, Dan Boneh, Cristopher Dunworth,
Richard J. Lipton
[7] Using DNA to solve NP- Complete problems, Richard J. Lipton
[8] Molecular Computation Of Solution To Combinatorial Problems ,
Leonard M. Adelman
[9] On some properties of DNA graphs, J. Blazewicz, A. Hertz, D. Kobler,
D. de Werra
[10] Computation by Self- Assembly of DNA Graphs, Natasa Jonoska,
Nadrian C. Seeman, Phiset SA- Ardyen
[11] Creating 3-dimensional Graph Structures with DNA , Natasa
Jonoska, Stephen A. Karl, Masahico Saito
[12] Algoritmica grafurilor, C. Croitoru
[13] DNA Models and Algorithms for NO- complete Problems, Erich
Bach, Elton Glaser, Anne Condon, Celena Tanguay
[14] The Chromatic Polynomial, Cody Fouts
[15] Improved Exact Algorithms for Counting 3- and 4- Colorings, Fedor
V. Fomin, Serge Gasper, Saket Saurabh
[16] The chromatic Polynomial, Master Thesis, Tamas Hubai
50
51