Modele de Filtrare ADN

May 29, 2016 | Author: Litu Cristina | Category: N/A
Share Embed Donate


Short Description

calcul adn...

Description

Universitatea Din Craiova. Facultatea de Stiinte Exacte, Departamentul de Informatica

Lucrare de disertatie

Absolvent Ecaterina Litu

Coordonator Stiintific: Conf. Costin Radu Boldea

Craiova, iulie 2012

Universitatea Din Craiova. Facultatea de Stiinte Exacte, Departamentul de Informatica

Calcul ADN. Modele de Filtrare

Absolvent Ecaterina Litu

Coordonator Stiintific: Conf. Costin Radu

Craiova, iulie 2012

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 . . . . . . . .

1

. . . .

. . . . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

. . . . . . . . .

. . . . . .

. . . . . . .

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

Algoritmi de selectie a unei probleme lema colorarii grafului . . . . . . . . Problema dumurilor hamiltoniene . Problema izomorfismului subgrafului Metoda Sticker . . . . . . . . . . . .

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

2

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

referea la o persoana care efectua calcule. Parintele informaticii moderne este Alan Turing. El a creeat o masina, masina Turing, care reprezinta, practic, o persoana virtuala care executa o procedura bine definita. Masina Turing este echivalenta cu automat cu stiva. O masina Turing este alcatuita din: • o banda impartita in celule aflate una langa cealalta; fiecare celula contine un simbol dintr-un alfabet finit; alfabetul contine un simbol special (”0”) si unul sau mai multe alte simboluri; banda se deplaseaza la stanga si la dreapta, adica are masina Turing intotdeauna suficienta banda pentru a efectua calculele; celulele care nu au fost scrise anterior se presupune ca sunt ocupate cu simbolul vid; • un cap care poate scrie si citi simboluri pe sau de pe alta banda, si care se poate deplasa la stanga si la dreapta; • un registru de stare care stocheaza starea masinii; • o tabela de actiuni care spune masinii ce simbol sa scrie, cum sa deplaseze capul si care va fi noua sa stare. Cu aceasta masina, Turing a adus o generalizare si formalizare a conceptului de algoritm. Fiecare utilizare a computerului din ziua de astazi se datoreaza lui Turing, deoarece ”oricine tasteaza la un calculator lucreaza de fapt pe o forma de masina Turing”. Gratie electronicii digitale (masina Turing era una analogica, mecanica), urmatoarea etapa din dezvoltarea computerelor a reprezentat-o arhitectura von Newmann, sau arhitectura cu program memorat. Tuburile electronice au fost inlocuite de tranzistori, mult mai mici si mai eficienti. Mai tarziu, circuitele integrate a coborat si mai mult dimensiunea calculatorelor. O arhitectura von Newmann descrie un calculator cu 4 module importante: unitatea aritmetica- logica, unitatea de control, memoria centrala si dispozitivele de I/E. Despre calculatoare s-a prezis ca vor ramane extraordinar de mari (ca greutatea lor va scadea de la 30 de tone, la probabil o tona jumate) pe masura ce le vor imbunatati performantele, si nu isi vor avea aplicabilitate reala sau meritata in viata de zi cu zi (exclus deci folositul in mod personal). Realitatea difera in 4

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.

5

2

Calcul ADN

Ideea ca celulele vii si moleculele complexe pot fi privite ca niste potentiale componente mecanice i-a apartinut lui Richard Feynman, cand acesta a publicat un articol care descria computerele ”sub-microscopice”. Trecerea de la SF la realitate s-a produs in 1994, cand Leonard Adelman i-a preluat ideea si a rezolvat problema Drumurilor hamiltoniene cu ajutorul calculului ADN. Algoritmul nu a fost executat cu ajutorul unui computer clasic, pe baza de siliciu, ci, in schimb, a folosit tehnologia ”tubului de test” ale ingineriei genetice. Prin reprezentarea informatiei ca secvente de nucleotide ale moleculelor de ADN, el a aratat ca tehnicile de manipulare ale ADN-ului pot fi folosite pentru a rezolva mult mai rapid o problema data. Computerele cele mai performante din ziua de azi au capacitatea de a executa aproximativ trei miliarde de operatii pe secunda. Computerele cu ADN pot efectua pana la trei sute de miliarde de operatii pe secunda. Secretul? Fiecare operatie este executata nu pe un singur lant, ci pe amandoua lanturile de ADN simultan.In calcul biomolecular, informatiile sunt pastrate in biomolecule iar procesarea lor se face cu ajutorul manipularii acestora, prin diferite metode.

2.1

Structura ADN-ului

In majoritatea organismelor vii, materialul genetic este depozitat in ADN, molecule care sunt responsabile de dezvoltarea si functionarea acelui organism. Eficienta maxima asupra duplicarii si transmiterii ADN-ului este determinata de caracteristicile sale structurale si de proteinele participante la proces. ADN-ul este format din siruri de polimeri, cunoscute ca lanturi ADN. Fiecare lant trebuie privit ca un lant de nucleotide, baze sau amino-acizi. Cele patru nucleotide ale ADN-ului sunt adenina, guanina, citozina si timina, abreviate de obicei cu A, G, C, T. Nucleotidele sunt legate covalent prin zahar si sedimente fosfate, acestea formand coloana ADN-ului; zaharul si grupul fosfat alterneaza in coloana ADN-ului si determina directia acestuia: capatul cu un grup de hidroxil expus al deoxiribozei (zaharul) este cunoscut ca fiind capatul 3’ iar cel ce se termina cu grupul fosfat este denumit ca fiind capatul 5’.

6

