diff --git a/20250325/ad-20250325.pdf b/20250325/ad-20250325.pdf
index d37739f924159f162e2d9cee95ad77efea235f25..b81aeffb51223390573d8513179212546e0613c2 100644
Binary files a/20250325/ad-20250325.pdf and b/20250325/ad-20250325.pdf differ
diff --git a/20250325/ad-20250325.tex b/20250325/ad-20250325.tex
index baa83f7f5f7db22c2e8ea95077b719f061bb35a2..8b7a9e4c3f1cd40198ae164358a324e64eb10475 100644
--- a/20250325/ad-20250325.tex
+++ b/20250325/ad-20250325.tex
@@ -761,6 +761,8 @@
 
 \end{frame}
 
+\iffalse
+
 \begin{frame}
 
   \showsection
@@ -790,8 +792,6 @@
 
 \end{frame}
 
-\iffalse
-
 \nosectionnonumber{\inserttitle}
 
 \begin{frame}
diff --git a/20250401/Zeichen_123.pdf b/20250401/Zeichen_123.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116
--- /dev/null
+++ b/20250401/Zeichen_123.pdf
@@ -0,0 +1 @@
+../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20250401/ad-20250401.pdf b/20250401/ad-20250401.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..abfab80592754c022e0842e7b3eea0691be51dbe
Binary files /dev/null and b/20250401/ad-20250401.pdf differ
diff --git a/20250401/ad-20250401.tex b/20250401/ad-20250401.tex
new file mode 100644
index 0000000000000000000000000000000000000000..9de9087a015cd443bb90eae54ddd682d2a874b32
--- /dev/null
+++ b/20250401/ad-20250401.tex
@@ -0,0 +1,1128 @@
+% ad-20250401.pdf - Lecture Slides on Algorithms and Data Structures in C/C++
+% Copyright (C) 2018-2024, 2025  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: Einführung in die Kryptographie
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{tikz}
+%\usepackage{rotating}
+
+\newcommand{\underconstruction}{%
+  \begin{picture}(0,0)
+    \color{black}
+    \put(6,-2.2){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
+    \put(6,-2.5){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
+  \end{picture}}
+
+\title{Algorithmen und Datenstrukturen in C/C++}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{1.\ April 2025}
+
+\begin{document}
+
+\maketitleframe
+
+\sectionnonumber{Zu dieser Lehrveranstaltung}
+
+\begin{frame}
+
+  \showsectionnonumber
+
+  \begin{itemize}
+    \item
+      Bitte nach Möglichkeit \textbf{eigenen Computer} (Notebook) mitbringen.
+    \item
+      \textbf{Lehrmaterialien:} \url{https://gitlab.cvh-server.de/pgerwinski/ad}\\
+      Links auf die Datei klicken, nicht mittig auf den Kommentar.
+%    \item
+%      \textbf{Praktikum:} 3 Termine (nach Vereinbarung),\\
+%      eine Gruppe Dienstag, 10:30--14:15 Uhr,\\
+%      weitere Gruppen Mittwoch, 14:15--18:00 Uhr
+    \item
+%      \textbf{Prüfungsform: Klausur}
+      \textbf{Prüfungsform: Hausarbeit mit Kolloquium}
+  \end{itemize}
+  \bigskip
+  \textbf{Online-Teilnahme:}
+  \begin{itemize}
+    \item
+      \textbf{Mumble}: Seminarraum 2\\
+      Fragen: Mikrofon einschalten oder über den Chat\\
+      Umfragen: über den Chat
+    \item
+      \textbf{VNC}: Kanal 6, Passwort: \lstinline[style=cmd]{testcvh}\\
+      Eigenen Bildschirm freigeben: per VNC-Server oder Web-Interface\\
+      Kamerabild übertragen: Link zu Web-Interface auf Anfrage
+    \item
+      Allgemeine Informationen:
+      \url{https://www.cvh-server.de/online-werkzeuge/}
+    \item
+      Notfall-Schnellzugang: \url{https://www.cvh-server.de/virtuelle-raeume/}\\
+      Seminarraum 2, VNC-Passwort: \lstinline[style=cmd]{testcvh}
+%    \item
+%      Bei Problemen: bitte notieren:\\
+%      Art des Problems, genaue Uhrzeit, JavaScript-Fehlermeldungen (F12)
+  \end{itemize}
+
+\end{frame}
+
+\nosectionnonumber{Hardwarenahe Programmierung}
+
+%\begin{frame}
+%
+%  \shownosectionnonumber
+%
+%  \begin{itemize}
+%    \item[\textbf{1}] \textbf{Einführung}
+%      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp}}}
+%    \item[\textbf{2}] \textbf{Einführung in C}
+%    \item[\textbf{3}] \textbf{Bibliotheken}
+%    \item[\textbf{4}] \textbf{Hardwarenahe Programmierung}
+%    \item[\textbf{5}] \textbf{\color{black}Algorithmen}
+%      \begin{itemize}
+%        \color{medgreen}
+%        \item[5.1] Differentialgleichungen
+%        \item[5.2] Rekursion
+%        \item[5.3] Aufwandsabschätzungen
+%      \end{itemize}
+%    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+%    \item[\textbf{7}] \textbf{\color{black}Datenstrukturen}
+%      \begin{itemize}
+%        \color{medgreen}
+%        \item[7.1] Stack und FIFO
+%        \item[7.2] Verkettete Listen
+%        \item[7.3] Bäume
+%      \end{itemize}
+%  \end{itemize}
+%  \vspace*{-1cm}
+%
+%\end{frame}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \color{gray}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp}}}
+    \item[\textbf{2}] \textbf{Einführung in C}
+    \item[\textbf{3}] \textbf{Bibliotheken}
+    \item[\textbf{4}] \textbf{Hardwarenahe Programmierung}
+    \item[\textbf{5}] \textbf{\color{black}Algorithmen}
+      \begin{itemize}
+        \color{medgreen}
+        \item[5.1] Differentialgleichungen
+        \item[5.2] Rekursion
+        \item[5.3] Aufwandsabschätzungen
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Objektorientierte Programmierung}
+    \item[\textbf{7}] \textbf{\color{black}Datenstrukturen}
+      \begin{itemize}
+        \color{medgreen}
+        \item[7.1] Stack und FIFO
+        \item[7.2] Verkettete Listen
+        \item[7.3] Bäume
+      \end{itemize}
+  \end{itemize}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\nosectionnonumber{Algorithmen}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  {\color{medgreen}\textbf{Differentialgleichungen}}
+  \begin{itemize}
+    \item Pendel
+    \item Planetenbahnen
+  \end{itemize}
+
+  {\color{medgreen}\textbf{Rekursion}}
+  \begin{itemize}
+    \item Türme von Hanoi
+  \end{itemize}
+
+  \smallskip
+
+  \textarrow\ \emph{Wie rechnet man das überhaupt aus?}
+
+  \bigskip
+
+  {\color{medgreen}\textbf{Aufwandsabschätzungen}}
+  \begin{itemize}
+    \item Selectionsort
+    \item Bubblesort
+    \item Quicksort
+  \end{itemize}
+
+  \smallskip
+
+  \textarrow\ \emph{Wie rechnet man das möglichst effizient aus?}
+  \begin{itemize}
+    \item[\textbf{?}] möglichst schnell
+    \item[\textbf{?}] mit möglichst wenig Speicherplatzverbrauch
+    \item[\textbf{?}] unter Berücksichtigung gegebener Randbedingungen
+  \end{itemize}
+
+\end{frame}
+
+\nosectionnonumber{Datenstrukturen}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \addvspace{-3pt}
+
+  \begin{visibleenv}<1->
+    \textbf{Structs und Objekte}
+    \begin{itemize}
+      \item zusammengehörige Daten gemeinsam speichern
+    \end{itemize}
+  \end{visibleenv}
+
+  {\color{medgreen}\textbf{Stack und FIFO}}\only<1->{\textbf{ -- Arrays}}
+  \begin{itemize}
+    \item effizientes Anfügen und Entfernen vorne und hinten
+    \item effizienter direkter Zugriff auf Elemente in der Mitte
+    \item ineffizientes Einfügen und Entfernen in der Mitte
+  \end{itemize}
+
+  {\color{medgreen}\textbf{Verkettete Listen}}\only<1->{\textbf{ -- Structs mit Pointern}}
+  \begin{itemize}
+    \item effizientes Einfügen und Entfernen in der Mitte
+    \item ineffizienter direkter Zugriff auf Elemente in der Mitte
+  \end{itemize}
+
+  {\color{medgreen}\textbf{Bäume}}\only<1->{\textbf{ -- Structs mit Pointern}}
+  \begin{itemize}
+    \item Kompromiß
+  \end{itemize}
+
+  \smallskip
+
+  \textarrow\ \emph{Wie speichert man das möglichst effizient?}
+  \begin{itemize}
+    \item[\textbf{?}] möglichst schnell
+    \item[\textbf{?}] mit möglichst wenig Speicherplatzverbrauch
+    \item[\textbf{?}] unter Berücksichtigung gegebener Randbedingungen
+  \end{itemize}
+
+\end{frame}
+
+\nosectionnonumber{Aufwandsabschätzungen \protect\color{gray}-- Komplexitätsanalyse}
+
+\begin{frame}[fragile]
+
+%  \newcommand{\w}{\hspace*{0.75pt}}
+
+  \shownosectionnonumber
+
+  \begin{picture}(0,0)
+    \put(7.6,-0.5){%
+      \begin{minipage}[t]{5.3cm}
+%        \vspace*{-1.0cm}\includegraphics{landau-symbols.pdf}
+        \alt<3->{\vspace*{-0.93cm}\includegraphics{landau-symbols-3.pdf}}%
+                {\vspace*{-1.00cm}\includegraphics{landau-symbols.pdf}}
+        \small%\vspace*{-1.0cm}
+        \begin{description}\itemsep0pt\leftskip-0.5cm
+          \item[$n$:] Eingabedaten
+          \item[$g(n)$:] Rechenzeit
+        \end{description}
+      \end{minipage}}
+  \end{picture}
+
+  \vspace*{-\bigskipamount}
+
+  Wann ist ein Programm "`schnell"'?
+
+  \medskip
+
+  \begin{onlyenv}<1>
+      Türme von Hanoi: $\mathcal{O}(2^n)$
+      \par\medskip
+      Für jede zusätzliche Scheibe\\verdoppelt sich die Rechenzeit!
+      \begin{itemize}
+        \arrowitem
+          $\frac{30,672\,\text{s}\,\cdot\,2^{32}}{3600\,\cdot\,24\,\cdot\,365,25} \approx 4174$
+          Jahre\\[\smallskipamount]
+          für 64 Scheiben
+      \end{itemize}
+
+      \bigskip
+  \end{onlyenv}
+
+  \begin{onlyenv}<1->
+    Faustregel:\\Schachtelung der Schleifen zählen\\
+    $k$ Schleifen ineinander \textarrow\ $\mathcal{O}(n^k)$
+
+    \bigskip
+  \end{onlyenv}
+
+  \begin{onlyenv}<2>
+    \textbf{Beispiel: Sortieralgorithmen}
+
+    \smallskip
+
+    Anzahl der Vergleiche bei $n$ Strings
+    \begin{itemize}
+      \item
+        Maximum suchen mit Schummeln: $\mathcal{O}(1)$
+%      \pause
+      \item
+        Maximum suchen: $\mathcal{O}(n)$
+%      \pause
+      \item
+        Selection-Sort: $\mathcal{O}(n^2)$
+%      \pause
+      \item
+        Bubble-Sort: $\mathcal{O}(n)$ bis $\mathcal{O}(n^2)$
+%      \pause
+      \item
+        Quicksort: $\mathcal{O}(n\log n)$ bis $\mathcal{O}(n^2)$
+    \end{itemize}
+
+  \end{onlyenv}
+
+%   \begin{onlyenv}<3>
+%     \textbf{Wie schnell ist RSA-Verschlüsselung?}
+% 
+%     \smallskip
+% 
+%     \begin{math}
+%       c = m^e\,\%\,N
+%     \end{math}
+%     \quad
+%     ("`$\%$"' = "`modulo"')
+% 
+%     \medskip
+% 
+%     \begin{lstlisting}[gobble=6,xleftmargin=2em]
+%       int c = 1;
+%       for (int i = 0; i < e; i++)
+%         c = (c * m) % N;
+%     \end{lstlisting}
+% 
+%     \smallskip
+% 
+%     \begin{itemize}
+%       \item
+%         $\mathcal{O}(e)$ Iterationen
+% %      \item
+% %        wenn $n$ die Anzahl der Binärziffern (Bits) von $e$ ist:
+% %        $\mathcal{O}(2^n)$ Iterationen
+%       \item
+%         mit Trick:
+%         $\mathcal{O}(\log e)$ Iterationen ($\log e$ = Anzahl der Ziffern von $e$)
+%     \end{itemize}
+% 
+%     \smallskip
+% 
+%     Jede Iteration enthält eine Multiplikation und eine Division.\\
+%     Aufwand dafür: $\mathcal{O}(\log e)$\\
+%     \textarrow\ Gesamtaufwand: $\mathcal{O}\bigl((\log e)^2\bigr)$
+% 
+%   \end{onlyenv}
+
+  \begin{onlyenv}<3->
+
+    \textbf{Wie schnell ist RSA?}\\
+
+    \smallskip
+
+    ($n$ = typische beteiligte Zahl, z.\,B. $e,p,q$)
+
+    \begin{itemize}
+      \item
+        Ver- und Entschlüsselung (Exponentiation):\\
+        \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\!\left((\log n)^2\right)$\hss}
+        \only<3->{{\color{magenta}$\mathcal{O}(n^2)$}}
+      \item
+        Schlüsselerzeugung (Berechnung von $d$):\\
+        \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\!\left((\log n)^2\right)$\hss}
+        \only<3->{{\color{magenta}$\mathcal{O}(n^2)$}}
+      \item
+        Verschlüsselung brechen (Primfaktorzerlegung):\\
+        \strut\hbox to 3.5cm{\color{red}$\mathcal{O}\bigl(2^{\sqrt{\log n\,\cdot\,\log\log n}}\bigr)$\hss}
+        \only<3->{{\color{magenta}$\mathcal{O}\bigl(2^{\sqrt{n\log n}}\bigr)$}}
+    \end{itemize}
+
+    \smallskip
+%    \vspace{0cm plus 1filll}
+
+    \textbf{Die Sicherheit von RSA beruht darauf,
+    daß das Brechen der Verschlüsselung aufwendiger ist als
+    \boldmath$\mathcal{O}\bigl((\log n)^k\bigr)$ (für beliebiges $k$).}
+
+%    \vspace*{0.65cm}
+
+%    \pause[4]
+    \smallskip
+    \hspace*{2.29cm}\textcolor{red}{\textbf{Mit Quantencomputer: \boldmath$\mathcal{O}\bigl((\log n)^3\bigr)$}}
+
+  \end{onlyenv}
+
+\end{frame}
+
+\nosectionnonumber{\inserttitle}
+
+\iffalse
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/ad}}}
+    \item[\textbf{2}] \textbf{\dots}
+  \end{itemize}
+
+  \begin{picture}(0,0)(-2,-0.5)
+    \put(0.5,-1.0){\mbox{\Large$\mathcal{O}(n\log n)$}}
+    \put(0.6,-2.7){\mbox{\large\bf B-Baum}}
+    \put(-1.3,-3.4){\mbox{\small\it verkettete Liste}}
+    \put(1.5,-4.0){\mbox{\large Datenbanken}}
+    \put(-1.0,-1.9){\mbox{\large\tt struct}}
+    \put(3.0,-2.0){\mbox{\large Wegfindung}}
+    \put(4.0,-3.0){\mbox{Verschlüsseln}}
+    \put(5.7,-4.2){\mbox{\it Datenkompression}}
+    \put(6.0,-1.5){\mbox{CORDIC}}
+    \put(8.5,-2.0){\mbox{\small\bf FFT}}
+    \put(7.5,-2.9){\mbox{\small\tt pointer}}
+    \put(3.5,-0.5){\mbox{\it Rasterung}}
+    \put(7.7,-0.7){\mbox{\tt array}}
+    \put(-0.5,-5.0){\mbox{digitale Signatur}}
+    \put(3.5,-5.2){\mbox{\large Hash-Tabelle}}
+    \put(0.0,-6.3){\mbox{\small\bf kryptographische Hash-Funktion}}
+    \put(6.5,-6.0){\mbox{\it Prüfsumme}}
+%    \pause
+%    \put(4.0,-2.7){\begin{rotate}{18}
+%                     \makebox(0,0){\LARGE\color{red}\shortstack{%
+%                       Online-Werkzeuge für Home Office, Lehre\\
+%                       und Kommunikation mit Unterdrückten}}
+%                   \end{rotate}}
+  \end{picture}
+
+\end{frame}
+
+\fi
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \underconstruction
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/ad}}}
+%    \item[\textbf{\color{red}i}] {\color{red}Online-Werkzeuge für Home Office, Lehre\\
+%                                             und Kommunikation mit Unterdrückten}
+    \item[\textbf{2}] \textbf{Arrays und Zeiger für Fortgeschrittene}
+    \item[\textbf{3}] \textbf{Langzahl-Arithmetik}
+    \item[\textbf{4}] \textbf{Kryptographie}
+    \item[\textbf{5}] \textbf{C++}
+    \item[\textbf{6}] \textbf{Datenorganisation}
+    \vspace{-\smallskipamount}
+    \item[\textbf{\dots}]
+  \end{itemize}
+
+\end{frame}
+
+\setcounter{section}{1}
+\section{Arrays und Zeiger für Fortgeschrittene}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{minipage}[t]{6cm}
+    Array:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char a[] = "Test";
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{6cm}
+    Zeiger:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char *p = "Test";
+    \end{lstlisting}
+  \end{minipage}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      In beiden Fällen wird ein Array von ganzen Zahlen\\
+      (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\
+      im Speicher angelegt.
+    \medskip
+    \item
+      Links heißt das Array \lstinline{a};
+      rechts ist es "`anonym"'.
+    \item
+      Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\
+      der auf das (anonyme) Array zeigt.
+    \medskip
+    \item
+      \lstinline{&a} ist dasselbe wie \lstinline{a},
+      nämlich die Adresse des Arrays.
+    \item
+      \lstinline{&p} ist die Adresse des Zeigers.
+    \item
+      \lstinline{p} ist der Wert des Zeigers,\\
+      momentan also die Adresse des (anonymen) Arrays.
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{minipage}[t]{6cm}
+    Array:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char a[] = "Test";
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{6cm}
+    Zeiger:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char *p = "Test";
+    \end{lstlisting}
+  \end{minipage}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      In beiden Fällen wird ein Array von ganzen Zahlen\\
+      (5 \lstinline{char}-Variable mit den Werten 84, 101, 115, 116 und 0)\\
+      im Speicher angelegt.
+    \medskip
+    \item
+      Links heißt das Array \lstinline{a};
+      rechts ist es "`anonym"'.
+    \item
+      Rechts wird zusätzlich ein Zeiger \lstinline{p} im Speicher angelegt,\\
+      der auf das (anonyme) Array zeigt.
+    \medskip
+    \item
+      \lstinline{&a} ist {\color{red}fast} dasselbe wie \lstinline{a},\\
+      nämlich die Adresse des Arrays {\color{red}bzw.\ das Array selbst,\\
+      das zuweisungskompatibel zu einem Zeiger auf Elemente des Arrays ist.\\
+      \lstinline{&} bewirkt hier eine (nicht explizite!) Typumwandlung.}
+    \item
+      \lstinline{&p} ist die Adresse des Zeigers.
+    \item
+      \lstinline{p} ist der Wert des Zeigers,\\
+      momentan also die Adresse des (anonymen) Arrays.
+  \end{itemize}
+
+  \vspace*{-1cm}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{minipage}[t]{7cm}
+    Array:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char *a[] = { "Dies", "ist", "ein", "Test" };
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{5cm}
+    Zeiger:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char **p = a;
+    \end{lstlisting}
+  \end{minipage}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      Array von Zeigern auf \lstinline{char}-Variable
+    \item
+      Zeiger auf das Array = Zeiger auf Zeiger auf \lstinline{char}-Variable
+    \item
+      Schleife durch äußeres Array mit \lstinline{p++} möglich
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{minipage}[t]{7cm}
+    Array:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char a[][5] = { "Dies", "ist", "ein", "Test" };
+    \end{lstlisting}
+  \end{minipage}\hfill
+  \begin{minipage}[t]{5cm}
+    Zeiger:
+    \smallskip
+    \begin{lstlisting}[gobble=6]
+      char *p = a[0];
+    \end{lstlisting}
+  \end{minipage}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      zweidimensionales Array von \lstinline{char}-Variablen
+    \item
+      Zeiger auf Array-Komponente\\
+      = Zeiger auf eindimensionales Array\\
+      = Zeiger auf \lstinline{char}-Variable
+    \item
+      Schleife durch äußeres Array mit Zeiger-Arithmetik nicht möglich
+  \end{itemize}
+
+  \begin{picture}(0,0)
+    \color{red}
+    \thicklines
+    \put(8.6,0.63){\line(1,0){0.85}}
+    \put(9.05,0.4){\makebox(0,0)[t]{$\overbrace{\mbox{nur mit Trick:
+                   \lstinline{p += 5}}}$}}
+  \end{picture}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{lstlisting}
+    typedef char string5[5];
+    string5 a[] = { "Dies", "ist", "ein", "Test" };
+    string5 *p = a;
+  \end{lstlisting}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      Array von Array von \lstinline{char}-Variablen\\
+      = zweidimensionales Array von \lstinline{char}-Variablen
+    \item
+      Zeiger auf zweidimensionales Array
+    \item
+      Schleife durch äußeres Array mit \lstinline{p++} möglich
+    \bigskip
+    \arrowitem
+      Fazit:\\
+      Ein Hoch auf \lstinline{typedef}!
+    \arrowitem
+      Trotzdem: {\color{red}Vorsicht!}\\
+      Ein \lstinline{p++} auf einen Zeiger vom Typ \lstinline{string5 *p}\\
+      ergibt anscheinend undefiniertes Verhalten!
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+
+  \begin{lstlisting}
+    typedef char string5[5];
+    string5 *p = { "Dies", "ist", "ein", "Test" };
+  \end{lstlisting}
+
+  \bigskip
+
+  \begin{itemize}
+    \item
+      anonymes Array von Array von \lstinline{char}-Variablen\\
+      = anonymes zweidimensionales Array von \lstinline{char}-Variablen
+    \item
+      Zeiger auf zweidimensionales Array
+    \item
+      Schleife durch äußeres Array mit \lstinline{p++} möglich
+  \end{itemize}
+
+%  \pause
+
+  \begin{picture}(0,0)(-2,-0.4)
+    \color{red}
+    \thicklines
+    \put(0,0){\line(2,1){4}}
+    \put(0,2){\line(2,-1){4}}
+  \end{picture}
+
+  Das Konstrukt \lstinline|{ "Dies", "ist", "ein", "Test" }|\\
+  steht für ein Array von 4 Zeigern auf \lstinline{char}-Variable.
+
+  \smallskip
+
+  \lstinline{string5 *p} hingegen erwartet einen Zeiger auf ein Array
+  von 5 \lstinline{char}-Variablen.
+
+  \smallskip
+
+  Es bekommt die Adresse von \lstinline{"Dies"} zugewiesen.
+
+  \smallskip
+
+  Durch das Erhöhen von \lstinline{p} (um 5) zeigt es danach
+  \emph{zufällig\/} auf das \lstinline{"ist"}.
+
+  Bei nochmaligem Erhöhen zeigt es auf das \lstinline{"in"} von \lstinline{"ein"}.
+
+  \smallskip
+
+  (Auch ohne Optimierung werden die Strings \lstinline{"ist"}, \lstinline{"ein"}
+  und \lstinline{"Test"}\\
+  u.\,U.\ wegoptimiert.)
+
+\end{frame}
+
+\iffalse
+
+\nosectionnonumber{\large\bf Übungsaufgabe: Verkettete Listen}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{enumerate}[\quad(a)]
+    \item
+      Schreiben Sie eine Funktion, die eine verkettete Liste\\
+      in die umgekehrte Reihenfolge bringt.
+    \item
+      Schreiben Sie eine Funktion, die eine verkettete Liste\\
+      in eine doppelt verkettete Liste umwandelt.
+    \item
+      Wieviel Rechenzeit (Landau-Symbol) benötigen Ihre Funktionen?
+    \item
+      Wieviel Speicherplatz (Landau-Symbol) benötigen Ihre Funktionen?
+  \end{enumerate}
+
+\end{frame}
+
+\fi
+
+\section{Langzahl-Arithmetik}
+
+\begin{frame}
+
+  \showsection
+
+  Problem: Rechnen mit ganzen Zahlen, die größer sind als das,\\
+  was der Rechner normalerweise verarbeiten kann
+
+  \bigskip
+
+  {\large\textbf{Aufgabe: Addition langer Zahlen}\par}
+  \smallskip
+  \begin{itemize}
+    \item[(a)]
+      Überlegen Sie sich eine Datenstruktur, um eine lange Zahl zu speichern.
+    \item[(b)]
+      Schreiben Sie eine Funktion, die zwei lange Zahlen addiert.
+  \end{itemize}
+
+  \smallskip
+
+  Hinweis: "`schriftlich"' rechnen
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+
+  Problem: Rechnen mit ganzen Zahlen, die größer sind als das,\\
+  was der Rechner normalerweise verarbeiten kann
+
+  \medskip
+
+  \begin{itemize}
+    \item
+      Grundrechenarten (einschließlich "`modulo"'):\\
+      "`schriftlich"' rechnen
+    \item
+      \href{https://de.wikipedia.org/wiki/Binäre_Exponentiation}%
+           {binäre Exponentiation}:\\
+      Basis fortlaufend quadrieren, ggf.\ damit multiplizieren\\
+      Beispiel: $x^9 = ((x^2)^2)^2 \cdot x$
+    \item
+      Suche nach $d$ mit $d\cdot e~\text{mod}~N = 1$:\\
+      \href{https://de.wikipedia.org/wiki/Erweiterter_euklidischer_Algorithmus}%
+           {erweiterter euklidischer Algorithmus}
+    \smallskip
+    \arrowitem
+      RSA
+  \end{itemize}
+
+\end{frame}
+
+\section{Kryptographie}
+\subsectionnonumber{\boldmath 4.$(x^2 - 1)$\quad Der Herr der Ringe: Manchmal ist $1 + 1 = 0$.}
+\subsubsectionnonumber{\boldmath 4.$(x^2 - 1).x$\quad Motivation}
+
+\begin{frame}
+
+  \showsection
+  \pause
+  \showsubsectionnonumber
+  \pause
+  \showsubsubsectionnonumber
+
+  Man kann auch mit sehr merkwürdigen Objekten\\
+  wie mit "`ganz normalen"' Zahlen rechnen.
+
+  \pause
+  \bigskip
+  
+  Anwendungen:
+  \begin{itemize}
+    \item Funktionsweise von Computern (\textarrow\ Rechnertechnik)
+    \item Fehlererkennung
+    \item Fehlerkorrektur
+    \item Verschlüsselung
+    \item Digitale Signaturen
+  \end{itemize}
+
+\end{frame}
+
+\subsubsectionnonumber{\boldmath 4.$(x^2 - 1).(x + 1)$\quad Gruppen}
+
+\begin{frame}
+
+  \showsection
+  \showsubsectionnonumber
+  \showsubsubsectionnonumber
+
+  \textbf{Definition:}
+  Sei $G$ eine Menge, $*$ eine Verknüpfung auf $G$.
+  Wenn
+  \begin{itemize}
+    \item
+      $\forall a, b, c \in G$: $(a * b) * c = a * (b * c)$ \quad (Assoziativgesetz),
+    \item
+      $\exists e \in G$: $\forall a \in G$: $a * e = e * a = a$ \quad (neutrales Element),
+    \item
+      $\forall a \in G$: $\exists a^{-1} \in G$: $a * a^{-1} = a^{-1} * a = e$ \quad (inverses Element),
+  \end{itemize}
+  dann heißt $(G,*)$ eine \newterm{Gruppe}.
+
+  \pause
+  \bigskip
+
+  \textbf{Definition:}
+  Sei $(G,*)$ eine Gruppe.
+  Wenn zusätzlich
+  \begin{itemize}
+    \item
+      $\forall a, b \in G$: $a * b = b * a$ \quad (Kommutativgesetz),
+  \end{itemize}
+  dann heißt $(G,*)$ eine \newterm{kommutative Gruppe}.
+
+\end{frame}
+
+\subsubsectionnonumber{\boldmath 4.$(x^2 - 1).(x + 2)$\quad Ringe}
+
+\begin{frame}
+
+%  \showsection
+  \showsubsectionnonumber
+  \showsubsubsectionnonumber
+
+  \textbf{Definition:}
+  Sei $R$ eine Menge; seien $+$ und $\cdot$ Verknüpfungen auf $R$.
+  Wenn
+  \begin{itemize}
+    \item
+      $(R,+)$ eine kommutative Gruppe ist,
+    \item
+      $\forall a, b, c \in R$: $(a \cdot b) \cdot c = a \cdot (b \cdot c)$ \quad (Assoziativgesetz),
+    \item
+      $\forall a, b, c \in R$: $(a + b)\cdot c = a\cdot c + b\cdot c$
+      und $a\cdot(b + c) = a\cdot b + a\cdot c$ \quad (Distributivgesetze),
+  \end{itemize}
+  dann heißt $(R,+,\cdot)$ ein \newterm{Ring}.
+
+  \pause
+  \bigskip
+
+  \textbf{Definition:}
+  Sei $(R,+,\cdot)$ ein Ring.
+  Wenn zusätzlich
+  \begin{itemize}
+    \item
+      $\forall a, b \in R$: $a \cdot b = b \cdot a$ \quad (Kommutativgesetz),
+  \end{itemize}
+  dann heißt $(R,+,\cdot)$ ein \newterm{kommutativer Ring}.
+
+  \pause
+  \bigskip
+
+  \textbf{Definition:}
+  Sei $(R,+,\cdot)$ ein (kommutativer) Ring.
+  Wenn zusätzlich
+  \begin{itemize}
+    \item
+      ein $e \in R$ existiert, so daß für alle $a \in R$ gilt: $a \cdot e = e \cdot a = a$\\
+      (neutrales Element),
+  \end{itemize}
+  dann heißt $(R,+,\cdot)$ ein \newterm{(kommutativer) Ring mit 1}.
+
+  \vspace*{-1cm}
+
+\end{frame}
+
+\subsubsectionnonumber{\boldmath 4.$(x^2 - 1).(x + 3)$\quad Körper}
+
+\begin{frame}
+
+%  \showsection
+  \showsubsectionnonumber
+  \showsubsubsectionnonumber
+
+  \textbf{Definition:}
+  Sei $K$ eine Menge; seien $+$ und $\cdot$ Verknüpfungen auf $K$.
+  Wenn
+  \begin{itemize}
+    \item
+      $(K,+,\cdot)$ ein Ring mit 1 ist und
+    \item
+      $(K \backslash \{0\},\cdot)$ eine kommutative Gruppe ist,
+  \end{itemize}
+  dann heißt $(K,+,\cdot)$ ein \newterm{Körper}.
+
+\end{frame}
+
+\iffalse
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \underconstruction
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/ad}}}
+%    \item[\textbf{i}] \textbf{Gesellschaftliche Auswirkungen\\
+%                              von Algorithmen und Datenstrukturen}
+    \item[\textbf{2}] \textbf{Datenorganisation}
+    \item[\textbf{3}] \textbf{Optimierung}
+    \item[\textbf{4}] \textbf{Hardwarenahe Algorithmen}
+    \item[\textbf{5}] \textbf{Datenkodierung}
+    \color{gray}
+    \item[\textbf{6}] \textbf{Numerik}
+  \end{itemize}
+
+\end{frame}
+
+\section{Einführung in C++}
+\addtocounter{subsection}{-1}
+\subsection{Was ist C?}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Etabliertes Profi-Werkzeug
+  \begin{itemize}
+    \item
+      kleinster gemeinsamer Nenner für viele Plattformen\\
+      \begin{picture}(0,1)
+        \color{red}
+        \put(7.2,0.6){\tikz{\draw[-latex](0.0,0.0)--(0.0,0.4);}}
+        \put(7.2,0.5){\makebox(0,0)[t]{\color{black}Hardware und/oder Betriebssystem}}
+      \end{picture}
+    \item
+      Hardware direkt ansprechen und effizient einsetzen
+    \item
+      \dots\ bis hin zu komplexen Software-Projekten
+    \medskip
+    \arrowitem
+      Man kann Computer vollständig beherrschen.
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \put(5.3,-2.5){\makebox(0,0)[tl]{\begin{minipage}{7cm}
+                     \emph{C makes it easy to shoot yourself in the foot.}
+                     \begin{flushright}
+                       Bjarne Stroustrup, ca.~1986\\
+                       \href{http://www.stroustrup.com/bs_faq.html\#really-say-that}%
+                            {\nolinkurl{http://www.stroustrup.com/bs_faq.html}\\
+                             \nolinkurl{\#really-say-that}}
+                     \end{flushright}
+                   \end{minipage}}}
+  \end{picture}%
+  Etabliertes Profi-Werkzeug
+  \begin{itemize}
+    \item
+      kleinster gemeinsamer Nenner für viele Plattformen
+    \item
+      Hardware direkt ansprechen und effizient einsetzen
+    \item
+      \dots\ bis hin zu komplexen Software-Projekten
+    \item
+      leistungsfähig, aber gefährlich
+  \end{itemize}
+
+  \medskip
+  "`High-Level-Assembler"'
+  \begin{itemize}
+    \item
+      kein "`Fallschirm"'
+    \item
+      kompakte Schreibweise
+  \end{itemize}
+
+  \medskip
+  Unix-Hintergrund
+  \begin{itemize}
+    \item
+      Baukastenprinzip
+    \item
+      konsequente Regeln
+    \item
+      kein "`Fallschirm"'
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Was ist C++?}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \put(6.3,-0.2){\makebox(0,0)[tl]{\begin{minipage}{6cm}
+                     \emph{C++ is a better C.}
+                     \begin{flushright}
+                        Bjarne Stroustrup, Autor von C++\\
+                        \url{http://www.stroustrup.com/C++.html}
+                     \end{flushright}
+                   \end{minipage}}}
+    \put(5.3,-2.5){\makebox(0,0)[tl]{\begin{minipage}{7cm}
+                     \emph{C makes it easy to shoot yourself in the foot;\\
+                     C++ makes it harder, but when you do\\
+                     it blows your whole leg off.}
+                     \begin{flushright}
+                       Bjarne Stroustrup, Autor von C++, ca.~1986\\
+                       \href{http://www.stroustrup.com/bs_faq.html\#really-say-that}%
+                            {\nolinkurl{http://www.stroustrup.com/bs_faq.html}\\
+                             \nolinkurl{\#really-say-that}}
+                     \end{flushright}
+                   \end{minipage}}}
+  \end{picture}%
+  Etabliertes Profi-Werkzeug
+  \begin{itemize}
+    \item
+      kompatibel zu C
+  \end{itemize}
+
+  \medskip
+
+  C++ unterstützt
+  \begin{itemize}
+    \item
+      \newterm{objektorientierte\\
+      Programmierung}
+    \item
+      \newterm{Datenabstraktion}
+    \item
+      \newterm{generische\\
+      Programmierung}
+  \end{itemize}
+
+  \vspace{0cm plus 1 filll}
+
+  \textbf{Motivation:}\\[\smallskipamount]
+  Vermeidung unsicherer Techniken,\\
+  insbesondere von Präprozessor-Konstruktionen und Zeigern,\\
+  unter Beibehaltung der Effizienz
+
+\end{frame}
+
+\subsection{Elementare Neuerungen in C++ gegenüber C}
+
+\begin{frame}[fragile]
+  \showsubsection
+  \begin{itemize}
+    \pause
+    \item
+      Kommentare mit \lstinline{//}
+    \pause
+    \item
+      Konstante:
+      \begin{onlyenv}<3>
+        \begin{lstlisting}[gobble=10]
+          const int answer = 42;
+        \end{lstlisting}
+      \end{onlyenv}
+      \begin{lstlisting}[gobble=8]
+        const int n = 5;
+        int prime[n] = { 2, 3, 5, 7, 11 };
+      \end{lstlisting}
+    \pause
+    \item
+      Ab C++11: \lstinline{constexpr}-Funktionen\\
+%      \only<1->{{\color{red}\dots\ anscheinend auch ohne "`constexpr"' \dots}\\}
+      C++11: darf nur aus einem einzigen \lstinline{return}-Statement bestehen\\
+      \textarrow\ \lstinline{?:} statt \lstinline{if}, Rekursion statt Schleife\\
+      C++-14: auch Verzweigungen und Schleifen erlaubt
+    \pause
+    \item
+      leere Parameterliste: \lstinline{void} optional\\
+      in C: ohne \lstinline{void} = Parameterliste wird nicht geprüft
+    \pause
+    \item
+      Operatoren \lstinline{new} und \lstinline{delete}\\
+      als Alternative zu den Funktionen \lstinline{malloc()} und \lstinline{free()}
+  \end{itemize}
+\end{frame}
+
+\fi
+
+\end{document}
diff --git a/20250401/landau-symbols-2.pdf b/20250401/landau-symbols-2.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..6b458b6efd8e274824a6dfcaabc4b9c27d196dc4
--- /dev/null
+++ b/20250401/landau-symbols-2.pdf
@@ -0,0 +1 @@
+../common/landau-symbols-2.pdf
\ No newline at end of file
diff --git a/20250401/landau-symbols-3.pdf b/20250401/landau-symbols-3.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..46efa409b35ff5df763c744a423599cba515d886
--- /dev/null
+++ b/20250401/landau-symbols-3.pdf
@@ -0,0 +1 @@
+../common/landau-symbols-3.pdf
\ No newline at end of file
diff --git a/20250401/landau-symbols.pdf b/20250401/landau-symbols.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..ca145425bf07439c680632aa0663f84be601a565
--- /dev/null
+++ b/20250401/landau-symbols.pdf
@@ -0,0 +1 @@
+../common/landau-symbols.pdf
\ No newline at end of file
diff --git a/20250401/logo-hochschule-bochum-cvh-text-v3.pdf b/20250401/logo-hochschule-bochum-cvh-text-v3.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..aa19ac68bf7f79336d9235b66da10510eeaa70d5
--- /dev/null
+++ b/20250401/logo-hochschule-bochum-cvh-text-v3.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text-v3.pdf
\ No newline at end of file
diff --git a/20250401/logo-hochschule-bochum-de-narrow.pdf b/20250401/logo-hochschule-bochum-de-narrow.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..9c8831d42a60f3d3f4fd6a583355d05c375f28bb
--- /dev/null
+++ b/20250401/logo-hochschule-bochum-de-narrow.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-de-narrow.pdf
\ No newline at end of file
diff --git a/20250401/pgslides.sty b/20250401/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20250401/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file