| author | Christian Urban <christian.urban@kcl.ac.uk> | 
| Thu, 05 Oct 2023 10:31:05 +0100 | |
| changeset 938 | 0eb340948fdb | 
| parent 936 | aabd9168c7ac | 
| child 939 | fb6ffb9b7304 | 
| permissions | -rw-r--r-- | 
| 23 | 1 | \documentclass{article}
 | 
| 264 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 2 | \usepackage{../style}
 | 
| 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 3 | \usepackage{../graphics}
 | 
| 23 | 4 | |
| 5 | \begin{document}
 | |
| 6 | ||
| 7 | \section*{Homework 3}
 | |
| 8 | ||
| 916 | 9 | %\HEADER | 
| 347 
22b5294daa2a
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
294diff
changeset | 10 | |
| 23 | 11 | \begin{enumerate}
 | 
| 647 | 12 | \item The regular expression matchers in Java, Python and Ruby can be | 
| 13 | very slow with some (basic) regular expressions. What is the main | |
| 14 | reason for this inefficient computation? | |
| 892 | 15 | |
| 16 |   \solution{Many matchers employ DFS type of algorithms to check
 | |
| 17 | if a string is matched by the regex or not. Such algorithms | |
| 18 | require backtracking if have gone down the wrong path which | |
| 19 | can be very slow. There are also problems with bounded regular | |
| 20 | expressions and backreferences.} | |
| 647 | 21 | |
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 22 | \item What is a regular language? Are there alternative ways | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 23 | to define this notion? If yes, give an explanation why | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 24 | they define the same notion. | 
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 25 | |
| 892 | 26 |       \solution{A regular language is a language for which every string
 | 
| 27 | can be recognized by some regular expression. Another definition is | |
| 28 | that it is a language for which a finite automaton can be | |
| 29 | constructed. Both define the same set of languages.} | |
| 30 | ||
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 31 | \item Why is every finite set of strings a regular language? | 
| 132 
04264d0c43bb
added
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
102diff
changeset | 32 | |
| 892 | 33 |   \solution{Take a regex composed of all strings (works for finite languages)}
 | 
| 34 | ||
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 35 | \item Assume you have an alphabet consisting of the letters | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 36 | $a$, $b$ and $c$ only. (1) Find a regular expression | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 37 | that recognises the two strings $ab$ and $ac$. (2) Find | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 38 | a regular expression that matches all strings | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 39 |       \emph{except} these two strings. Note, you can only use
 | 
| 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 40 | regular expressions of the form | 
| 258 
1e4da6d2490c
updated programs
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
146diff
changeset | 41 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 42 |   \begin{center} $r ::=
 | 