Figure 1: ADN dublu inlantuit -Schematic Structura ADN-ului este dublu inlantuita(Fig. 1, 2), si se formeaza atunci cand 2 siruri de polimeri se leaga (unesc).

Figure 2: ADN dublu inlantuit Doua lanturi simple de ADN alcatuiesc un lant dublu, care este stabilizat de legaturile de hidrogen dintre nucleotide. Structura chimica a bazelor permite o formare eficienta a legaturilor de hidrogen numai intre A si T sau C si G. Perechea bazelor A si T se uneste printr-legatura dubla de hidrogen, iar cea dintre C si G, printr-o legatura tripla. Stabilitatea generala a moleculei de ADN creste odata 7

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)

Figure 3: Denaturarea si renaturarea ADN-ului

8

2.2

Operatii cu ADN

Anumite (dar nu toate) calcule ADN folosesc o secventa specifica de operatii biologice pentru a stabili componentele. Aceste operatii sunt folosite de obicei de biologii moleculari, iar in continuare, le vom descrie mai amanuntit: 2.2.1

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

Denaturarea, Hibridizarea si Fuzionarea

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)

Figure 4: Topirea si hibridizarea ADN- ului 9

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).

Figure 5: a)3 lanturi distincte; b)Fuzionarea ce repara discontinuitatea; c) Rezultat 2.2.3

Separarea sirurilor

Divizarea este o operatie fundamentala, si presupune extragerea oricarui sir ce contine o secventa specifica dintr-o eprubeta(Ex: extragerea tuturor componentelor ce contin secventa GCTA). Daca vrem sa extragem componente unice continand secventa x, am putea crea multe replici ale complementului sau, x. Atasam acestor oligonucleotide molecule, care de fapt uneste cu o matrice nucleara fixa. Daca turnam continutul eprubetei peste aceasta matrice, sirurile ce-l contin pe x vor fuziona cu sirurile complementare. Spalarea matricii indeparteaza toate sirurile care nu au hibrizat), lasand numai sirurile ce-l contin pe x. Acestea pot fi apoi indepartate din matricea nucleara.

10

Alta tehnica de indepartare(extirpare) presupune folosirea lantului de separare magnetic. Folosind aceasta metoda, cream din nou oligonucleotidele din nou, dar de aceasta data le atasam mici particule metalice. Cand oligoelemetele complementare fuzioneaza cu sirurile dorite(Fig. 6-a), putem folosi un magnet pentru a extrage particulele(moleculele) din solutie impreuna cu sirurile dorite lipite de ele (Fig 6-b)

Figure 6: Separarea cu magnetul 2.2.4

Electroforeza gelului

Electroforeza cu gel este o tehinca importanta pentru trierea sirurilor de ADN dupa marimea lor. Electroforeza este miscarea moleculelor incarcate intr-un camp electric. Intrucat moleculele de ADN transporta o sarcina negativa, cand sunt puse intr-un camp electric ele au tendinta de a migra catre polii pozitivi. Rata de migrare a unei molecule intr-o solutie apoasa depinde de forma ei si de sarcina electrica. Deoarece moleculele de ADN au aceeasi sarcina pe unitatea de lungime, ele migreaza in totalitate cu aceeasi viteza in solutia apoasa. Totusi, daca electroforeza se desfasoara intr-un gel (de obicei compus din agaroza, poliacrilamida sau o combinatie intre cele 2), rata de migrare a moleculei este afectata de dimensiunea ei. Aceasta se datoreaza faptului ca gelul este o retea densa de pori prin care moleculele trebuie sa treaca. Moleculele mai mici migreaza deci mai repede prin gel, deci se sorteaza in functie de dimensiune. Odata ce gelul este rulat(de obicei in timpul noptii), este necesar sa vedem rezultatele. Acesta este obtinut prin colorarea ADN-ului cu o vopsea fosforescenta de bromur de etidiu si apoi gelul este analizat cu ajutorul ultravioletelor. O versiune simplificata este prezentata in Fig. 7.

11

Figure 7: Procesul electroforezei cu gel Gelurile sunt interpretate dupa cum urmeaza; fiecare banda (1-7 in exemplul nostru) corespunde unei anumite mostre de ADN (folosim termenul tub in modelul abstract). Putem deci sa manevram mai multe tuburi cu acelasi gel pentru comparare. Banda 7 este cunoscuta ca banda de marcaj; aceasta contine diverse fragmente de ADN cu lungimea stiuta, in scopul etalonarii. Fragmentele de ADN cu aceeasi lungime se grupeaza pentru a forma lanturi orizontale vizibile, cele mai lungi fragmente formand lanturi in partea de sus a picturii, iar cele mai scurte in partea de jos. Stralucirea unui anume lant depinde de cantitatea de ADN a lungimii corespunzatoare prezenta in mostra. Concentratia mai mare de ADN absoarbe mai multa vopsea, si deci este mai luminoasa. Un avantaj al acestei tehnici este senzitivitatea sa- cat mai putin din 0.05 µg de ADN intr-un singur lant poate fi vizibil detectat ca fiind fluorescent ( Fig 8).

Figure 8: Electroforeza

12

Dimensiunea fragmentelor din diferite benzi este aratata in dreapta benzii de etalon, si se masoara in perechi de baza(b.p.). In exemplul nostru, cea mai mare banda solubila de gel este 2.036 b.p. , iar cea mai mica este de 134 b.p. Miscarea de la dreapta la stanga (circuitul 6-1) este o serie de PCR(Polymerase chain reaction) care au fost montate ADN diluat progresiv (134b.p.) pentru a senzitivitatea unei reactii. Diluarea fiecarui tub este evidenta de la decolorarea benzilor, care eventual dispar in banda 1. 2.2.5

PCR: Reactia in lant a polimerazei

