From 390731692623437b33297c595818e240b1a41ab0 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Sat, 15 Aug 2026 17:03:56 +0200 Subject: [PATCH] [DMDB] Fix error, add short remark on projections --- .../dmdb/data-modelling-databases-summary.pdf | Bin 1388532 -> 1388592 bytes .../00_intro-trees-clustering.tex | 2 +- .../parts/06_vector-search/02_hash-index.tex | 2 +- .../dmdb/parts/08_quick-overview/03_qp.tex | 1 + 4 files changed, 3 insertions(+), 2 deletions(-) diff --git a/semester4/dmdb/data-modelling-databases-summary.pdf b/semester4/dmdb/data-modelling-databases-summary.pdf index f89a4601568cfb195356a911de830cc5b2eaf31e..4437679a9307095947b7f400ee6d95ca73efa7ed 100644 GIT binary patch delta 18198 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 N2{|?jB_%~qMhfz^4}Smv delta 18102 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 diff --git a/semester4/dmdb/parts/06_vector-search/00_intro-trees-clustering.tex b/semester4/dmdb/parts/06_vector-search/00_intro-trees-clustering.tex index 3ac1ccd..3099d5e 100644 --- a/semester4/dmdb/parts/06_vector-search/00_intro-trees-clustering.tex +++ b/semester4/dmdb/parts/06_vector-search/00_intro-trees-clustering.tex @@ -8,7 +8,7 @@ We have at least four metrics for the quality of results: \item \bi{Cosine Distance} $D_C$: defined as $1 - S_C$, values range from $0$ to $2$ and the closer to $0$, the better (lower = better) \item \bi{Euclidian distance}: The norm of the vector between the two vectors. Values are from $0$ to $\8$, the lower the better. \end{itemize} -$S_C(A, B) = \frac{A \cdot B}{||A|| \cdot ||B||}$, a +$S_C(A, B) = \frac{A \cdot B}{||A|| \cdot ||B||}$ \subsection{Trees/Clustering} diff --git a/semester4/dmdb/parts/06_vector-search/02_hash-index.tex b/semester4/dmdb/parts/06_vector-search/02_hash-index.tex index 640ae08..06ba0d7 100644 --- a/semester4/dmdb/parts/06_vector-search/02_hash-index.tex +++ b/semester4/dmdb/parts/06_vector-search/02_hash-index.tex @@ -1,6 +1,6 @@ \subsection{Hash Index} To measure the quality of \acrshort{ann} in comparison to \acrshort{knn}, we use $\texttt{recall@k} = |\texttt{ANN\_result} \cap \texttt{KNN\_result}| \div k$. -This however is not always a good metric, as two vastly different results, one objectively worse can score equally well. +This however is not always a good metric, as for two vastly different results, the objectively worse one can score equally well. Alternative methods mentioned are \texttt{RDE@k} and \texttt{TDK@k}, but not elaborated any further. diff --git a/semester4/dmdb/parts/08_quick-overview/03_qp.tex b/semester4/dmdb/parts/08_quick-overview/03_qp.tex index 508a7cf..22cfceb 100644 --- a/semester4/dmdb/parts/08_quick-overview/03_qp.tex +++ b/semester4/dmdb/parts/08_quick-overview/03_qp.tex @@ -24,6 +24,7 @@ Given $B$ frames of memory and $N$ records, we have (typically I/Os in pages to \subsubsection{Projection} +Remember that we need the sort-based and bash-based approach to eliminate duplicates. \begin{itemize} \item \bi{Partitioning}: $\texttt{Cost}_\texttt{part}(R) = \texttt{cnt}(R) + \texttt{cnt}(R')$ with $\texttt{cnt}(R') = \texttt{cnt}(R) Q$, with $Q$ the fraction of selected attributes divided by total attributes