summaryrefslogtreecommitdiff
path: root/sonstiges/sonstiges.tex
blob: 255af6ab2ec5c0034bbbd4fb4a5a9c20fd9d63c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
\section{Sonstiges}

\subsection{2-SAT}
\begin{enumerate}
	\item Bedingungen in 2-CNF formulieren.
	\item Implikationsgraph bauen, $\left(a \vee b\right)$ wird zu $\neg a \Rightarrow b$ und $\neg b \Rightarrow a$.
	\item Finde die starken Zusammenhangskomponenten.
	\item Genau dann lösbar, wenn keine Variable mit ihrer Negation in einer SCC liegt.
\end{enumerate}

\subsection{Sortieren in Linearzeit}
Wenn die Eingabe aus einem kleinen Intervall $\left[0, n\right)$ stammt ist Bucketsort schneller.

\subsubsection{Bucketsort}
\lstinputlisting{sonstiges/bucketSort.cpp}

\subsubsection{LSD-Radixsort}
\lstinputlisting{sonstiges/radixSort.cpp}

\subsection{Bit Operations}
\lstinputlisting{sonstiges/bitOps.cpp}

\subsection{Roman-Literal-Converting}
\lstinputlisting{sonstiges/Roman.cpp}

\subsection{Josephus-Problem}
$n$ Personen im Kreis, jeder $k$-te wird erschossen.
\begin{description}
	\item[Spezialfall $k=2$:] Betrachte Binärdarstellung von $n$. Für $n = 1b_1b_2b_3..b_n$ ist $b_1b_2b_3..b_n1$ die Position des letzten Überlebenden. (Rotiere $n$ um eine Stelle nach links)
	\lstinputlisting{sonstiges/josephus2.cpp}
	\item[Allgemein:] Sei $F(n,k)$ die Position des letzten Überlebenden. Nummeriere die Personen mit $0, 1, \ldots, n-1$. Nach Erschießen der $k$-ten Person, hat der Kreis noch Größe $n-1$ und die Position des Überlebenden ist jetzt $F(n-1,k)$. Also: $F(n,k) = (F(n-1,k)+k)\%n$. Basisfall: $F(1,k) = 0$. 
	\lstinputlisting{sonstiges/josephusK.cpp}
\end{description}
\textbf{Beachte bei der Ausgabe, dass die Personen im ersten Fall von $1, \ldots, n$ nummeriert sind, im zweiten Fall von $0, \ldots, n-1$!}