Polimerazele ADN-ului indeplinesc mai multe functii, inclusiv repararea si duplicarea ADN-ului. Dat fiind un oligoelement initial scurt, p, in prezenta unor trifosfati de nucleotide (nucleotida de rezerva), polimeraza extinde p numai si numai daca p este legat de un model mai lung de oligo, t. De exemplu, in Fig. 9.a, p este oligoelementul TCA care este legat de t, ATAGAGTT. In prezenta polimerazei, p este marit de un sir complementar de baze de la sfarsitul lui 5 spre 3 din t.(Fig.9.b) Alta metoda folositoare pentru manevrarea ADN-ului este reactia in lant a polimerazei sau PCR. PCR este un proces care amplifica rapid cantitatea de ADN intr-o solutie data. Fiecare ciclu al reactiei dubleaza cantitatea fiecarui sir, dand o crestere exponentiala in numarul sirurilor. PCR angajeaza polimeraza sa faca replici ale unei anumite regiuni (sau secventa- tinta)ale ADN-ului care se afla intre 2 secvente cunoscute. Remarcati ca secventa tinta (care poate fi in jur de 3,000 b.p.) poate fi necunoscuta inainte. Pentru a mari modelul ADN cu regiuni cunoscute (probabil la oricare capat al sirului), vom modela intai primerii (amorsa /piston/preionizator) inainte si inapoi (care merg de la 5 la 3 pe fiecare sir).

Figure 9: a) Primerul fuzioneaza la un sablon mai lung; b) polimeraza se extinde in directia 5‘- 3‘ 13

Adaugam apoi o cantitate mare de primer in exces (relativa la cantitatea de ADN ce urmeaza a fi reprodusa) solutiei si o incalzim pentru a denatura modelul sirului dublu(Fig 10.a). Racind solutia permitem apoi primerilor sa fuzioneze cu secventele tinta (Fig 10.b). Apoi adaugam polimeraza. In acest caz, folosim polimeraza Taq derivata din bacteria termofila Thermus aquaticus, care traieste in medii caduroase. Asta inseamna ca polimeraza lor functioneaza mai bine la temperaturi inalte, si este sigur chiar aproape de punctul de fierbere (Taq este in siguranta la 94 grade C). Rolul acestei stabilitati este ca este nevoie ca polimeraza sa fie adaugata odata, la inceputul procesului, si ramane activa in continuare.

Figure 10: PCR Aceasta faciliteaza cea mai usoara automatizare a procesului PCR, unde ingredientele sunt asezate intr-o piesa a aparatului numita ciclu termic, si nicio interventie umana ulterioara nu mai este necesara. Polimeraza extinde apoi primerii, dand nastere unei copii identice a modelului de ADN(Fig. 10c). Daca plecam de la un singur model, atunci desigur ca acum avem 2 replici (Fig. 10.d). Daca repetam apoi ciclul de incalzire, fuzionare si polimerizare, este normal ca aceasta apropiere 14

sa produca un numar exponential de replici ale modelului. Un numar normal de cicluri ar fi 35, producand(presupunand un singur model) in jur de 68 de miliarde de copii ale secventei- tinta( de exemplu, o gena). 2.2.6

Enzimele de restrictie

Endonucleazele de restrictie (des mentionate ca enzime de restrictie) recunosc o secventa specifica de ADN cunoscuta ca o zona de restrictie. Orice ADN ce contine zona de restrictie in secventa sa este intrerupt de enzime in acel punct.

Figure 11: a)ADN dublu inlantuit; b) ADN restrictionat de enzime; c) Rezultat De exemplu, ADN-ul dublu- inlantuit din Fig 11.a este intrerupt de enzimele de restrictie RsaI, care recunoaste zona de restrictie GTAC. Enzimele rup (sau separa) ADN-ul la jumattaea zonei de restrictie. Anumite enzime ca RsaI lasa un capat bont al ADN-ului. Altele pot lasa capete lipicioase. De exemplu, ADN-ul dublu- inlantuit din figura 1.14a este intrerupt de enzima de restrictie Sau3AI, care recunoaste zona de restrictie GATC (Fig 11. b). Capetele lipicioase care rezulta sunt numite asa din cauza ca sunt apoi libere sa fuzioneze cu complementul lor.

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.

Figure 13: Inserarea componentei tinta in vectorul ADN

17

3

Grafuri

Graful, asemenea arborelui, reprezinta o structura in care relatia dintre nodul parinte si nodul fiu este una ierarhica; un nod poate avea mai multi succesori, dar si mai multi predecesori. Graful este larg utilizat in domeniile: cibernetica, matematica, chimie, retelelor de transport pentru optimizarea traseelor, circuitelor electronice pentru simularea functionarii corecte, inteligentei artificiale si, nu in ultimul rand, in domeniul aplicatiilor software. Graful este o pereche G=(V, E), unde multimea V= {v1 , v2 , ..., vn } reprezinta multimea varfurilor grafului, iar multimea E ={e1 , e2 , ..., en } reprezinta multimea formata din submultimi a doua elemente din V. O muchie are forma e= {uv}. Numarul varfurilor unui graf reprezinta gradul acelui graf. Exemplu de graf: multimea nodurilor V= {v1 , v2 , v3 , v4 } si multimea muchiilor E= {v1 v3 , v2 v3 , v2 v4 , v3 v4 } (Fig. 14).

Figure 14: Diagrama unui graf

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

Figure 15: Graf orientat si neorientat • greutatea arcelor; daca oricare arc dintre doua noduri ale grafului are asociata o valoare numerica (care reprezinta de cele mai multe ori distanta, durata de timp sau costul), atunci graful este cu greutate; in cazul in care arcele nu au asociate valori numerice, graful este unul fara greutate; • existenta arcelor; daca intr-un arc nu exista niciun varf izolat, atunci graful este conectat; daca exista cel putin un nod izolat, atunci graful este neconectat; 3.1.1

