Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Instalatii sanitare

Program de slabire cu succes gara...

Reconditionare cada baie din fonta

Problema imprimanta
 Here goes nothing

BCR sau Raiffeisen

Visual Studio 2022 instaleaza Epi...

Sfat alegere parbriz
 EMAG - recenzii false facute de ei?

Recomandare telefon 900-950

Nivel de trai

Semnal bun da'... prost
 De ce statiile de radio FM nu ren...

Pe unde pot sa gasesc statistici ...

Este reconditionat acest laptop?

Prelungire fire electrice
 

Cum imbunatatesc algoritmul Needleman Wunsch de string matching ?

- - - - -
  • Please log in to reply
1 reply to this topic

#1
urgenta

urgenta

    Member

  • Grup: Members
  • Posts: 524
  • Înscris: 25.09.2011
Pentru aliniamentul a doua siruri vreau o versiune a sa ce permite inserari de spatii goale si in sirul mare pentru cazul in care distanta e mai mica cand inserez in ambele siruri pentru a crea o potrivire mai buna.

Exemplu:  AAABCDDDE si ABCCCDEEE.

Dati-mi o idee va rog, sau pm cine e pasionat de algoritmica si imi poate zice unde sa caut.

Edited by urgenta, 01 January 2015 - 20:31.


#2
dilo00o

dilo00o

    Junior Member

  • Grup: Members
  • Posts: 121
  • Înscris: 24.03.2012
#! usr/bin/env python
# -*- coding: utf-8 -*-
from score import Score
from sequence import Sequence
class NeedlemanWunsch:
	def __init__(self, firstSequence, secondSequence, score, openingGap, extendingGap):
		self.firstSequence_=firstSequence
		self.secondSequence_=secondSequence
		self.score_=score
		self.openingGap_=openingGap
		self.extendingGap_=extendingGap
		self.solutions_=[]
		self.V_=self.initMatrix() #Représentent les 3 matrices vues au cours
		self.W_=self.initMatrix()
		self.S_=self.initMatrix()
		self.calculS() #Calcul la matrice S
		self.findAlignement(len(self.firstSequence_)-1, len(self.secondSequence_)-1)
	def initMatrix(self, val=0):
		matrix=[]
		for i in range(len(self.firstSequence_)+1) :
			line=[]
			for j in range(len(self.secondSequence_)+1) :
				line+=[val]
			matrix.append(line)
		return matrix
	def calculS(self):
		for i in range(1, len(self.firstSequence_)+1):
			self.V_[i][0]=self.openingGap_+(i-1)*self.extendingGap_
			self.W_[i][0]=self.openingGap_+(i-1)*self.extendingGap_
			self.S_[i][0]=self.openingGap_+(i-1)*self.extendingGap_
		for j in range(1, len(self.secondSequence_)+1):
			self.V_[0][j]=self.openingGap_+(j-1)*self.extendingGap_
			self.W_[0][j]=self.openingGap_+(j-1)*self.extendingGap_
			self.S_[0][j]=self.openingGap_+(j-1)*self.extendingGap_
		for i in range(1, len(self.firstSequence_)+1):
			for j in range(1, len(self.secondSequence_)+1):
				self.V_[i][j]=max((self.S_[i-1][j]+self.openingGap_+self.extendingGap_), (self.V_[i-1][j]+self.extendingGap_))
				self.W_[i][j]=max((self.S_[i][j-1]+self.openingGap_+self.extendingGap_), (self.W_[i][j-1]+self.extendingGap_))
				self.S_[i][j]=max((self.S_[i-1][j-1]+self.score_.get(self.firstSequence_[i-1], self.secondSequence_[j-1])), (self.V_[i][j]), (self.W_[i][j]))
	def findAlignement(self, i, j, sequenceA="", sequenceB="", matching=""):
		if(i==0 or j==0):
			while(i>0):
				sequenceA=self.firstSequence_[i-1]+sequenceA
				sequenceB="-"+sequenceB
				matching=" "+matching
				i-=1
			while(j>0):
				sequenceA="-"+sequenceA
				sequenceB=self.secondSequence_[j-1]+sequenceB
				matching=" "+matching
				j-=1
			#Enregistrement dans la liste des résultats
			self.solutions_.append([self.S_[-1][-1], sequenceA, matching, sequenceB])
		else:
			if(self.S_[i][j]==(self.S_[i-1][j-1]+self.score_.get(self.firstSequence_[i-1], self.secondSequence_[j-1]))): #Diagonale
				if(self.firstSequence_[i-1]==self.secondSequence_[j-1]):
					match="|"
				else:
					match=" "
				self.findAlignement(i-1, j-1, self.firstSequence_[i-1]+sequenceA, self.secondSequence_[j-1]+sequenceB, match+matching)
			if(self.S_[i][j]==self.V_[i][j]): #Haut
				self.findAlignement(i-1, j, self.firstSequence_[i-1]+sequenceA, "-"+sequenceB, " "+matching)
			if(self.S_[i][j]==self.W_[i][j]): #Bas
				self.findAlignement(i, j-1, "-"+sequenceA, self.secondSequence_[j-1]+sequenceB, " "+matching)
	def __str__(self):
		solution=(str(len(self.solutions_))+" alignement(s) au total, de score: "+str(self.solutions_[0][0])+"\n")
		for i in range(len(self.solutions_)):
			solution+=("\n"
				+(self.solutions_[i][1])+"\n"
				+(self.solutions_[i][2])+"\n"
				+(self.solutions_[i][3])+"\n")
		return solution
if __name__ == '__main__':
	score=Score("blosum62.txt")
	sequences=Sequence("PDZ-sequences.fasta")
	openingGap=-14
	extendingGap=-4
	print(NeedlemanWunsch(sequences.getSequence(0), sequences.getSequence(1), score, openingGap, extendingGap))


Asta am facut pentru facultate anu trecut. E in python, calculeaza scorul de similaritate, la nevoie iti baga spatii in oricare din stranduri

Edited by dilo00o, 26 February 2015 - 16:09.


Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate