From 2c133b76f193478bb85d41a76ae78695cc067452 Mon Sep 17 00:00:00 2001 From: Paul Jungeblut Date: Wed, 26 Nov 2014 11:45:23 +0100 Subject: levenshtein --- graph/graph.tex | 1 + string/levenshtein.cpp | 12 ++++++++++++ string/string.tex | 3 +++ tcr.pdf | Bin 202167 -> 203257 bytes 4 files changed, 16 insertions(+) create mode 100644 string/levenshtein.cpp diff --git a/graph/graph.tex b/graph/graph.tex index 98d5ffd..4c49663 100644 --- a/graph/graph.tex +++ b/graph/graph.tex @@ -20,6 +20,7 @@ Kürzestes Pfade in Graphen mit negativen Kanten. Erkennt negative Zyklen. \subsubsection{\textsc{Floyd-Warshall}-Algorithmus} Alle kürzesten Pfade im Graphen. \lstinputlisting{graph/floydWarshall.cpp} +\textsc{Floyd-Warshall} findet auch negative Kreise. Es existiert genau dann ein negativer Kreis, wenn \lstinline{dist[i][i] < 0} ist. \subsection{Strongly Connected Components (\textsc{Tarjans}-Algorithmus)} \lstinputlisting{graph/scc.cpp} diff --git a/string/levenshtein.cpp b/string/levenshtein.cpp new file mode 100644 index 0000000..d1980f8 --- /dev/null +++ b/string/levenshtein.cpp @@ -0,0 +1,12 @@ +int levenshtein(string& s1, string& s2) { + int len1 = s1.size(), len2 = s2.size(); + vector col(len2 + 1), prevCol(len2 + 1); + for (int i = 0; i < len2 + 1; i++) prevCol[i] = i; + for (int i = 0; i < len1; i++) { + col[0] = i + 1; + for (int j = 0; j < len2; j++) + col[j+1] = min(min(prevCol[j+1] + 1, col[j] + 1), prevCol[j] + (s1[i]==s2[j] ? 0 : 1)); + col.swap(prevCol); + } + return prevCol[len2]; +} \ No newline at end of file diff --git a/string/string.tex b/string/string.tex index 61385fc..0fddb86 100644 --- a/string/string.tex +++ b/string/string.tex @@ -3,6 +3,9 @@ \subsection{\textsc{Knuth-Morris-Pratt}-Algorithmus} \lstinputlisting{string/kmp.cpp} +\subsection{\textsc{Levenshtein}-Distanz} +\lstinputlisting{string/levenshtein.cpp} + \subsection{Trie} \lstinputlisting{string/trie.cpp} diff --git a/tcr.pdf b/tcr.pdf index e13c314..2350312 100644 Binary files a/tcr.pdf and b/tcr.pdf differ -- cgit v1.2.3