Subgrafuri

Fie G={V, E} un graf. Un subgraf al lui G este un graf G‘= {V‘, E‘} cu proprietatea ca V‘⊆ V si E‘⊆ E. Exemplu: considerand graful din Fig. 14, reprezentam doua subgrafuri G1 , G2 ale grafului G. Graful G1 este format din multimea varfurilor {v2 , v3 , v4 }, in vreme ce G1 nu area aceleasi noduri, deoarece muchia {v2 v3 } lipseste (Fig 16).

Figure 16: Subgrafurile G1 , G2 ale grafului G

19

3.2

Grafuri ADN

Un graf ADN reprezinta mai multe polinucloetide unite prin hibridizarea Watson- Crick. Formal, un graf ADN este un graf conectat, cu varfuri etichetate din alfabetul ADN, ∆= {A, C, G, T} si cu muchii etichetate fie cu denumirea de coloana, fie cu cea de pereche de baza. Muchiile coloana sunt directionate, indicand directia 5‘ spre 3‘, in timp ce muchiile ”pereche de baza” sunt nedirectionate si sunt de tip Watson- Crick. Mai mult, fiecare varf dintr-un graf ADN are cel mult o muchie de intrare si una de iesire de fiecare tip. Exista 10 grafuri ADN cu doua muchii coloana si doua muchii pereche de baza (Fig. 17). Grafurile ADN pot reprezenta o varietate de structuri ADN bogata.

Figure 17: Cele 10 subgrafuri Watson- Crick 3.2.1

Operatii de baza asupra grafului ADN

Sunt introduse trei operatii de baza asupra grafurilor ADN: • Hibridizarea: se iau doua grafuri ADN, D1 si D2 si se asigura un graf ADN combinat D3, D3= D1+D2, prin formarea muchiilor perechi de baze unind varfurile din D1 cu varfurile din D2. • Procesul de legare: se considera un graf ADN D si se produce un graf ADN D‘= -D prin adugare de muchii coloana care leaga varfurile in D. • Denaturarea: se alege un graf ADN D si se dobandeste un set de grafuri ADN, Dδ = Di , fiecare fiind componenta a coloanei D fara muchii perechi de baza. 20

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.

Figure 18: Hibridizarea, legarea si denaturarea a 2 grafuri ADN 3.2.2

Algoritmul implementat de Adelman

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

• Sterge toate sirurile care nu codifica drumurile hamiltoniene. • Se verifica sirurile care codifica drumurile.

Figure 19: Solutia lui Adelman Pasii individuali au fost implementati dupa cum urmeaza: 1. Fiecarui varf si muchie i-a fost asociata o secventa distincta de ADN. Secventele reprezentand muchiile se comporta ca niste atele intre sirurile ce marcheaza capetele. In termeni formali, secventa asociata cu muchia i → j este 3‘ 10mer la secventa ce reprezinta vi , urmata de a 10-a mer 5‘ a secventei reprezentand vj . Aceste oligonucleotide au fost apoi combinate pentru a forma siruri ce codifica aleator drumuri prin graf. O cantitate fixa de oligonucleotide au fost amestecate intr-o singura operatie de legare. La finalul reactiei, se presupune ca un sir ce reprezinta un drum hailtonian este prezent cu o posibilitate mare. Aceasta abordare rezolva problema generarii unui numar exponential ale diferitelor rute folosind un numar polinomial de oligoelemente initiale. 2. PCR a fost folosit initial pentru a amplifica masiv populatia de oligonucleotide ce codifica rutele ce incep de la v1 pana la v7 . Apoi, sirurile care nu codifica exact n cai au fost eliminate. Rezultatul amplificarii PCR-ului a rulat pe gel de agaroza pentru a izola sirurile de lungime 140 b.b. Apoi a urmat o serie de pasi blanzi de purificare care au avut rolul de a izola sirurile ce codifica drumurile care au vizitat fiecare varf o singura data. 3. PCR care a ramas a fost folosita pentru a identifica singurul drum hamiltonian pe care acest tip de problema il furnizeaza. Pentru un graf cu n varfuri, 22

executam n - 1 reactii PCR, cu sirul care reprezinta v1 ca primerul din stanga si complementul sirului care reprezinta vs ca primerul din dreapta din zona cu numarul em i. Importanta experimentului lui Adelman a venit din faptul ca a fost primul care a demonstrat in laborator posibilitatii calculului cu ajutorul ADN-ului. Cu toate acestea, remarcam ca a fost executat cu o singura instanta a problemei, si cu un singur drum hamiltonian. 3.2.3

Problema colorarii grafului

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 k≥3) 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

• care il au pe i, j colorate diferit; se adauga o muchie intre i, j si devine G+ij. Adaugarea muchiei ne asigura ca, culorile asociate celor doua noduri sunt, intr-adevar, diferite. • care il au pe i, j colorate la fel; i, j sunt unificate si reprezinta un singur nod, deci sunt fortate sa aiba aceeasi coloare. Aceasta metoda se mai numeste reducerea lui i, j si se noteaza Gij.

