tex/theory1_ex5.tex
author Eugen Sawin <sawine@me73.com>
Wed, 03 Aug 2011 21:39:33 +0200
changeset 17 3bc8335b09b0
permissions -rw-r--r--
Keine Lust.
sawine@6
     1
\documentclass[a4paper, 10pt, pagesize, smallheadings]{article}  
sawine@6
     2
\usepackage{graphicx}
sawine@6
     3
%\usepackage[latin1]{inputenc}
sawine@6
     4
\usepackage{amsmath, amsthm, amssymb}
sawine@6
     5
\usepackage{typearea}
sawine@6
     6
\usepackage{algorithm}
sawine@6
     7
\usepackage{algorithmic}
sawine@6
     8
\usepackage{fullpage}
sawine@6
     9
\usepackage[all]{xy}
sawine@6
    10
\title{Theory I, Sheet 5 Solution}
sawine@6
    11
\author{Eugen Sawin}
sawine@6
    12
\renewcommand{\familydefault}{\sfdefault}
sawine@6
    13
\include{pythonlisting}
sawine@6
    14
sawine@6
    15
\pagestyle{empty}
sawine@6
    16
\begin{document}
sawine@6
    17
\maketitle
sawine@6
    18
sawine@6
    19
\section*{Exercise 5.1}
sawine@6
    20
The chained-hash function in Python:
sawine@6
    21
\begin{python}
sawine@6
    22
def chained_hash(k, table, size):
sawine@6
    23
    code = k % size
sawine@6
    24
    if code in table:
sawine@6
    25
        table[code].append(k)
sawine@6
    26
    else:
sawine@6
    27
        table[code] = [k]
sawine@6
    28
    return table
sawine@6
    29
\end{python}
sawine@6
    30
For the exercise we will set $size = 15$.\\\\
sawine@6
    31
Resulting hash table:\\\\
sawine@6
    32
\begin{tabular}{r l}
sawine@6
    33
\textbf{index} & \textbf{entries}\\
sawine@6
    34
0 & 15\\
sawine@6
    35
1 & 16\\
sawine@6
    36
2 & \\
sawine@6
    37
3 & \\
sawine@6
    38
4 & 19, 49\\
sawine@6
    39
5 & 5, 65\\
sawine@6
    40
6 & 21\\
sawine@6
    41
7 & \\
sawine@6
    42
8 & 8, 38\\
sawine@6
    43
9 & \\
sawine@6
    44
10 & \\
sawine@6
    45
11 & \\
sawine@6
    46
12 & 12, 27, 42\\
sawine@6
    47
13 & \\
sawine@6
    48
14 & \\
sawine@6
    49
\end{tabular}
sawine@6
    50
\newpage
sawine@6
    51
sawine@6
    52
\section*{Exercise 5.2}
sawine@6
    53
General hash function in Python:
sawine@6
    54
\begin{python}
sawine@6
    55
def h(k, size):
sawine@6
    56
    return k % size
sawine@6
    57
sawine@6
    58
def hash(k, size, table, probe):
sawine@6
    59
    j = 0
sawine@6
    60
    code = h(k, size) % size
sawine@6
    61
    while code in table:
sawine@6
    62
        j += 1
sawine@6
    63
        code = (h(k, size) - probe(j, k, size)) % size
sawine@6
    64
    table[code] = k
sawine@6
    65
    return table
sawine@6
    66
\end{python}
sawine@6
    67
For the exercise we will set $size = 15$.\\
sawine@6
    68
The $probe$ function will be substituted by the explicit probing functions in the following exercises.\\
sawine@6
    69
For the following exercises, empty table entries will be omitted.\\
sawine@6
    70
sawine@6
    71
\subsection*{5.2.1}
sawine@6
    72
Linear probing:
sawine@6
    73
\begin{python}
sawine@6
    74
def linear_probing(j, k, size):
sawine@6
    75
    return j
sawine@6
    76
\end{python}
sawine@6
    77
\begin{tabular}{r l}
sawine@6
    78
\textbf{index} & \textbf{entry}\\
sawine@6
    79
0 & 15\\
sawine@6
    80
1 & 16\\
sawine@6
    81
2 & 65\\
sawine@6
    82
3 & 49\\
sawine@6
    83
4 & 19\\
sawine@6
    84
5 & 5\\
sawine@6
    85
6 & 21\\
sawine@6
    86
7 & 38\\
sawine@6
    87
8 & 8\\
sawine@6
    88
10 & 42\\
sawine@6
    89
11 & 27\\
sawine@6
    90
12 & 12\\
sawine@6
    91
\end{tabular}
sawine@6
    92
\newpage
sawine@6
    93
sawine@6
    94
\subsection*{5.2.2}
sawine@6
    95
Quadratic probing:
sawine@6
    96
\begin{python}
sawine@6
    97
def quadratic_probing(j, k, size):
sawine@6
    98
    return (-1)**j * math.ceil(j/2.0)**2
sawine@6
    99
\end{python}
sawine@6
   100
\begin{tabular}{r l}
sawine@6
   101
\textbf{index} & \textbf{entry}\\
sawine@6
   102
0 & 15\\
sawine@6
   103
1 & 16\\
sawine@6
   104
3 & 49\\
sawine@6
   105
4 & 19\\
sawine@6
   106
5 & 5\\
sawine@6
   107
6 & 21\\
sawine@6
   108
8 & 8\\
sawine@6
   109
9 & 38\\
sawine@6
   110
11 & 42\\
sawine@6
   111
12 & 12\\
sawine@6
   112
13 & 27\\
sawine@6
   113
14 & 65\\
sawine@6
   114
\end{tabular}
sawine@6
   115
sawine@6
   116
\subsection*{5.2.3}
sawine@6
   117
Double hashing:
sawine@6
   118
\begin{python}
sawine@6
   119
def h2(k, size):
sawine@6
   120
    return 1 + (k % (size - 2)) 
sawine@6
   121
sawine@6
   122
def double_hash(j, k, size):
sawine@6
   123
    return j * h2(k, size)
sawine@6
   124
\end{python}
sawine@6
   125
\begin{tabular}{r l}
sawine@6
   126
\textbf{index} & \textbf{entry}\\
sawine@6
   127
0 & 15\\
sawine@6
   128
1 & 16\\
sawine@6
   129
2 & 65\\
sawine@6
   130
3 & 21\\
sawine@6
   131
4 & 19\\
sawine@6
   132
5 & 5\\
sawine@6
   133
6 & 27\\
sawine@6
   134
8 & 8\\
sawine@6
   135
9 & 49\\
sawine@6
   136
10 & 38\\
sawine@6
   137
11 & 42\\
sawine@6
   138
12 & 12\\
sawine@6
   139
\end{tabular}
sawine@6
   140
\end{document}