Skip to content
This repository was archived by the owner on Apr 21, 2018. It is now read-only.

Commit 5172f69

Browse files
committed
Are we done here
1 parent 756e40b commit 5172f69

2 files changed

Lines changed: 333 additions & 0 deletions

File tree

wise1617/img/team_chat.png

43.1 KB
Loading

wise1617/slides-10.tex

Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
%%
2+
%% kit-prog-tutorial
3+
%%
4+
%% Slides for my Java programming tutorial at KIT using LaTeX beamer.
5+
%%
6+
%% Copyright (c) 2015-2016 YouniS Bensalah <[email protected]>
7+
%%
8+
%% This work is released to the public domain.
9+
%% For the full copyright and license information, please view the LICENSE file.
10+
%%
11+
12+
\documentclass[18pt]{beamer}
13+
14+
\usepackage{templates/beamerthemekit}
15+
16+
\usepackage[utf8]{inputenc}
17+
\usepackage{hyperref}
18+
\usepackage{listings}
19+
\usepackage{xcolor}
20+
\usepackage{colortbl}
21+
\usepackage{array}
22+
\usepackage{amsmath}
23+
\usepackage{amssymb}
24+
\usepackage{mathrsfs}
25+
\usepackage{eurosym}
26+
27+
\titleimage{road}
28+
29+
\definecolor{lime}{HTML}{8FFF53}
30+
31+
\newcommand{\tagline}{Recursion \& Java API}
32+
33+
\newcommand{\quotes}[1]{``#1''}
34+
35+
\title[Programmieren\hspace{2.5pt}--\hspace{2.5pt}\tagline]{\tagline}
36+
\subtitle{Programmieren~\textbar~Tutorium 32}
37+
38+
\author{YouniS Bensalah}
39+
\date{23. Januar 2017}
40+
41+
\institute{Chair for Software Design and Quality}
42+
43+
\usepackage[citestyle=authoryear,bibstyle=numeric,hyperref,backend=biber]{biblatex}
44+
\addbibresource{templates/example.bib}
45+
\bibhang1em
46+
47+
\begin{document}
48+
49+
% remove annoying figure prefix in caption
50+
\setbeamertemplate{caption}{\raggedright\insertcaption\par}
51+
52+
\selectlanguage{english}
53+
54+
\begin{frame}
55+
\titlepage
56+
\end{frame}
57+
58+
% \begin{frame}{Heute}
59+
% \tableofcontents
60+
% \end{frame}
61+
62+
\begin{frame}{Divide and Conquer}
63+
\begin{itemize}
64+
\item \quotes{Teile und herrsche}
65+
\item Wichtiger Ansatz in der Algorithmik
66+
\vspace{.2in}
67+
\begin{enumerate}
68+
\item Teile Problem so lange in kleinere Teilprobleme, bis diese einfach lösbar sind
69+
\item Löse die einzelnen Teilprobleme
70+
\item Füge Teillösungen zu Lösung des Gesamtproblems zusammen
71+
\end{enumerate}
72+
\end{itemize}
73+
\end{frame}
74+
75+
\begin{frame}{Rekursion}
76+
\begin{itemize}
77+
\item \textbf{Prinzip der Rekursion}
78+
\begin{itemize}
79+
\item Funktion kann sich selbst aufrufen
80+
\item Führe gleiches Berechnungsmuster immer wieder mit kleineren Eingabedaten aus, bis Problem trivial ist
81+
\end{itemize}
82+
\pause
83+
\vspace{.2in}
84+
\item Rekursion ist Form von \textit{Divide and Conquer}
85+
\end{itemize}
86+
\end{frame}
87+
88+
\begin{frame}{Rekursion}
89+
Siehe \quotes{Rekursion}.
90+
\end{frame}
91+
92+
\begin{frame}{Rekursion: Fakultät}
93+
\begin{exampleblock}{}
94+
\begin{itemize}
95+
\item Berechnung der Fakultät einer (nicht negativen, ganzen) Zahl:\\
96+
\vspace{.2in}
97+
$
98+
n! = \prod\limits_{i=1}^{n} =
99+
\begin{cases}
100+
n \cdot (n-1)! & \text{if\qquad} x > 0 \\
101+
0 & \text{if\qquad} x = 0
102+
\end{cases}
103+
$
104+
\end{itemize}
105+
\end{exampleblock}
106+
\end{frame}
107+
108+
\begin{frame}[fragile]{Rekursion: Fakultät}
109+
\begin{exampleblock}{}
110+
\begin{lstlisting}[language=Java,basicstyle=\scriptsize]
111+
int factorial(int n) {
112+
if (n > 0) {
113+
return n * factorial(n - 1);
114+
} else {
115+
return 1;
116+
}
117+
}
118+
\end{lstlisting}
119+
120+
\end{exampleblock}
121+
122+
\end{frame}
123+
124+
\begin{frame}[fragile]{Rekursion: Ackermannfunktion}
125+
\begin{exampleblock}{}
126+
$
127+
\mathscr{A}(m, n) :=
128+
\begin{cases}
129+
n+1 & \text{if\quad} m = 0\\
130+
\mathscr{A}(m-1, 1) & \text{if\quad} m > 0 \text{\,and\,} n = 0\\
131+
\mathscr{A}(m-1, \mathscr{A}(m, n-1)) & \text{if\quad} m > 0 \text{\,and\,} n > 0
132+
\end{cases}
133+
$
134+
\end{exampleblock}
135+
\pause
136+
\begin{itemize}
137+
\item $\mathscr{A}(1, 1) = 3$
138+
\item $\mathscr{A}(1, 2) = 4$
139+
\item $\mathscr{A}(2, 3) = 9$
140+
\item $\mathscr{A}(2, 4) = 11$
141+
\end{itemize}
142+
\end{frame}
143+
144+
\begin{frame}{Rekursion: Ackermannfunktion}
145+
\begin{itemize}
146+
\item $\mathscr{A}(4, 2)$ ist eine Zahl mit \textbf{19729} Dezimalstellen
147+
\end{itemize}
148+
\end{frame}
149+
150+
151+
\subsubsection{Iteration vs. Rekursion}
152+
153+
\begin{frame}[fragile]{Iteration vs. Rekursion}
154+
Alternativ zur rekursiven Variante von \texttt{factorial()}\dots
155+
\begin{exampleblock}{}
156+
\begin{lstlisting}[language=Java,basicstyle=\scriptsize]
157+
int factorial(int n) {
158+
int result = 1;
159+
for (int i = 2; i <= n; ++i) {
160+
result *= i;
161+
}
162+
return result;
163+
}
164+
\end{lstlisting}
165+
166+
\end{exampleblock}
167+
\end{frame}
168+
169+
\begin{frame}{Zusammenfassung}
170+
\begin{itemize}
171+
\item \textbf{Rekursion} kann speicheraufwendig werden, da jedes Mal eine neue Instanz der Methode aufgerufen wird
172+
\begin{itemize}
173+
\item Stack kann überlaufen!
174+
\end{itemize}
175+
\item Nicht immer klar, ob die Berechnung terminiert
176+
\item Rekursion ist bei manchen Problemen eine elegante Lösung
177+
\item Es gibt nicht immer eine \quotes{iterative Lösung} (siehe \textit{Ackermannfunktion})
178+
\end{itemize}
179+
\end{frame}
180+
181+
\begin{frame}{Java API}
182+
\begin{itemize}
183+
\item Die \textbf{Java API} ist eine Sammlung von Klassen/Paketen für häufig benötigte Funktionalitäten
184+
185+
\begin{itemize}
186+
\item \texttt{java.lang}: Basisfunktionalität
187+
\item \texttt{java.util}: Java Collections Framework
188+
\item \texttt{java.io}: Ein- und Ausgabe
189+
\end{itemize}
190+
191+
\vspace{.2in}
192+
193+
\item Das \textbf{Java Collections Framework} enthält u.a.
194+
\begin{itemize}
195+
\item \texttt{Map<K,V>}, \texttt{Set<E>}\dots
196+
\item \texttt{Queue<E>}, \texttt{Deque<E>}, \texttt{Stack<E>}\dots
197+
\item \texttt{List<E>}, \texttt{LinkedList<E>}\dots
198+
\end{itemize}
199+
200+
\vspace{.2in}
201+
202+
\item \quotes{Das Rad muss nicht neu erfunden werden.}
203+
204+
\end{itemize}
205+
\end{frame}
206+
207+
\begin{frame}{Sets und Maps}
208+
\begin{block}{}
209+
\begin{itemize}
210+
\item Ein \textbf{Set} stellt eine Menge (im mathematischen Sinne) dar
211+
\item Sammlung von Objekten, \textit{ohne Duplikate}
212+
\end{itemize}
213+
\end{block}
214+
215+
\begin{block}{}
216+
\begin{itemize}
217+
\item Eine \textbf{Map} stellt eine Abbildung von Schlüsseln (keys) auf Werte (values) dar
218+
\item Beispiel: \texttt{String} als key, \texttt{Student} als value
219+
\end{itemize}
220+
221+
\end{block}
222+
\end{frame}
223+
224+
\begin{frame}[fragile]{Sets}
225+
\begin{lstlisting}[language=Java]
226+
Set<String> names = new HashSet<>();
227+
228+
names.add("Alice");
229+
names.add("Eve");
230+
names.add("Bob");
231+
names.add("Eve");
232+
233+
it = names.iterator();
234+
String name;
235+
while (it.hasNext()) {
236+
name = it.next();
237+
System.out.println(name);
238+
}
239+
\end{lstlisting}
240+
241+
\end{frame}
242+
243+
\begin{frame}[fragile]{Sets}
244+
\begin{exampleblock}{}
245+
\begin{lstlisting}[language=Java]
246+
Bob
247+
Eve
248+
Alice
249+
\end{lstlisting}
250+
\end{exampleblock}
251+
252+
\end{frame}
253+
254+
255+
\begin{frame}[fragile]{Maps}
256+
\begin{lstlisting}[language=Java]
257+
Map<String, Integer> mountains = new HashMap<>();
258+
259+
mountains.put("Everest", 8848);
260+
mountains.put("K2", 8611);
261+
mountains.put("Kangchenjunga", 8586);
262+
mountains.put("Lhotse", 8516);
263+
264+
System.out.println(mountains.get("Everest"));
265+
\end{lstlisting}
266+
\end{frame}
267+
268+
\begin{frame}[fragile]{Maps}
269+
270+
\begin{exampleblock}{}
271+
\begin{lstlisting}[language=Java]
272+
8848
273+
\end{lstlisting}
274+
275+
\end{exampleblock}
276+
\end{frame}
277+
278+
279+
\begin{frame}[fragile]{Stack}
280+
\begin{lstlisting}[language=Java]
281+
Stack<String> books = new Stack<>();
282+
283+
books.push("Modern Operating Systems");
284+
books.push("The Magic Garden Explained");
285+
286+
System.out.println(books.peek());
287+
books.pop();
288+
289+
books.push("The Art of Game Design");
290+
291+
String next;
292+
while (!books.empty()) {
293+
next = books.pop();
294+
System.out.println(next);
295+
}
296+
\end{lstlisting}
297+
298+
\end{frame}
299+
300+
\begin{frame}[fragile]{Stack}
301+
\begin{exampleblock}{}
302+
\begin{lstlisting}[language=Java]
303+
The Magic Garden Explained
304+
The Art of Game Design
305+
Modern Operating Systems
306+
\end{lstlisting}
307+
\end{exampleblock}
308+
309+
\end{frame}
310+
311+
\begin{frame}{Read the fine manual}
312+
\Large{\url{https://docs.oracle.com/javase/8/docs/api}}
313+
\end{frame}
314+
315+
\appendix
316+
\beginbackup
317+
318+
\begin{frame}{Fragen?}
319+
\begin{figure}
320+
\includegraphics[scale=.6]{img/additionalquestions.jpg}
321+
\end{figure}
322+
\end{frame}
323+
324+
\begin{frame}{Bis nächste Woche!}
325+
\begin{figure}
326+
\includegraphics[scale=.4]{img/team_chat.png}
327+
\caption{\footnotesize{xkcd.com}}
328+
\end{figure}
329+
\end{frame}
330+
331+
\backupend
332+
333+
\end{document}

0 commit comments

Comments
 (0)