Figure 20: Un exemplu de colorare a grafului Abordare din punct de vedere molecular presupune construirea unei librarii initiale de culori: pentru fiecare nod v1 ∈ V , vom sintetiza o singura oligonucleotida pentru a reprezenta fiecare vi = rosu, vi = verde, vi = albastru. Fiecare muchie este o molecula dublu- inlantuita. Pentru fiecare muchie avem exact sase molecule dublu- inlantuite, fiecare reprezentand o pereche de culori distincte la capatul muchiei moleculei. Acum, pentru a forma graful, toate moleculele- muchii si toate nodurile sunt combinate si capetelor lor compatibile li se permite sa formeze ADN-ul dublu inlantuit. Odata formate, muchiile se unesc prin etansarea tuturor crestaturilor din lanturile ADN cu ajutorul operatiei de legare. Solutia la problema 3- colorarii garfului se poate afla prin urmarea pasilor: • Se combina toate blocurile de constructie ale nodurilor cu toate muchiile intrun singur test de tub si se i permite capatului complementar sa hibrideze si sa fie legat. • Se determina daca structura ADN a grafului s-a format din:

24

1. Se elimina partial structura ADN-ului format cu capete deschise care nu s-au potrivit. 2. Din graful format la pasul anterior, se elimina prin electroforeza gelului grafurile care sunt mai mari decat graful initial. 3. Daca mai sunt structuri de graf in tubul de test, atunci tragem concluzia ca graful este 3- colorabil.

25

4

Modele de filtrare ADN

4.1

Metode de calcul ADN

In functie de natura operatiilor pe care le contin, metodele de calcul ADN se impart in 3 categorii: 1. Filtrare; in toate metodele de filtrare, calclucul consta dintr-o secventa de operatii pe multimi finite de siruri de caractere. Este normal cazul in care calculul incepe si se termina cu o singura multi- multime. In timpul calculelor, prin aplicarea de operatii permise ale unei metode, pot exista mai multe multi- multimi in acelasi timp. 2. Separare; din moment ce orice instanta a oricarei probleme din din clasa NP poate fi exprimata ca o instanta a oricarei probleme N P- complete, rezulta ca operatiile multi-multimilor trebuie sa fie capabile sa furnizeze suficienta putere de calcul pentru a rezolva orice problema N P. Asa - zisa metoda de separare furnizeaza suficienta compatibilitate Turing. 3. Constructive; o arie importanta de cercetare care se remarca este cautarea algoritmilor care actioneaza asupra dimensiunii polinomiale ale multimilor de caractere (de exemplu, cantitatea de ADN). Este o certitudine faptul ca filtrarea nu suporta astfel de algoritmi, din moment ce ea se bazeaza pe existenta dimensiunii exponentiale ale multimii de siruri de caractere.

4.2

Metode de filtrare

In toate modelele de filtrare (definite de Adelman si generalizate de Lipton si Amos), un calcul este o secventa de operatii asupra multi- multimilor finite de siruri de caractere. Multi- multimile sunt multimi care contin mai multe copii ale aceluiasi element. Normal este cazul in care un calcul incepe si se termina cu un singur multi-set. Fara calcul, prin aplicare de operatii permise asupra unui model, mai multe multi - multimi pot exista in acelasi timp. Vom descrie operatiile asupra multi- multimilor dupa ce von detalia natura multimii initiale. O multi -multime initiala este alcatuita din stringuri care au de obicei lungimea O(n) , unde n este dimensiunea problemei. Ca si submultime, muti26

multimea initiala ar trebui sa includa toate solutiile posibile (fiecare codificata de un sir de caractere) ale problemei ce urmeaza a fi rezolvata. Ideea de aici este ca super multimea, in orice implementare a modelului, este, in principiu, relativ usor de generat ca un punct de incepere pentru un calcul. Calculul continua apoi cu filtrarea multimilor de caractere care nu pot fi o solutie. De exemplu, calculul poate incepe cu o multi- multime ce contine siruri de caractere care reprezinta toate cele 3 colorari posibile ale unui graf, si merge mai departe cu inlaturarea acelora care codifica colorari incorecte. Pentru a da un alt exemplu, daca problema cere sa se genereze o permutare ale numerelor intregi 1...n , atunci multi- multimea initiala ar putea contine toate sirurile de caractere de forma p1 i1 p2 i2 ...pn in unde fiecare ik poate fi oricare din numerele intregi cuprinse in intervalul [1, ...n] si pk codifica informatia ”pozitia k ”. Pentru exemplul nostru cu permutarea, ar trebui sa filtram toate sirurile de caractere in care acelasi intreg apare in cel putin 2 locatii pk . Oricare din sirurile de caractere care raman este atunci o solutie viabila a problemei. 4.2.1

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

De exemplu, fiind dat α= {A, B, C}, algoritmul care urmeaza returneaza true numai daca multimea initiala contine un sir compus numai din caracterul ”A”: Input(T) T ← - (T, B) T ← - (T, C) Output((T)) Adelman descrie un algoritm pentru problema colorarii grafului. Pentru a obtine o culoare potrivita a unui graf G=(V, E), culorile sunt asociate astfel incat 2 noduri adiacente sa nu aiba aceeasi culoare.

Figure 21: Un primer

28

Vom descrie acum algoritmul lui Adelman in detaliu. Multimea initiala, T, este formata din siruri de caractere de forma c1 , c2 , ..., cn , unde ci ∈ {ri , gi , bi } si n este |V |, numarul de varfuri din graful G. Astfel, fiecare sir de caracter reprezinta o posibila (dar nu neaparat favorabila) colorare a grafului dat. Prin referire la Fig 2, culoarea reprezentata in (c) ar putea fi codificata de sirul de caractere b0 , g1 , b2 , r3 , iar colorarea la (d) ar fi codificata de b0 , g1 , r2 , r3 . Sa presupunem ca toate colorarile posibile sunt reprezentate in T. Algoritmul functioneaza astfel: 1. se citeste multimea initiala T 2. pentru fiecare nod executa 3.

din T, se creeaza canalul rosu ce contine sirurile de caractere ce codifica nodul rosu, si se creeaza canalul albastru/verde ce contine toate celelalte siruri

