2024-03-25 10:38:20 +01:00
\chapter { Section alignment}
\section { Needleman - Wunsch algorithm}
\begin { algorithm}
\caption { Needleman-Wunsch Algorithm}
\begin { algorithmic} [1]
\Procedure { FillMatrix} { $ S _ { 1 } $ : Array($ m $ ), $ S _ { 2 } $ : Array($ n $ )}
\Comment { $ sub ( a, b ) $ is the substitution score, $ del ( a ) $ and $ ins ( a ) $ are the deletion and insertion penalty, in regard with the reference $ S _ { 1 } $ sequence}
\State $ M = $ Array($ m + 1 $ , $ n + 1 $ )
\Comment { Initialize the matrix first column and first row}
\State $ P = $ Array($ m $ , $ n $ ) \Comment { Store the direction of the cell we chose to build the next cell up on.}
2024-03-25 12:04:13 +01:00
\State $ M [ 0 ] [ 0 ] = 0 $
\For { ($ i = 1 $ ; $ i < m + 1 $ ; $ i + + $ )}
\State $ M [ i ] [ 0 ] = M [ i - 1 ] [ 0 ] + gap \_ penalty $
2024-03-25 10:38:20 +01:00
\EndFor
2024-03-25 12:04:13 +01:00
\For { ($ j = 1 $ ; $ j < n + 1 $ ; $ j + + $ )}
\State $ M [ 0 ] [ j ] = M [ 0 ] [ j - 1 ] + gap \_ penalty $
2024-03-25 10:38:20 +01:00
\EndFor
\Comment { Fill the remaining matrix}
\For { ($ i = 1 $ ; $ i < m + 1 $ ; $ i + + $ )}
\For { ($ j = 1 $ ; $ j < n + 1 $ ; $ j + + $ )}
2024-03-25 12:04:13 +01:00
\State $ delete = M [ i - 1 ] [ j ] + gap \_ penalty $
\State $ insert = M [ i ] [ j - 1 ] + gap \_ penalty $
2024-03-25 10:38:20 +01:00
\State $ substitute = M [ i - 1 ] [ j - 1 ] + sub ( S _ { 1 } [ i - 1 ] , S _ { 2 } [ j - 1 ] ) $
2024-03-25 12:04:13 +01:00
\State $ choice = \min \{ delete, insert, substitute \} $
2024-03-25 10:38:20 +01:00
\If { $ substitute = choice $ }
\State $ P [ i - 1 ] [ j - 1 ] = ' \nwarrow ' $
2024-03-25 12:04:13 +01:00
\ElsIf { $ deletion = choice $ }
2024-03-25 10:38:20 +01:00
\State $ P [ i - 1 ] [ j - 1 ] = ' \leftarrow ' $
2024-03-25 12:04:13 +01:00
\Else
\State $ P [ i - 1 ] [ j - 1 ] = ' \uparrow ' $
2024-03-25 10:38:20 +01:00
\EndIf
\State $ M [ i ] [ j ] = choice $
\EndFor
\EndFor
\EndProcedure
2024-03-25 12:04:13 +01:00
\end { algorithmic}
\end { algorithm}
\begin { algorithm}
\caption { Needleman-Wunsch Algorithm (Backtrack)}
\begin { algorithmic} [1]
2024-03-25 10:38:20 +01:00
\Procedure { ShowAlignment} { $ S _ { 1 } $ : Array($ m $ ), $ S _ { 2 } $ : Array($ n $ )}
\State $ extend _ { 1 } = '' $
\State $ extend _ { 2 } = '' $
\State $ i = m $
\State $ j = n $
\While { $ i > 0 $ and $ j > 0 $ }
\If { $ P [ i - 1 ] [ j - 1 ] = ' \nwarrow ' $ }
\State $ extend _ { 1 } = S _ { 1 } [ i - 1 ] \circ extend _ { 1 } $
\State $ extend _ { 2 } = S _ { 2 } [ j - 1 ] \circ extend _ { 2 } $
\State $ i - - $
\State $ j - - $
\ElsIf { $ P [ i - 1 ] [ j - 1 ] = ' \uparrow ' $ }
\State $ extend _ { 1 } = S _ { 1 } [ i - 1 ] \circ extend _ { 1 } $
2024-03-25 12:04:13 +01:00
\State $ extend _ { 2 } = ' - ' \circ extend _ { 2 } $
2024-03-25 10:38:20 +01:00
\State $ i - - $
\Else
2024-03-25 12:04:13 +01:00
\State $ extend _ { 1 } = ' - ' \circ extend _ { 1 } $
2024-03-25 10:38:20 +01:00
\State $ extend _ { 2 } = S _ { 2 } [ j - 1 ] \circ extend _ { 2 } $
\State $ j - - $
\EndIf
\EndWhile
2024-03-25 12:04:13 +01:00
\While { $ i > 0 $ }
\State $ extend _ { 1 } = S _ { 1 } [ i - 1 ] \circ extend _ { 1 } $
\State $ extend _ { 2 } = ' - ' \circ extend _ { 2 } $
\State $ i - - $
\State \Call { Insert} { 0, $ alignment $ ,$ tuple $ }
\EndWhile
\While { $ j > 0 $ }
\State $ extend _ { 1 } = ' - ' \circ extend _ { 1 } $
\State $ extend _ { 2 } = S _ { 2 } [ j - 1 ] \circ extend _ { 2 } $
\State $ j - - $
\EndWhile
2024-03-25 10:38:20 +01:00
\State \Call { print} { $ extend _ { 1 } $ }
\State \Call { print} { $ extend _ { 2 } $ }
\EndProcedure
\State \Call { FillMatrix} { $ S _ { 1 } $ , $ S _ { 2 } $ }
2024-03-25 12:04:13 +01:00
\State \Call { ShowAlignment} { $ S _ { 1 } $ , $ S _ { 2 } $ }
\end { algorithmic}
\end { algorithm}
\begin { algorithm}
\caption { Needleman-Wunsch Algorithm (Backtrack) }
\begin { algorithmic} [1]
\Procedure { FillMatrix} { $ S _ { 1 } $ : Array($ m $ ), $ S _ { 2 } $ : Array($ n $ )}
\State $ M = $ Array($ m + 1 $ , $ n + 1 $ )
\State $ P = $ Array($ m $ , $ n $ )
\Comment { Store the direction of the cell we chose to build the next cell up on.}
\State $ M [ 0 ] [ 0 ] = 0 $
\For { ($ i = 1 $ ; $ i < m + 1 $ ; $ i + + $ )}
\State $ M [ i ] [ 0 ] = M [ i - 1 ] [ 0 ] + gap \_ penalty $
\EndFor
\For { ($ j = 1 $ ; $ j < n + 1 $ ; $ j + + $ )}
\State $ M [ 0 ] [ j ] = M [ 0 ] [ j - 1 ] + gap \_ penalty $
\EndFor
\For { ($ i = 1 $ ; $ i < m + 1 $ ; $ i + + $ )}
\For { ($ j = 1 $ ; $ j < n + 1 $ ; $ j + + $ )}
\State $ delete = M [ i - 1 ] [ j ] + gap \_ penalty $
\State $ insert = M [ i ] [ j - 1 ] + gap \_ penalty $
\State $ substitute = M [ i - 1 ] [ j - 1 ] + sub ( S _ { 1 } [ i - 1 ] , S _ { 2 } [ j - 1 ] ) $
\State $ M [ i ] [ j ] = \min \{ substitute, insert, delete \} $
\EndFor
\EndFor
\EndProcedure
\end { algorithmic}
\end { algorithm}
\begin { algorithm}
\caption { Needleman-Wunsch Algorithm, using proper notation (Backtrack)}
\begin { algorithmic} [1]
\Procedure { BacktrackAlignment} { $ S _ { 1 } $ : Array($ m $ ), $ S _ { 2 } $ : Array($ n $ )}
\State $ alignment = LinkedList $
\State $ i = m $
\State $ j = n $
\While { $ i > 0 $ and $ j > 0 $ }
\If { $ M [ i - 1 ] [ j - 1 ] = M [ i ] [ j ] - sub ( S _ { 1 } [ i - 1 ] , S _ { 2 } [ j - 1 ] ) $ }
\State $ tuple = \begin { pmatrix } S _ { 1 } [ i - 1 ] \\ S _ { 2 } [ j - 1 ] \end { pmatrix } $
\State $ i - - $
\State $ j - - $
\ElsIf { $ M [ i - 1 ] [ j - 1 ] = M [ i ] [ j - 1 ] - gap \_ penalty $ }
\State $ tuple = \begin { pmatrix } S _ { 1 } [ i - 1 ] \\ \varepsilon \end { pmatrix } $
\State $ i - - $
\Else
\State $ tuple = \begin { pmatrix } \varepsilon \\ S _ { 2 } [ j - 1 ] \end { pmatrix } $
\State $ j - - $
\EndIf
\State \Call { Insert} { 0, $ alignment $ ,$ tuple $ }
\EndWhile
\While { $ i > 0 $ }
\State $ tuple = \begin { pmatrix } S _ { 1 } [ i - 1 ] \\ \varepsilon \end { pmatrix } $
\State $ i - - $
\State \Call { Insert} { 0, $ alignment $ ,$ tuple $ }
\EndWhile
\While { $ j > 0 $ }
\State $ tuple = \begin { pmatrix } \varepsilon \\ S _ { 2 } [ j - 1 ] \end { pmatrix } $
\State $ j - - $
\State \Call { Insert} { 0, $ alignment $ ,$ tuple $ }
\EndWhile
\EndProcedure
\State \Call { FillMatrix} { $ S _ { 1 } $ , $ S _ { 2 } $ }
\State \Call { BacktrackAlignment} { $ S _ { 1 } $ , $ S _ { 2 } $ }
2024-03-25 10:38:20 +01:00
\end { algorithmic}
\end { algorithm}