Compare commits
No commits in common. "3f3ad0c765e121eaed5b3f4a10a879d43ba069e6" and "9b1872139d41018deb23742f2d3c19608f06897a" have entirely different histories.
3f3ad0c765
...
9b1872139d
|
@ -6,18 +6,29 @@
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Datenstruktur für Wortliste
|
\item Datenstruktur für Wortliste
|
||||||
\item Paralleler Such-Algorithmus
|
\item Paralleler Such-Algorithmus
|
||||||
\item Abgeleitet: Optimierung der Laufzeit
|
\item Abgeleitet: Optimierung der Such-Zeit
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
||||||
\begin{frame}{Analyse}
|
\begin{frame}{Analyse}
|
||||||
|
|
||||||
{\Large Umsetzung}
|
{\Large Abgeleitete Aufgabenstellung}
|
||||||
\vspace{0.5cm}
|
\vspace{0.5cm}
|
||||||
|
|
||||||
|
\begin{minipage}{0.7\textwidth}
|
||||||
|
Aufteilung in zwei Blöcke:
|
||||||
|
\begin{block}{Anwendungs-Schicht (Layer 5 - 7)}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Zwei Phasen: Einlesen und Suchen
|
\item Request/Reponse
|
||||||
\item Such-Phase zeitkritischer als Einlese-Phase
|
\item Konkurrierender Zugriff
|
||||||
\item Locks minimieren
|
\item Session Handling
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
\end{block}
|
||||||
|
\begin{block}{Transport-Schicht (Layer 1 - 4)}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Datenübertragung zwischen SG
|
||||||
|
\item Gleichzeitige Kommunikation
|
||||||
|
\end{itemize}
|
||||||
|
\end{block}
|
||||||
|
\end{minipage}
|
||||||
\end{frame}
|
\end{frame}
|
||||||
|
|
Before Width: | Height: | Size: 76 KiB |
Before Width: | Height: | Size: 56 KiB |
|
@ -1,23 +0,0 @@
|
||||||
\begin{frame}{Datenstrukturen}
|
|
||||||
|
|
||||||
{\Large Architektur}
|
|
||||||
\vspace{0.5cm}
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Flacher Suchbaum
|
|
||||||
\item Ebene 1: Ein Knoten je Thread
|
|
||||||
\item Ebene 2: Ein Blatt je erster Wort-Buchstabe
|
|
||||||
\item Blätter tragen Wort-Listen
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
\begin{frame}{Datenstrukturen - Implementierung}
|
|
||||||
\begin{figure}
|
|
||||||
\includegraphics[width=\textwidth]{bucket_finder}
|
|
||||||
\end{figure}
|
|
||||||
\begin{itemize}
|
|
||||||
\item buckets: Erste Baum-Ebene, nach Threads
|
|
||||||
\item Bucket: Zweite Baum-Ebene, nach erstem Buchstaben
|
|
||||||
\item WordRefList: Wort-Liste am Blatt
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
|
@ -1,18 +0,0 @@
|
||||||
\begin{frame}[t]{Einfügen von Daten}
|
|
||||||
\vspace{1cm}
|
|
||||||
\begin{figure}
|
|
||||||
\onslide*<1>{
|
|
||||||
\includegraphics[width=\textwidth]{insert_1}
|
|
||||||
\caption*{Eingabedaten}
|
|
||||||
}
|
|
||||||
\onslide*<2>{
|
|
||||||
\includegraphics[width=\textwidth]{insert_3}
|
|
||||||
\caption*{Aufteilen in Buckets}
|
|
||||||
}
|
|
||||||
\onslide*<3>{
|
|
||||||
\includegraphics[width=\textwidth]{insert_4}
|
|
||||||
\caption*{Mapping nach erstem Buchstaben}
|
|
||||||
}
|
|
||||||
\end{figure}
|
|
||||||
\end{frame}
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
\usepackage[sfdefault]{noto}
|
\usepackage[sfdefault]{noto}
|
||||||
\usepackage[T1]{fontenc}
|
\usepackage[T1]{fontenc}
|
||||||
\usepackage{caption}
|
\usepackage{tikz}
|
||||||
\usepackage{fontawesome}
|
\usepackage{fontawesome}
|
||||||
|
|
||||||
\definecolor{vector_red}{RGB}{183, 0, 50}
|
\definecolor{vector_red}{RGB}{183, 0, 50}
|
||||||
|
@ -46,15 +46,6 @@
|
||||||
|
|
||||||
\include{aufgabe}
|
\include{aufgabe}
|
||||||
\include{analyse}
|
\include{analyse}
|
||||||
|
|
||||||
\include{datenstruktur}
|
|
||||||
|
|
||||||
\include{einlesen}
|
|
||||||
\include{suchen}
|
|
||||||
\include{komplexität}
|
|
||||||
|
|
||||||
\include{inkrementell_suchen}
|
|
||||||
|
|
||||||
\include{danke}
|
\include{danke}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
\begin{frame}{Inkrementelle Suche}
|
|
||||||
\begin{itemize}
|
|
||||||
\item Such-Phase noch zeitkritischer
|
|
||||||
\item Such-Ergebnis als gefiltertes Such-Objekt
|
|
||||||
\item UI: dynamisch gefüllte Combo-Box
|
|
||||||
\item Asynchrone und ggf. verzögerte Updates
|
|
||||||
\end{itemize}
|
|
||||||
\end{frame}
|
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
\begin{frame}{Komplexitäts-Abschätzung}
|
|
||||||
|
|
||||||
BucketFinder
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Suchraum einfügen: O(n) mit $ n = |Suchraum| $
|
|
||||||
\item Pattern suchen: O(n) mit $ n = \frac{|Suchraum|}{|Threads| \times |Alphabet|} $
|
|
||||||
\item Laufzeit: deutlich schnelleres Einfügen und schelleres Finden von größeren Ergebnismengen
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\vspace{0.5cm}
|
|
||||||
|
|
||||||
Balancierter Baum
|
|
||||||
|
|
||||||
\begin{itemize}
|
|
||||||
\item Suchraum einfügen: O(n log n)
|
|
||||||
\item Pattern suchen: O(log n)
|
|
||||||
\item Laufzeit: deutlich schneller beim Finden kleinerer Ergebnismengen
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
|
|
||||||
\end{frame}
|
|
Before Width: | Height: | Size: 152 KiB |
|
@ -1,10 +0,0 @@
|
||||||
\begin{frame}[t]{Suchen von Wörtern}
|
|
||||||
\begin{figure}
|
|
||||||
\onslide*<1>{
|
|
||||||
\includegraphics[width=\textwidth]{search}
|
|
||||||
\caption*{Suche nach "BB"}
|
|
||||||
}
|
|
||||||
\end{figure}
|
|
||||||
\end{frame}
|
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 38 KiB |
2120
docs/input.svg
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 97 KiB |
|
@ -3,11 +3,11 @@
|
||||||
#include "finder.h"
|
#include "finder.h"
|
||||||
#include "word_list.h"
|
#include "word_list.h"
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
|
|
||||||
class Bucket {
|
class Bucket {
|
||||||
private:
|
private:
|
||||||
std::unordered_map<char, WordRefList> directory_;
|
std::map<char, WordRefList> directory_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void insert(const WordList &word_list, size_t first_index, size_t last_index);
|
void insert(const WordList &word_list, size_t first_index, size_t last_index);
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
#include "finder.h"
|
#include "finder.h"
|
||||||
#include "word_list.h"
|
#include "word_list.h"
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
|
|
||||||
class GroupedFinder : public Finder {
|
class GroupedFinder : public Finder {
|
||||||
private:
|
private:
|
||||||
std::unordered_map<char, WordRefList> groups_;
|
std::map<char, WordRefList> groups_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GroupedFinder(const WordList &word_list);
|
GroupedFinder(const WordList &word_list);
|
||||||
|
|
|
@ -3,12 +3,12 @@
|
||||||
#include "finder.h"
|
#include "finder.h"
|
||||||
#include "word_list.h"
|
#include "word_list.h"
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
|
|
||||||
class SearchTreeNode {
|
class SearchTreeNode {
|
||||||
private:
|
private:
|
||||||
WordRefList words_;
|
WordRefList words_;
|
||||||
std::unordered_map<char, SearchTreeNode> children_;
|
std::map<const char, SearchTreeNode> children_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void insert(std::string_view partial_word, const std::string *original_word);
|
void insert(std::string_view partial_word, const std::string *original_word);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "grouped_finder.h"
|
#include "grouped_finder.h"
|
||||||
|
|
||||||
|
#include <forward_list>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|