4.

se creeaza canalul albastru din canalul albastru/verde, si se creeaza tubul rosu din sirurile ramase

5.

pentru toate muchiile adiacente acestui nod executa

6.

din nodul rosu se elimina sirurile de caractere ce codifica nodul adiacent rosu

7.

din nodul albastru se elimina sirurile ce codifica nodul adiacent albastru

8.

din nodul verde se elimina sirurile ce codifica nodul adiacent verde

9. 10.

end for se combina rosu, verde si albastru pentru a forma noul canal T

11. end for 12. se citeste ce a ramas in T 29

Sau, reprezentat mai simplu: 1. Intrare (T) 2. for i =1 to n do begin 3.

Tr ← +(T, ri ) and Tbg ← —(T, ri )

4.

Tb ← +(Tbg , bi ) and Tg ← —(Tbg , bi )

5.

pentru fiecare j astfel incat ∈ E do begin

6.

Tr ← —(Tr , rj )

7.

Tg ← —(Tg , gj )

8.

Tb ← —(Tb , bj )

9. 10.

end for T ← combina( Tr , Tg , Tb )

11. end for 12. Iesire (identifica(T )) La pasul 1 am introdus ca date de intrare toate colorarile posibile ale grafului. Atunci, pentru fiecare nod vi ∈ V executam urmatorii pasi: impartim T in 3 multimi, Tr , Tg , Tb , unde Tr contine stringurile ce contin ri , TG continand numai sirurile gi si Tb ce contine numai sirurile bi (pasii 3-4). Apoi, pentru fiecare muchie ∈E, vom elimina din aceste multimi orice string ce contine ci = cj (de exemplu, acele stringuri ce codifica colorarea unde nodurile adiacente i, j sunt colorate la fel) (pasii 5-9). Dupa aceea, aceste multimi sunt combinate, formand noua multime T (pasul 10), iar algoritmul trece la nodul urmator (pasul 11). Dupa ce colorarea fiecarui nod a fost satisfacuta, vom demara o detectie (pasul 12). daca T este nevida, atunci orice sir de caractere din T codifica o anumita 3-colorare a grafului G.

30

4.2.2

Modelul de satisfiabilitate

Lipton a descris o solutie pentru o alta problema de tip N P, asa- numita problema de satisfacere (SAT). SAT poate fi intrerpretata ca: fiind dat o multime finita V = {v1 , v2 , ..., vn } de variabile logice, vom defini o litera ca fiind o variabila vi sau complementul sau vi ; daca vi este adevarat, atunci vi este fals si vice- versa. Definim o clauza (propozitie), Cj ca fiind un set de litere. O instanta, I, a SAT este formata dintr-o multime de propozitii. Problema este sa asociem o valoare booleana fiecarei variavile din V astfel incat cel putin o variabila din fiecare propozitie sa aiba valoarea adevarat. Acesta este momentul in care putem spune ca I a fost satisfacuta. Cu toate ca Lipton nu defineste in mod explicit operatiile cu multimi, solutia sa poate fi exprimata in termenii operatiilor descrise de Adelman. Lipton foloseste operatiile combina, separa si detecteaza. Multimea initiala T contine multe siruri de caractere, fiecare codificand o secventa de n- biti. Toate secventele posibile de n- biti sunt reprezentate in T. Algoritm functioneaza astfel: 1. Se creeaza multimea initiala T 2. Pentru fiecare propozitie executa incepe 3.

pentru fiecare litera vi executa incepe

4.

daca vi = xj extrage din T sirurile ce codifica vi = 1 altfel

5.

extrage din T sirurile ce codifica vi = 0

6.

sfarsit pentru

7.

creeaza o noua multime T prin combinarea sirurilor extrase

8. sfarsit pentru 9. daca T este nevida atunci I este satisfacator

31

4.2.3

Metoda de filtrare paralela

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

Figure 22: Implementarea functiei distruge • uniunea ({Ui , U}). Aceasta operatie multimea U care este multimea reunita a multimilor Ui • copierea (U, {Ui }). Aceasta operatie produce un numar de copii, Ui , ale multimii U • selectarea(U). Aceasta operatie selecteaza un element aleator din U ; daca U este multime vida, atunci se returneaza 0. 4.2.4

Un prim algoritm