| 401 
5d85dc9779b1
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
355diff
changeset | 43 | \ZERO \;|\; \ONE \;|\; c \;|\; r_1 + r_2 \;|\; | 
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 44 | r_1 \cdot r_2 \;|\; r^*$ | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 45 |   \end{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 46 | |
| 647 | 47 | %\item Define the function \textit{zeroable} which takes a
 | 
| 48 | % regular expression as argument and returns a boolean. | |
| 49 | % The function should satisfy the following property: | |
| 50 | % | |
| 51 | %  \begin{center}
 | |
| 52 | %    $\textit{zeroable(r)} \;\text{if and only if}\; 
 | |
| 53 | %    L(r) = \{\}$
 | |
| 54 | %  \end{center}
 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 55 | |
| 892 | 56 |   \solution{Done in the video but there I forgot to include the empty string.}
 | 
| 57 | ||
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 58 | \item Given the alphabet $\{a,b\}$. Draw the automaton that has two
 | 
| 517 | 59 | states, say $Q_0$ and $Q_1$. The starting state is $Q_0$ and the | 
| 60 | final state is $Q_1$. The transition function is given by | |
| 258 
1e4da6d2490c
updated programs
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
146diff
changeset | 61 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 62 |   \begin{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 63 |     \begin{tabular}{l}
 | 
| 517 | 64 | $(Q_0, a) \rightarrow Q_0$\\ | 
| 65 | $(Q_0, b) \rightarrow Q_1$\\ | |
| 66 | $(Q_1, b) \rightarrow Q_1$ | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 67 |     \end{tabular}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 68 |   \end{center}
 | 
| 258 
1e4da6d2490c
updated programs
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
146diff
changeset | 69 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 70 | What is the language recognised by this automaton? | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 71 | |
| 936 | 72 | |
| 73 | ||
| 355 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 74 | \item Give a non-deterministic finite automaton that can | 
| 936 | 75 | recognise the language $L(a\cdot (a + b)^* \cdot c)$. | 
| 76 | ||
| 77 |   \solution{It is already possible to just read off the automaton without
 | |
| 78 | going through Thompson.} | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 79 | |
| 517 | 80 | \item Given a deterministic finite automaton $A(\varSigma, Q, Q_0, F, | 
| 355 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 81 | \delta)$, define which language is recognised by this | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 82 | automaton. Can you define also the language defined by a | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 83 | non-deterministic automaton? | 
| 23 | 84 | |
| 892 | 85 | |
| 86 |       \solution{
 | |
| 87 | A formula for DFAs is | |
| 88 | ||
| 89 |         \[L(A) \dn \{s \;|\; \hat{\delta}(start_q, s) \in F\}\]
 | |
| 90 | ||
| 91 |         For NFAs you need to first define what $\hat{\rho}$ means. If
 | |
| 92 | $\rho$ is given as a relation, you can define: | |
| 93 | ||
| 94 | \[ | |
| 95 |           \hat{\rho}(qs, []) \dn qs \qquad
 | |
| 96 |           \hat{\rho}(qs, c::s) \dn \bigcup_{q\in qs} \{ q' \; | \; \rho(q, c, q')\}
 | |
| 97 | \] | |
| 98 | ||
| 99 | This ``collects'' all the states reachable in a breadth-first | |
| 100 | manner. Once you have all the states reachable by an NFA, you can define | |
| 101 | the language as | |
| 102 | ||
| 103 | \[ | |
| 104 |         L(N) \dn \{s \;|\; \hat{\rho}(qs_{start}, s) \cap F \not= \emptyset\}
 | |
| 105 | \] | |
| 106 | ||
| 107 | Here you test whether the all states reachable (for $s$) contain at least | |
| 108 | a single accepting state. | |
| 109 | ||
| 110 | } | |
| 111 | ||
| 355 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 112 | \item Given the following deterministic finite automaton over | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 113 |       the alphabet $\{a, b\}$, find an automaton that
 | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 114 | recognises the complement language. (Hint: Recall that | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 115 | for the algorithm from the lectures, the automaton needs | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 116 | to be in completed form, that is have a transition for | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 117 | every letter from the alphabet.) | 
| 264 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 118 | |
| 892 | 119 |       \solution{
 | 
| 120 | Before exchanging accepting and non-accepting states, it is important that | |
| 121 | the automaton is completed (meamning has a transition for every letter | |
| 122 | of the alphabet). If not completed, you have to introduce a sink state. | |
| 123 | ||
| 124 | For fun you can try out the example with | |
| 125 | out completion: Then the original automaton can recognise | |
| 126 | strings of the form $a$, $ab...b$; but the ``uncompleted'' automaton would | |
| 127 | recognise only the empty string. | |
| 128 | } | |
| 129 | ||
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 130 |   \begin{center}
 | 
| 292 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 131 |     \begin{tikzpicture}[>=stealth',very thick,auto,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 132 |                         every state/.style={minimum size=0pt,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 133 | inner sep=2pt,draw=blue!50,very thick, | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 134 | fill=blue!20},scale=2] | 
| 517 | 135 |       \node[state, initial]        (q0) at ( 0,1) {$Q_0$};
 | 
| 136 |       \node[state, accepting]  (q1) at ( 1,1) {$Q_1$};
 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 137 |       \path[->] (q0) edge node[above] {$a$} (q1)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 138 |                 (q1) edge [loop right] node {$b$} ();
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 139 |     \end{tikzpicture}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 140 |   \end{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 141 | |
| 264 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 142 | |
| 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 143 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 144 | %\item Given the following deterministic finite automaton | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 145 | % | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 146 | %\begin{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 147 | %\begin{tikzpicture}[scale=3, line width=0.7mm]
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 148 | %  \node[state, initial]        (q0) at ( 0,1) {$q_0$};
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 149 | %  \node[state,accepting]  (q1) at ( 1,1) {$q_1$};
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 150 | %  \node[state, accepting] (q2) at ( 2,1) {$q_2$};
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 151 | %  \path[->] (q0) edge node[above] {$b$} (q1)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 152 | %                  (q1) edge [loop above] node[above] {$a$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 153 | %                  (q2) edge [loop above] node[above] {$a, b$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 154 | %                  (q1) edge node[above] {$b$} (q2)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 155 | %                  (q0) edge[bend right] node[below] {$a$} (q2)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 156 | % ; | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 157 | %\end{tikzpicture}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 158 | %\end{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 159 | %find the corresponding minimal automaton. State clearly which nodes | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 160 | %can be merged. | 
| 31 | 161 | |
| 355 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 162 | \item Given the following non-deterministic finite automaton | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 163 |       over the alphabet $\{a, b\}$, find a deterministic
 | 
| 
a259eec25156
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
347diff
changeset | 164 | finite automaton that recognises the same language: | 
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 165 | |
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 166 |   \begin{center}
 | 
| 292 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 167 |     \begin{tikzpicture}[>=stealth',very thick,auto,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 168 |                         every state/.style={minimum size=0pt,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 169 | inner sep=2pt,draw=blue!50,very thick, | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 170 | fill=blue!20},scale=2] | 
| 517 | 171 |       \node[state, initial]        (q0) at ( 0,1) {$Q_0$};
 | 
| 172 |       \node[state]                    (q1) at ( 1,1) {$Q_1$};
 | |
| 173 |       \node[state, accepting] (q2) at ( 2,1) {$Q_2$};
 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 174 |       \path[->] (q0) edge node[above] {$a$} (q1)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 175 |                 (q0) edge [loop above] node[above] {$b$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 176 |                 (q0) edge [loop below] node[below] {$a$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 177 |                 (q1) edge node[above] {$a$} (q2);
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 178 |     \end{tikzpicture}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 179 |   \end{center}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 180 | |
| 778 | 181 | \item %%\textbf{(Deleted for 2017, 2018, 2019)}
 | 
| 517 | 182 | Given the following deterministic finite automaton over the | 
| 271 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 183 |   alphabet $\{0, 1\}$, find the corresponding minimal automaton. In
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 184 | case states can be merged, state clearly which states can be merged. | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 185 | |
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 186 |   \begin{center}
 | 
| 292 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 187 |     \begin{tikzpicture}[>=stealth',very thick,auto,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 188 |                         every state/.style={minimum size=0pt,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 189 | inner sep=2pt,draw=blue!50,very thick, | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 190 | fill=blue!20},scale=2] | 
| 517 | 191 |       \node[state, initial]        (q0) at ( 0,1) {$Q_0$};
 | 
| 192 |       \node[state]                    (q1) at ( 1,1) {$Q_1$};
 | |
| 193 |       \node[state, accepting] (q4) at ( 2,1) {$Q_4$};
 | |
| 194 |       \node[state]                    (q2) at (0.5,0) {$Q_2$};
 | |
| 195 |       \node[state]                    (q3) at (1.5,0) {$Q_3$};
 | |
| 271 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 196 |       \path[->] (q0) edge node[above] {$0$} (q1)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 197 |                 (q0) edge node[right] {$1$} (q2)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 198 |                 (q1) edge node[above] {$0$} (q4)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 199 |                 (q1) edge node[right] {$1$} (q2)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 200 |                 (q2) edge node[above] {$0$} (q3)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 201 |                 (q2) edge [loop below] node {$1$} ()
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 202 |                 (q3) edge node[left] {$0$} (q4)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 203 |                 (q3) edge [bend left=95, looseness = 2.2] node [left=2mm] {$1$} (q0)
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 204 |                 (q4) edge [loop right] node {$0, 1$} ();
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 205 |     \end{tikzpicture}
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 206 |   \end{center}
 | 
| 
b9b54574ee41
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
267diff
changeset | 207 | |
| 892 | 208 |   \solution{Q0 and Q2 can be merged; and Q1 and Q3 as well}
 | 
| 209 | ||
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 210 | \item Given the following finite deterministic automaton over the alphabet $\{a, b\}$:
 | 
| 264 
4deef8ac5d72
uodated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
258diff
changeset | 211 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 212 |   \begin{center}
 | 
| 292 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 213 |     \begin{tikzpicture}[scale=2,>=stealth',very thick,auto,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 214 |                         every state/.style={minimum size=0pt,
 | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 215 | inner sep=2pt,draw=blue!50,very thick, | 
| 
7ed2a25dd115
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
271diff
changeset | 216 | fill=blue!20}] | 
| 517 | 217 |       \node[state, initial, accepting]        (q0) at ( 0,1) {$Q_0$};
 | 
| 218 |       \node[state, accepting]                    (q1) at ( 1,1) {$Q_1$};
 | |
| 219 |       \node[state] (q2) at ( 2,1) {$Q_2$};
 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 220 |       \path[->] (q0) edge[bend left] node[above] {$a$} (q1)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 221 |                 (q1) edge[bend left] node[above] {$b$} (q0)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 222 |                 (q2) edge[bend left=50] node[below] {$b$} (q0)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 223 |                 (q1) edge node[above] {$a$} (q2)
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 224 |                 (q2) edge [loop right] node {$a$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 225 |                 (q0) edge [loop below] node {$b$} ()
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 226 | ; | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 227 |     \end{tikzpicture}
 | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 228 |   \end{center}
 | 
| 31 | 229 | |
| 267 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 230 | Give a regular expression that can recognise the same language as | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 231 | this automaton. (Hint: If you use Brzozwski's method, you can assume | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 232 | Arden's lemma which states that an equation of the form $q = q\cdot r + s$ | 
| 
a1544b804d1e
updated homeworks
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
264diff
changeset | 233 | has the unique solution $q = s \cdot r^*$.) | 
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 234 | |
| 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 235 | \item If a non-deterministic finite automaton (NFA) has | 
| 770 | 236 | $n$ states. How many states does a deterministic | 
| 237 | automaton (DFA) that can recognise the same language | |
| 238 | as the NFA maximal need? | |
| 294 
c29853b672fb
updated hws
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
292diff
changeset | 239 | |
| 936 | 240 |   \solution{$2^n$ in the worst-case and for some regexes the worst case
 | 
| 892 | 241 | cannot be avoided. | 
| 242 | ||
| 243 |     Other comments: $r^{\{n\}}$ can only be represented as $n$
 | |
| 244 | copies of the automaton for $r$, which can explode the automaton for bounded | |
| 245 | regular expressions. Similarly, we have no idea how backreferences can be | |
| 246 | represented as automaton. | |
| 247 | } | |
| 248 | ||
| 936 | 249 | \item Rust implements a non-backtracking regular expression matcher | 
| 250 | based on the classic idea of DFAs. Still, some regular expressions | |
| 251 | take a surprising amount of time for matching problems. Explain the | |
| 252 | problem? | |
| 253 | ||
| 254 |   \solution{The problem has to do with bounded regular expressions,
 | |
| 255 |     such as $r^{\{n\}}$. They are represented as $n$-copies of some
 | |
| 256 | automaton for $r$. If $n$ is large, then this can result in a | |
| 257 | large memory-footprint and slow runtime.} | |
| 258 | ||
| 770 | 259 | \item Prove that for all regular expressions $r$ we have | 
| 260 | ||
| 261 | \begin{center} 
 | |
| 262 |   $\textit{nullable}(r) \quad \text{if and only if} 
 | |
| 263 | \quad [] \in L(r)$ | |
| 264 | \end{center}
 | |
| 265 | ||
| 266 | Write down clearly in each case what you need to prove | |
| 267 | and what are the assumptions. | |
| 268 | ||
| 269 | ||
| 444 
3056a4c071b0
updated
 Christian Urban <christian dot urban at kcl dot ac dot uk> parents: 
401diff
changeset | 270 | \item \POSTSCRIPT | 
| 23 | 271 | \end{enumerate}
 | 
| 272 | ||
| 273 | \end{document}
 | |
| 274 | ||
| 275 | %%% Local Variables: | |
| 276 | %%% mode: latex | |
| 277 | %%% TeX-master: t | |
| 278 | %%% End: |