diff --git a/.gitignore b/.gitignore index b622f4d..1f72da6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,3 @@ bin/ compile_commands.json build-*/ -latex.out/ -docs/folien/folien.pdf diff --git a/.nix/flake.nix b/.nix/flake.nix index bd6c1e5..ff1538c 100644 --- a/.nix/flake.nix +++ b/.nix/flake.nix @@ -22,13 +22,6 @@ qt6.full libGL - # presentation - pandoc - texlive.combined.scheme-full - noto-fonts - latexrun - entr - # pre-commit pre-commit commitizen diff --git a/QVectorSearch/mainwindow.cpp b/QVectorSearch/mainwindow.cpp index 9709e98..90121a8 100644 --- a/QVectorSearch/mainwindow.cpp +++ b/QVectorSearch/mainwindow.cpp @@ -23,7 +23,6 @@ MainWindow::MainWindow(QWidget *parent) setupAlgorithmSelector(); setupWordListSourceSelector(); setupWordList(); - createSelectedFinder(); } MainWindow::~MainWindow() { delete ui; } @@ -80,7 +79,8 @@ void MainWindow::loadWordList(std::filesystem::path path) { void MainWindow::search(const QString &search_term) { if (search_term.isEmpty()) { - clearResults(); + result_model_.setStringList(QStringList()); + ui->mainStatusBar->clearMessage(); return; } @@ -99,7 +99,6 @@ void MainWindow::search(const QString &search_term) { void MainWindow::createSelectedFinder() { auto selectedFinder = ui->searchAlgorithmSelector->currentIndex(); - Timer timer; switch (selectedFinder) { case 0: default: @@ -121,12 +120,6 @@ void MainWindow::createSelectedFinder() { finder_ = std::make_unique(word_list_); break; } - timer.stop(); - - std::stringstream status_message; - status_message << "finder initialized in " << timer << ", " - << word_list_.size() << " words loaded"; - ui->mainStatusBar->showMessage(QString::fromStdString(status_message.str())); } void MainWindow::showResults(const WordRefList &results) { @@ -138,37 +131,32 @@ void MainWindow::showResults(const WordRefList &results) { result_model_.setStringList(ui_results); } -void MainWindow::clearResults() { result_model_.setStringList({}); } - void MainWindow::on_searchInput_textChanged(const QString &search_term) { - // QGuiApplication::setOverrideCursor(Qt::WaitCursor); - // search(search_term); - // QGuiApplication::restoreOverrideCursor(); + QGuiApplication::setOverrideCursor(Qt::WaitCursor); + search(search_term); + QGuiApplication::restoreOverrideCursor(); } void MainWindow::on_searchAlgorithmSelector_currentIndexChanged(int) { QGuiApplication::setOverrideCursor(Qt::WaitCursor); - clearResults(); createSelectedFinder(); - // search(ui->searchInput->displayText()); + search(ui->searchInput->displayText()); QGuiApplication::restoreOverrideCursor(); } void MainWindow::on_wordListSourceSelector_currentIndexChanged(int) { QGuiApplication::setOverrideCursor(Qt::WaitCursor); - clearResults(); setupWordList(); createSelectedFinder(); - // search(ui->searchInput->displayText()); + search(ui->searchInput->displayText()); QGuiApplication::restoreOverrideCursor(); } void MainWindow::on_wordListSizeSelector_valueChanged(int) { QGuiApplication::setOverrideCursor(Qt::WaitCursor); - clearResults(); setupWordList(); createSelectedFinder(); - // search(ui->searchInput->displayText()); + search(ui->searchInput->displayText()); QGuiApplication::restoreOverrideCursor(); } diff --git a/QVectorSearch/mainwindow.h b/QVectorSearch/mainwindow.h index f686664..9736b75 100644 --- a/QVectorSearch/mainwindow.h +++ b/QVectorSearch/mainwindow.h @@ -37,7 +37,6 @@ private: void search(const QString &search_term); void createSelectedFinder(); void showResults(const WordRefList &results); - void clearResults(); private slots: void on_searchInput_textChanged(const QString &search_term); diff --git a/docs/folien/analyse.tex b/docs/folien/analyse.tex deleted file mode 100644 index b1ec6f9..0000000 --- a/docs/folien/analyse.tex +++ /dev/null @@ -1,34 +0,0 @@ -\begin{frame}{Analyse} - - {\Large Anforderungen} - \vspace{0.5cm} - - \begin{itemize} - \item Datenstruktur für Wortliste - \item Paralleler Such-Algorithmus - \item Abgeleitet: Optimierung der Such-Zeit - \end{itemize} -\end{frame} - -\begin{frame}{Analyse} - - {\Large Abgeleitete Aufgabenstellung} - \vspace{0.5cm} - - \begin{minipage}{0.7\textwidth} - Aufteilung in zwei Blöcke: - \begin{block}{Anwendungs-Schicht (Layer 5 - 7)} - \begin{itemize} - \item Request/Reponse - \item Konkurrierender Zugriff - \item Session Handling - \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} diff --git a/docs/folien/aufgabe.tex b/docs/folien/aufgabe.tex deleted file mode 100644 index 5e48891..0000000 --- a/docs/folien/aufgabe.tex +++ /dev/null @@ -1,14 +0,0 @@ -\begin{frame}{Aufgabe} - - {\Large Entwicklung einer parallelen Suche in einer Liste mit Wörtern} - \vspace{0.5cm} - - Es ist eine Datenstruktur in Form einer Liste (Vektor) mit unterschiedlichen Wörtern - gegeben. Ein Suchalgorithmus soll eine Liste mit Wörtern aus dieser Wortliste ermitteln, - deren erste Zeichen mit einem Suchstring übereinstimmen. - - Der Algorithmus soll moderne Multi-Core-Prozessoren ausnutzen, die Suche also auf - möglichst viele Cores verteilen. -\end{frame} - - diff --git a/docs/folien/danke.tex b/docs/folien/danke.tex deleted file mode 100644 index cc6c94b..0000000 --- a/docs/folien/danke.tex +++ /dev/null @@ -1,5 +0,0 @@ -\begin{frame} - \begin{center} - \huge Vielen Dank - \end{center} -\end{frame} diff --git a/docs/folien/folien.tex b/docs/folien/folien.tex deleted file mode 100644 index 509a45a..0000000 --- a/docs/folien/folien.tex +++ /dev/null @@ -1,51 +0,0 @@ -\documentclass[aspectratio=169]{beamer} -\title{Fallstudie Wortliste} -\author{Michael Mandl} -\date[v0.1 | 25.03.2024]{25.03.2024} - -\usepackage[sfdefault]{noto} -\usepackage[T1]{fontenc} -\usepackage{tikz} -\usepackage{fontawesome} - -\definecolor{vector_red}{RGB}{183, 0, 50} -\definecolor{vector_grey}{RGB}{234, 236, 237} - -\usetheme{Boadilla} - -\setbeamercolor*{palette primary}{fg=white,bg=vector_red} -\setbeamercolor*{palette secondary}{fg=black,bg=vector_grey} -\setbeamercolor*{palette tertiary}{fg=black,bg=vector_grey} -\setbeamercolor*{palette quaternary}{fg=black,bg=vector_grey} - -\setbeamercolor{titlelike}{fg=white, bg=vector_red} -\setbeamercolor{frametitle}{bg=vector_red,fg=white} - -\setbeamertemplate{itemize item}[triangle] -\setbeamertemplate{itemize subitem}[circle] -\setbeamercolor{itemize item}{fg=vector_red} -\setbeamercolor{itemize subitem}{fg=vector_red} -\setbeamercolor{itemize subsubitem}{fg=vector_red} - -\setbeamercolor{description item}{fg=vector_red} - -\setbeamercolor{block title}{fg=white, bg=vector_red} -\setbeamercolor{block body}{fg=black, bg=vector_grey} - -\setbeamertemplate{navigation symbols}{} - -\setbeamersize -{ - text margin left=2cm, - text margin right=2cm -} - -\begin{document} - -\frame[plain]{\titlepage} - -\include{aufgabe} -\include{analyse} -\include{danke} - -\end{document} diff --git a/docs/folien/insert_1.png b/docs/folien/insert_1.png deleted file mode 100644 index 524ab95..0000000 Binary files a/docs/folien/insert_1.png and /dev/null differ diff --git a/docs/folien/insert_2.png b/docs/folien/insert_2.png deleted file mode 100644 index 8ea56cc..0000000 Binary files a/docs/folien/insert_2.png and /dev/null differ diff --git a/docs/folien/insert_3.png b/docs/folien/insert_3.png deleted file mode 100644 index 5384e42..0000000 Binary files a/docs/folien/insert_3.png and /dev/null differ diff --git a/docs/folien/insert_4.png b/docs/folien/insert_4.png deleted file mode 100644 index 26b08b2..0000000 Binary files a/docs/folien/insert_4.png and /dev/null differ diff --git a/docs/folien/watch_and_build.sh b/docs/folien/watch_and_build.sh deleted file mode 100755 index a8b90fc..0000000 --- a/docs/folien/watch_and_build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -find . -name "*.tex" -o -name "*.png" | entr latexrun folien.tex diff --git a/docs/input.svg b/docs/input.svg deleted file mode 100644 index 662ad6c..0000000 --- a/docs/input.svg +++ /dev/null @@ -1,2270 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EZGA - - - - BBPR - - - - EPWE - - - - AGTK - - - - CCDC - - - - APUX - - - - BBZA - - - - MNPP - - - - QLAN - - - - BHAN - - - - OZTT - - - - YUAA - - - - - - - - - EZGA - - - - BBPR - - - - EPWE - - - - AGTK - - - - CCDC - - - - APUX - - - - BBZA - - - - MNPP - - - - QLAN - - - - BHAN - - - - OZTT - - - - YUAA - - - - - - EZGA - - - - BBPR - - - - EPWE - - - - AGTK - - - - CCDC - - - - APUX - - - - BBZA - - - - MNPP - - - - QLAN - - - - BHAN - - - - OZTT - - - - YUAA - - - Bucket 0 - Bucket 1 - Bucket 2 - Bucket 1 - - - - - - - - - - - - - - - EZGA - - - - BBPR - - - - EPWE - - - - AGTK - - - - CCDC - - - - APUX - - - - BBZA - - - - MNPP - - - - QLAN - - - - BHAN - - - - OZTT - - - - YUAA - - Bucket 0 - A - - - - - - E - - - - - - - - - - Bucket 1 - A - - - - - B - - - - - - C - - - - - - - - - - - Bucket 3 - M - - - - - O - - - - - - Y - - - - - - - - - - - Bucket 2 - B - - - - - Q - - - - - diff --git a/lib_vector_search/include/bucket_finder.h b/lib_vector_search/include/bucket_finder.h index 15b7dbe..d8eae45 100644 --- a/lib_vector_search/include/bucket_finder.h +++ b/lib_vector_search/include/bucket_finder.h @@ -7,7 +7,7 @@ class Bucket { private: - std::map directory_; + std::map groups_; public: void insert(const WordList &word_list, size_t first_index, size_t last_index); diff --git a/lib_vector_search/src/bucket_finder.cpp b/lib_vector_search/src/bucket_finder.cpp index 8fd7500..2738b0b 100644 --- a/lib_vector_search/src/bucket_finder.cpp +++ b/lib_vector_search/src/bucket_finder.cpp @@ -6,20 +6,20 @@ void Bucket::insert(const WordList &word_list, size_t first_index, size_t last_index) { - for (auto index = first_index; index < last_index; ++index) { + for (size_t index = first_index; index < last_index; ++index) { const auto ¤t_word = word_list[index]; - directory_[current_word.front()].push_back(¤t_word); + groups_[current_word.front()].push_back(¤t_word); } } WordRefList Bucket::find_prefix(std::string_view search_term) const { - auto directory_it = directory_.find(search_term.front()); - if (directory_it == directory_.cend()) { + auto group_it = groups_.find(search_term.front()); + if (group_it == groups_.cend()) { return {}; } WordRefList result; - for (const auto *word : directory_it->second) { + for (const auto *word : group_it->second) { if (word->starts_with(search_term)) { result.push_back(word); }