tex/theory1_ex7.tex
author Eugen Sawin <sawine@me73.com>
Mon, 25 Jul 2011 17:53:35 +0200
changeset 16 fbceeed002c5
permissions -rw-r--r--
Exercise 10.
     1 \documentclass[a4paper, 10pt, pagesize, smallheadings]{article}  
     2 \usepackage{graphicx}
     3 %\usepackage[latin1]{inputenc}
     4 \usepackage{amsmath, amsthm, amssymb}
     5 \usepackage{typearea}
     6 \usepackage{algorithm}
     7 \usepackage{algorithmic}
     8 \usepackage{fullpage}
     9 \usepackage{mathtools}
    10 \usepackage[all]{xy}
    11 \title{Theory I, Sheet 7 Solution}
    12 \author{Eugen Sawin}
    13 \renewcommand{\familydefault}{\sfdefault}
    14 \include{pythonlisting}
    15 
    16 \pagestyle{empty}
    17 \begin{document}
    18 \maketitle
    19 
    20 \section*{Exercise 7.1}
    21 For this exercise I've used a slightly different implementation of the KMP algorithm, which is semantically equal to the one presented in the lecture. 
    22 
    23 In this version the $next$ array is prepended with a $-1$, which I omit from the solutions to correspond to the lecture's algorithm's output.
    24 \begin{python}
    25 def kmp(text, pattern):    
    26     l = []
    27     n = next(pattern)
    28     j = 0
    29     for i in range(len(text)):        
    30         while j >= 0 and text[i] != pattern[j]:           
    31             j = n[j]
    32         j += 1
    33         if j == len(pattern):            
    34             l.append(i - len(pattern) + 1)
    35             j = n[j]        
    36     return l
    37 
    38 def next(pattern):
    39     n = [-1]
    40     j = -1
    41     for i in range(len(pattern)):        
    42         while j >= 0 and pattern[i] != pattern[j]:
    43             j = n[j]        
    44         j += 1
    45         n.append(j)        
    46     return n
    47 \end{python}
    48 
    49 \subsection*{1}
    50 \begin{align*}
    51 P &= rlrrlr\\
    52 next &= [0, 0, 1, 1, 2, 3]\\
    53 \end{align*}
    54 
    55 \subsection*{2}
    56 \begin{align*}
    57 P' &= rrllrrll\\
    58 next &= [0, 1, 0, 0, 1, 2, 3, 4]\\
    59 \end{align*}
    60 
    61 \subsection*{3}
    62 \begin{align*}
    63 P &= rlrrlr\\
    64 T &= lrrrlrrlllrrrlrrlrrllrlrrlrrlr\\
    65 next &= [0, 0, 1, 1, 2, 3]\\
    66 matched &= [12, 21, 24]\\
    67 \end{align*}
    68 You can find the full KMP-execution table in the attached text file \emph{kmp-output.txt}.
    69 
    70 \section*{Exercise 7.2}
    71 \begin{figure}[h]
    72 \entrymodifiers={+[F-]}
    73 \xymatrix
    74 {
    75   &   & C & H & U & P & A & C & A & B & R & A  & S\\
    76   & 0\ar@{-->}[dr] \ar[d] \ar[r] & \ar[r]1\ar[dr] & 2\ar[dr]\ar[r] & 3\ar[dr]\ar[r] & 4\ar[dr]\ar[r] & \ar[r]5 & 6\ar[r]\ar[dr] & 7\ar[r] & 8\ar[r] & 9\ar[dr]\ar[r] & 10\ar[r] & 11\\
    77 A & 1\ar[dr] \ar[d] & 1\ar[d]\ar[dr] \ar@{-->}[r] & 2\ar[r]\ar@{-->}[dr] & 3\ar[r]\ar[dr] & 4\ar[dr] & 4\ar[d]\ar[r]\ar[dr] & 5\ar[dr]\ar[r] & 6\ar[r]\ar[dr] & 7\ar[r] & \ar[r]8 & 9\ar[r]  & 10\\
    78 B & 2\ar[dr] \ar[d] & 2\ar[d]\ar[dr] & 2\ar[d]\ar[r]\ar[dr] & 3\ar[r]\ar@{-->}[dr] & 4\ar[r]\ar[dr] & 5\ar[dr] & 5\ar[d]\ar[r]\ar[dr] & 6\ar[dr] & 6\ar[d]\ar[r]\ar[dr] & 7\ar[r] & 8\ar[r]  & 9\\
    79 R & 3\ar[dr] \ar[d] & 3\ar[d]\ar[dr] & 3\ar[d]\ar[dr] & 3\ar[d]\ar[r]\ar[dr] & 4\ar[r]\ar@{-->}[dr] & 5\ar[r] & 6\ar[dr] & 6\ar[r]\ar[dr] & 7 & 6\ar[d]\ar[r]\ar[dr] & 7\ar[r]  & 8\\
    80 A & 4\ar[dr] \ar[d] & 4\ar[dr] & 4\ar[d]\ar[dr] & 4\ar[d]\ar[dr] & 4\ar[d]\ar[dr] & 4\ar[d]\ar[r]\ar@{-->}[dr] & 5\ar[r] & 6\ar[r] & 7 & 7 & 6\ar[d]\ar[r]\ar[dr]  & 7\\
    81 C & 5 \ar[d] & 4\ar[d]\ar[r]\ar[dr] & 5\ar[dr] & 5\ar[d]\ar[dr] & 5\ar[d]\ar[dr] & 5 & 4\ar[d]\ar[r]\ar@{-->}[dr] & 5\ar[r] & 6\ar[r] & 7\ar[dr] & 7\ar[dr]  & 7\ar[d]\\
    82 A & 6 \ar[d] & 5\ar[d]\ar[dr] & 5\ar[d]\ar[r]\ar[dr] & 6\ar[dr] & 6\ar[d] & 5\ar[d]\ar[dr] & 5\ar[d] & 4\ar[r]\ar[dr] \ar@{-->}[d] & 5\ar[r]\ar[dr] & 6\ar[r]\ar[dr] & 7\ar[r]\ar[dr]  & 8\\
    83 D & 7 \ar[d] & 6\ar[d]\ar[dr] & 6\ar[d]\ar[dr] & 6\ar[d]\ar[r]\ar[dr] & 7\ar[dr] & 6\ar[d]\ar[dr] & 6\ar[d]\ar[dr] & 5\ar[dr] \ar@{-->}[d] & 5\ar[d]\ar[dr]\ar[r] & 6\ar[r]\ar[dr] & 7\ar[r]  & 8\\
    84 A & 8 \ar[d] & 7\ar[d]\ar[dr] & 7\ar[d]\ar[dr] & 7\ar[d]\ar[dr] & 7\ar[d]\ar[dr] & 7\ar[d]\ar[dr] & 7\ar[d] & 6\ar[d] \ar@{-->}[dr] & 6\ar[dr] & 6\ar[d]\ar[dr] & 6\ar[d]\ar[dr]\ar[r]  & 7\\
    85 B & 9 \ar[d] & 8\ar[d]\ar[dr] & 8\ar[d]\ar[dr] & 8\ar[d]\ar[dr] & \ar[dr]8\ar[d] & 8\ar[d]\ar[dr] & 8\ar[d] & 7\ar[d] & 6\ar[d]\ar[r] \ar@{-->}[dr] & 7 & 7\ar[dr]  & 7\ar[d]\\
    86 R & 10 \ar[d]& 9\ar[d]\ar[dr] & 9\ar[d]\ar[dr] & 9\ar[d]\ar[dr] & 9\ar[d]\ar[dr] & 9\ar[dr] & 9\ar[d]\ar[dr] & 8\ar[d] & 7\ar[d] & 6\ar[d]\ar[r] \ar@{-->}[dr] & \ar[r]7  & 8\\
    87 A & 11 & 10& 10& 10& 10& 9\ar[r] & 10& 9 & 8 & 7 & 6 \ar@{-->}[r]  & 7\\
    88 }
    89 \end{figure}
    90 \newpage
    91 \noindent We specify the edit operations:
    92 \begin{enumerate}
    93 \item replace A with C
    94 \item insert H
    95 \item replace B with U
    96 \item replace R with P
    97 \item keep A
    98 \item keep C
    99 \item keep A
   100 \item delete D
   101 \item delete A
   102 \item keep B
   103 \item keep R
   104 \item keep A
   105 \item insert S
   106 \end{enumerate}
   107 And we get $D(A, B) = 7$.
   108 \end{document}