Skip to content

Instantly share code, notes, and snippets.

@Behoston
Created March 30, 2017 22:43
Show Gist options
  • Save Behoston/dedf5c9d090956e75f90f8a30fdfa464 to your computer and use it in GitHub Desktop.
Save Behoston/dedf5c9d090956e75f90f8a30fdfa464 to your computer and use it in GitHub Desktop.
Teraz nie wiem czy to jest optymalne ani sensowne
def smith_waterman(seq1, seq2):
"""Algorym podobny do algorytmu Smitha-Watermana dla naszych celów
:rtype : float
:return: wynik porównania dwóch sekwencji binarnych rozszerzonych o tolerancję (podobieństwo w %)
:param seq1: sekawencja binarna z dodaną tolerancją
:param seq2: sekwencja binarna z dodaną tolerancją
"""
m = len(seq1)
n = len(seq2)
def s(a, b):
"""
:param a: 0,1,2
:param b: 0,1,2
:return: wynik porównania
"""
if a == 2:
return b
elif b == 2:
return a
else:
return 2
tablica = [[0] * (m + 1), [0]]
for wiersz in xrange(1, n + 1):
for kolumna in xrange(1, m + 1):
lewy = tablica[1][kolumna - 1] - 1
gorny = tablica[0][kolumna] - 1
skos = tablica[0][kolumna - 1] + s(seq1[kolumna - 1], seq2[wiersz - 1])
tablica[1].append(max(lewy, gorny, skos))
tablica[0] = tablica[1]
tablica[1] = [0]
return float(tablica[0][m]) / (n + m)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment