diff options
| author | JBatzill <batzilljohannes@gmail.com> | 2014-11-22 13:38:26 +0100 |
|---|---|---|
| committer | JBatzill <batzilljohannes@gmail.com> | 2014-11-22 13:38:26 +0100 |
| commit | 6faad4725bebb99535ebb1d479d35c39e45120e1 (patch) | |
| tree | 2caa35297e6cadaea10709d0e5383a6ed30973b3 /string/suffixArray.cpp | |
| parent | f1b3e645381d9b8ea8197fb1473f115de2ee8f96 (diff) | |
optimized sorting, new runtime: O(n*log²(n))
Diffstat (limited to 'string/suffixArray.cpp')
| -rw-r--r-- | string/suffixArray.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/string/suffixArray.cpp b/string/suffixArray.cpp index 2b2a87b..7c03d70 100644 --- a/string/suffixArray.cpp +++ b/string/suffixArray.cpp @@ -1,6 +1,6 @@ //longest common substring in one string (overlapping not excluded) //contains suffix array:-------------------------------------------------------------------- -int cmp(string &s,vector<vector<int>> &v, vector<int> &a, int i, int vi, int u, int l) { +int cmp(string &s,vector<vector<int>> &v, int i, int vi, int u, int l) { int vi2 = (vi + 1) % 2, u2 = u + i / 2, l2 = l + i / 2; if(i == 1) return s[u] - s[l]; else if (v[vi2][u] != v[vi2][l]) return (v[vi2][u] - v[vi2][l]); @@ -19,10 +19,10 @@ string lcsub(string s) { for(int k = 0; k < a.size(); k++) a[k] = k; for(int i = 1; i < s.length(); i *= 2, vi = (vi + 1) % 2) { sort(a.begin(), a.end(), [&] (const int &u, const int &l) { - return cmp(s, v, a, i, vi, u, l) < 0; + return cmp(s, v, i, vi, u, l) < 0; }); v[vi][a[0]] = 0; - for(int z = 1; z < a.size(); z++) v[vi][a[z]] = v[vi][a[z-1]] + (cmp(s, v, a, i, vi, a[z], a[z-1]) == 0 ? 0 : 1); + for(int z = 1; z < a.size(); z++) v[vi][a[z]] = v[vi][a[z-1]] + (cmp(s, v, i, vi, a[z], a[z-1]) == 0 ? 0 : 1); } //------------------------------------------------------------------------------------------- int r = 0, m=0, c=0; |