Vom descrie acum primul algoritm caracteristic metodei. Problema care trebuie rezolvata este ceea a generarii multimii tuturor permutarilor numerelor intregi de la 1 la n. o permutare este o rearanjare a elementelor multimii, unde niciunul dintre ele nu este eliminat, adaugat sau schimbat. Multimea initiala si filtrarea sirului de caractere care nu puteau fi permutate au fost descrise mai devreme. Descrierea algoritmului de mai jos introduce un format pe care il vom utiliza si in alte parti. Componenta particulara a copierii unei multimi (ca in

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

Sa se genereze o multime Pn ale tuturor permutarilor numerelor intregi {1, 2, .., n} Solutie: • Intrare: Multimea de intrare U este formata din toate stringurile de forma p1 i1 p2 i2 ...pn in unde, pentru fiecare j, pj unice se codifica ”pozitia j ” iar fiecare ij se afla in {1, 2, ..., n}. Asadar fiecare sir de caractere este format din n intregi cu mai multe (posibile) aparitii ale aceluiasi intreg. • Algoritmul pentru j =1 la n - 1 executa Incepe copiaza(U, {U1 , U2 , .., Un }) pentru i = 1, 2, .., n si k > j executa in paralel elimina (Ui , {pj 6=i, pk i}) uniune ( {U1 , U2 , .., Un }, U ) sfarsit Pn ←U • Complexitatea: O(n) in timp paralel Dupa iterarea j a buclei for, calculul se asigura ca in sirurile care au ramas intregul 1j nu se dubleaza la pozitia k > j din sir. Intregul l 1j poate fi oricare din multimea {1, 2, .., n}. La terminarea calculului, fiecare din sirurile ramase vor contine exact o instanta a fiecarui intreg din multimea {1, 2, .., n}. si astfel reprezinta una din permutarile posibile. Fiind data intrarea specifica, este usor de observat ca Pn va fi multimea tuturor permutarilor ale primelor n numere.

34

4.2.6

Algoritmi de selectie a unei probleme N P complete: Problema colorarii grafului

Vom descrie acum un set de algoritmi de teoria grafurilor pentru rezolvarea porblemelor N P complete. Problemele din clasa de complexitate N P par sa aiba o expresie naturala si sa usureze gasirea solutiilor: Problema: utilizarea a 3 culori Fiind dat un graf G = (V, E), gasiti nodurile colorate daca exista, in caz contrar returneaza zero. Solutie: • Date de intrare: Multimea initiala U formata din toate stringurile de forma p1 c1 p2 c2 ...pn cn unde n=|V | este numarul de noduri din graf. Pentru fiecare i, pi codifica pozitia ”i”, iar fiecare ci reprezinta una dintre ”culori”, 1, 2 sau 3. Fiecare asemenea string reprezinta o posibila asociere a culorilor cu nodurile grafului. • Algoritm: pentru j =1 la n executa Incepe copiaza(U, {U1 , U2 , U3 }) pentru i = 1, 2, 3 si k astfel incat (j, k )∈ E executa in paralel elimina (Ui , {pj 6=i, pk i}) uniune ( {U1 , U2 , U3 }, U ) sfarsit selecteaza (U ) • Complexitatea: O(n) in timp paralel Dupa iterarea j a buclei for,l se asigura ca in varfurile care au ramas i j (desi poate fi colora cu 1, 2 sau 3, depinzand de care din multimile Ui au ramas) nu exista noduri adiacente care au aceeasi culoare. Deci, cand algoritmul se incheie, U codifica numai culorile posibile daca exista. De asemenea, fiecare colorare viabila va fi reprezentata in U. 35

4.2.7

Problema dumurilor hamiltoniene

Problema: Drumurile Hamiltoniene Un drum Hamiltonian intre oricare 2 noduri u, v ale unui graf este un graf care trece prin fiecare nod din V—{u, v} o singura data. Fiind dat un graf G=(V, E) cu n noduri, sa se determine daca G contine un drum Hamiltonian. Solutie: • Date de intrare: multimea de intrare U este multimea Pn ale tuturor permutarilor numerelor intregi de la 1 la n ca si datele de iesire de la Problema: Permutarile. Un numar intreg i la pozitia pk intr-o permutare, se interpreteaza astfel: sirul de caractere reprezinta o solutie ce candideaza la problema in care nodul i este vizitat la pasul k. • Algoritm: pentru 2 ≤ i ≤ n -1 si j, k astfel incat (j, k )∈ /E executa in paralel elimina (U, {jpi k}) selecteaza (U ) • Complexitate: constanta paralela a timpului dat Pn In stringurile ramase este o muchie a grfului pentru fiecare pereche consecutiva de noduri din sirul de caractere. Din moment ce sirul de caractere este tot o permutare a multimii nodurilor trebuie, de asemenea, sa fie si un drum Hamiltonian. Desigur, U va contine toate solutiile viabile ale problemei. 4.2.8

Problema izomorfismului subgrafului

Fiind date 2 grafuri G1 , G2 , urmatorul algoritmul verifica daca G2 este subgraf al lui G2 . Problema: izomorfismul subgrafurilor Este G2 = (V2 , E2 ) un subgraf al lui G1 = (V1 , E1 )? Prin {v1 , v2 , ..., vs } intelegem multimea nodurilor din G1 ; in mod asemanator, multimea nodurilor din G2 este {u1 , u2 , ..., us } unde luam t ≤ s. Solutie:

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

Vom introduce acum o metoda alternativa de filtrare, numita metoda sticker. In cadrul acestui model, operatiile sunt efectuate pe multi-multimi de siruri de caractere in alfabetul binar {0, 1}. Sirurile de memorie au lungimea n de caractere si contin k substringuri nesuprapuse de lungime m. Fiecare subsir corespunde unei variabile Booleene (sau bit), deci in metoda fiecare subsir este on sau off. Vom descrie in continuare operatiile metodei sticker. Ele sunt similare celor descrise mai sus, deci pastram acelasi sistem general de notatie. Un tub este o multi- multime, membrii ei fiind siruri de memorare. 37

• combina: creeaza o uniune a multi- multimilor celor doua tuburi. • separa (N, i). Fiind dat un tub N si un numar intreg i, se creeaza doua noi tuburi +(N, i) si -(N, i) unde +(N, i) contine toate sirurile din N cu subsirurile i setate pe on, iar -(N, i ) contine toate stringurile din N cu subsirurile i setate pe off. • porneste (N, i). Fiind data un tub N si un intreg i, se creeaza o noua multime de tuburi (N, i) in care subsirul cu numarul ı din fiecare lant de memorie este pornit. • curata (N, i). Fiind dat un tub N si un intreg i, se creeaza o noua multime de tuburi (N, i) in care subsirul cu numarul ı din fiecare lant de memorie este oprit. Ca si in modelele anterioare, calculele sunt alcatuite din secvente de operatii ale multimii disponibile. Rezultatul final este citit la capautl tubului prin determinarea continutului lanturilor de memorie. Algoritmul pentru metoda sticker este: 1. initializeaza (p, q) in tubul N0 2. bf pentru i= 1 la q executa incepe 3. 4.

N0 ← separa ((+(N0 , i), -(N0 , i)) pentru j = 1 la |Ci |

5. 6. 7.

porneste ((+(N0 , i), q+ ci ) sfarsit pentru N0 ← combina ((+(N0 , i), -(N0 , i))

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.

pentru j-1 pana la 0 incepe

3.

separa ((+(Nj , i + 1), -(Nj , i + 1))

4.

Nj+1 ← combina ((+(Nj , i + 1) ,Nj+1 )

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

5

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

Aplicatii ale problemei colorarii grafului

Colorarea varfurilor unui graf are o arie de aplicabilitate destul de mare: • colorarea unei harti, astfel incat doua tari vecine sa nu aiba aceeasi culoare si sa foloseasca cel mai mic numar de culori; • organizarea unui program de examinare intr-o scoala; fiecare examinare are nevoie de o anumita perioada de timp, iar scoala vrea sa organizeze cat mai multe examinari posibile in paralel; • niste avioane se apropie de un aeroport; sistemul de control al traficului le asociaza o altitudine, pe care o mentin pana la aterizare. Daca sosirile a doua avioane coincid, avioanele nu pot folosi aceeasi altitudine. • anumite vehicule sunt folosite pentru a transporta anumite elemente( produse). Anumite elemente nu pot fi transportate impreuna cu altele in acelasi vehicul, deoarece sunt periculoase sau necesita echipament specializat. Problema este aceea de a reduce la minim numarul vehiculelor necesare. • frecventele radio trebuie sa fie atribuie radio- difuzarii unei statii de emisie, in asa fel incat doua statii alaturate, care ar putea interfera, sa foloseasca frecvente diferite( fiecare staie de emisie poate avea nevoie de una sau mai multe frecvente); • dezvoltarea unui joc de puzzle sau sudoku; la sudoku, fiecare careu, linie sau coloana nu trebuie sa contina mai mult de o instanta a unui numar; 40

5.2

Originile limbajului C++

Limbajul C sta la baza limbajului C++. C a fost dezvoltat de Denis Ritchie in anii ’70 si implementat pe un calculator ce utiliza sistemul de operare UNIX. C isi are de asemenea descendent in limbajul B, inventat de Ken Thompson. Procesul de standardizare al lui C a durat aproape 6 ani. C este un limbaj de nivel mediu. El combina cele mai bune facilitati ale unui limbaj de nivel inalt cu posibilitatile de control si flexibilitatea limbajului de ansamblare. Datorita acestei caracteristici, C permite lucrul cu biti, octeti si adrese (elementele de baza cu care functioneaza calculatorul). Chiar daca C acopera o mare varietate de posibilitati de dezvoltare, cresterea complexitatii programelor a dus la crearea lui C++( denumit initial C cu clase). Aceste clase sunt formate din obiecte (entitati logice care incapsuleaza atat date , cat si cod care manevreaza aceste date). C++ este un limbaj de programare orientata pe obiect . Principalele caracteristici ale programarii orientata pe obiecte sunt: • incapsularea. Incapsularea este un mecanism care leaga impreuna codul si datele si le pastreaza pe ambele in siguranta fata de interventii din afara si de utilizari gresite. Incapsularea este cea care permite crearea unui obiect. Intr-un obiect, o parte din cod si/ sau date pot fi particulare acelui obiect si inaccesibile pentru orice din afara sa. In acest fel, un obiect dispune de un nivel semnificativ de protectie care impiedica modificarea accidentala sau utilizarea incorecta de catre sectiuni ale programului cu care nu are legatura. • polimorfismul. Polimorfismul este caracteristica ce permite unei interfete sa fie folosita cu o clasa generala de actiuni. Polimorfismul este caracterizat prin fraza ”o interfata, metode mutiple”. El ajuta la reducerea complexitatii, permitand aceleiasi interfete sa fie folosita pentru a specifica o clasa generala de actiuni. • mostenirea. Mostenirea este procesul prin care un obiect poate sa preia prototipul altui obiect. Acest lucru permite conceptul de clasificare. Majoritatea cunostiintelor sunt accesibile deoarece sunt clasificate ierarhic (exemplu: un mar ionatan face parte din clasa mar, care face parte din clasa fructe). Fara

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

Tehnici de programare folosite in aplicatia lucrarii

Pentru a implementa algoritmul colorarii varfurilor unui graf am folosit Dev C++, un mediu de dezvoltare (IDE) open source (gratuit). Fisierele antet (header, cu extensia .h) folosite sunt: #include #include #include #include #include #include

// fisier C de intrare/ iesire // programe grafice, figuri geometrice, etc // genereaza nr. random, aloca memorie, etc // imlpementeaza functii matematice de baza // intrare/ iesire // intrare, iesire

Sintaxa # include spune compilatorului sa ”citeasca” si un alt fisier sursa in afara de cal care o contine. using namespace std permite gruparea entitatilor precum clasele, obiectele sau functiile sub un singur nume. Functiile sunt constructii- bloc si locul unde se petrece intreaga activitate a programului. Ele sunt cea mai importanta caracteristica. Forma generala a unei functii este : specificator de tip nume functie(lista de parametrii) { corpul functiei } , unde specificator de tip specifica tipul de date pe care il returneaza functia ( daca nu este specificat niciun tip, returneaza un rezultat de tip int), (lista de parametrii este o lista de nume de variabile si tipuri de date asociate lor care primesc valorile argumentelor atunci cand este apelata functia. Corpul functiei este propriu acelei functii si nicio instructiune din alta functie nu poate sa aiba acces la el decat printr-un apel al functiei. Variabilele 42

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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF