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