Needleman-Wunsch-algoritmen är en algoritm för att utföra en anpassning av två sekvenser (låt oss kalla dem och ) som används inom bioinformatik för att konstruera anpassningar av aminosyra- eller nukleotidsekvenser . Algoritmen föreslogs 1970 av Saul Needleman och Christian Wunsch [1] .
Needleman-Wunsch-algoritmen är ett exempel på dynamisk programmering , och det visade sig vara det första exemplet på tillämpningen av dynamisk programmering för jämförelse av biologiska sekvenser.
Överensstämmelsen mellan justerade tecken ges av likhetsmatrisen . Här är likheten mellan symboler och . En linjär gap penalty används också , här kallad .
Till exempel, om likhetsmatrisen ges av tabellen
- | A | G | C | T |
---|---|---|---|---|
A | tio | -ett | -3 | -fyra |
G | -ett | 7 | -5 | -3 |
C | -3 | -5 | 9 | 0 |
T | -fyra | -3 | 0 | åtta |
sedan justering:
GTTAC‒‒ G‒‒ACGTmed ett gap straff kommer att ha följande poäng:
För att hitta den högst poänggivande justeringen tilldelas en tvådimensionell matris (eller matris ) som innehåller lika många rader som det finns tecken i sekvensen och lika många kolumner som det finns tecken i sekvensen . En post i en rad och kolumn betecknas som . Således, om vi anpassar sekvenserna av storlekar och , kommer mängden minne som krävs att vara . ( Hirschbergs algoritm beräknar den optimala justeringen med hjälp av mängden minne men ungefär dubbelt så lång tid. )
Under driften av algoritmen kommer värdet att anta värdena för den optimala uppskattningen för att justera de första tecknen i och de första tecknen i . Då kan Bellmans optimalitetsprincip formuleras på följande sätt:
Grund: Rekursion baserad på principen om optimalitet:Således kommer pseudokoden för algoritmen för beräkning av matrisen F att se ut så här:
för i=0 till längd (A) F(i,0) ← d*i för j=0 till längd (B) F(0,j) ← d*j för i=1 till längd (A) för j = 1 till längd (B) { Matcha ← F(i-1,j-1) + S(A i , B j ) Ta bort ← F(i-1, j) + d Infoga ← F(i, j-1) + d F(i,j) ← max (matcha, infoga, ta bort) }När en matris beräknas ger dess element maximal poäng bland alla möjliga justeringar. För att beräkna den faktiska justeringen som ger poäng så här måste du börja i den nedre högra cellen och jämföra värdena i den cellen med de tre möjliga källorna (matchning, infogning eller radering) för att se var den kom ifrån. Om matchade , och är justerade, om de tas bort, justerade med en brytning, och om de infogas, med en brytning, justerade redan . (I allmänhet kan det finnas mer än ett alternativ med samma värde som kommer att resultera i alternativa optimala justeringar.)
AlignmentA ← "" AlignmentB ← "" i ← längd (A) j ← längd (B) medan (i > 0 eller j > 0) { Betyg ← F(i,j) ScoreDiag ← F(i - 1, j - 1) ScoreUp ← F(i, j - 1) ScoreLeft ← F(i - 1, j) if (Poäng == ScoreDiag + S(A i , B j )) { AlignmentA ← A i + AlignmentA AlignmentB ← B j + AlignmentB i ← i - 1 j ← j - 1 } annat om (Poäng == Poäng Vänster + d) { AlignmentA ← A i + AlignmentA AlignmentB ← "-" + AlignmentB i ← i - 1 } annars (Poäng == ScoreUp + d) { AlignmentA ← "-" + AlignmentA AlignmentB ← B j + AlignmentB j ← j - 1 } } medan (i > 0) { AlignmentA ← A i + AlignmentA AlignmentB ← "-" + AlignmentB i ← i - 1 } medan (j > 0) { AlignmentA ← "-" + AlignmentA AlignmentB ← B j + AlignmentB j ← j - 1 }Needleman och Wunsch beskrev uttryckligen sin algoritm för det fall där endast teckenmatchning eller felmatchning utvärderas, men inte gap ( ). Den ursprungliga publikationen [1] från 1970 föreslår en rekursion
Den motsvarande dynamiska programmeringsalgoritmen kräver kubiktid för att beräkna. Artikeln påpekar också att rekursionen kan anpassas till valfri form för gapstraff:
Spaltstraffet - siffran som subtraheras för varje mellanrum - kan ses som att förhindra luckor från att uppstå i linjen. Storleken på gapstraffet kan vara en funktion av gapets storlek och/eller riktning. [s. 444]
En snabbare kvadratisk-tid dynamisk programmeringsalgoritm för samma problem (ingen gap penalty) föreslogs först [2] av David Sankoff 1972. En liknande tidskvadratisk algoritm upptäcktes oberoende av T.K. Vintsyuk [3] 1968 för bearbetning av tal ( dynamisk skala pre-emphasis) och av Robert A. Wagner och Michael J. Fisher [4] 1974 för strängmatchning.
Needleman och Wunsch formulerade sitt problem i termer av att maximera likheten. En annan möjlighet är att minimera redigeringsavståndet mellan sekvenser som föreslagits av V. Levenshtein , men det visades [5] att dessa två problem är likvärdiga.
I modern terminologi hänvisar Needleman-Wunsch till en kvadratisk tidssekvensjusteringsalgoritm för en linjär eller affin gap penalty.
Strängar | |
---|---|
Stränglikhetsmått | |
Sök efter delsträng | |
palindromer | |
Sekvensjustering | |
Suffixstrukturer | |
Övrig |
Ordböcker och uppslagsverk |
---|