This commit is contained in:
邹晓航
2014-12-30 11:57:55 +08:00
parent 7eb21b5125
commit 44a820ac4d

View File

@@ -22,13 +22,14 @@ namespace TinySTL{
suffix_array(InputIterator arr, size_t len, size_t max_len = 128){ suffix_array(InputIterator arr, size_t len, size_t max_len = 128){
calSuffix(arr, len, max_len); calSuffix(arr, len, max_len);
calRank(); calRank();
calHeight(arr, len - 1);
} }
array_type suffixArray(){ array_type suffixArray(){
return _suffix_array; return _suffix_array;
} }
array_type heightArray(){ array_type heightArray(){
//todo return _height_array;
} }
array_type rankArray(){ array_type rankArray(){
return _rank_array; return _rank_array;
@@ -81,16 +82,15 @@ namespace TinySTL{
for (t = x, x = y, y = t, p = 1, x[_suffix_array[0]] = 0, i = 1; i < len; i++) for (t = x, x = y, y = t, p = 1, x[_suffix_array[0]] = 0, i = 1; i < len; i++)
x[_suffix_array[i]] = cmp(y, _suffix_array[i - 1], _suffix_array[i], j) ? p - 1 : p++; x[_suffix_array[i]] = cmp(y, _suffix_array[i - 1], _suffix_array[i], j) ? p - 1 : p++;
} }
return;
} }
template<class InputIteraotr> template<class InputIteraotr>
void calHeight(InputIteraotr arr, size_t len) void calHeight(InputIteraotr arr, size_t len)
{ {
/*_height_array.resize(_suffix_array.size());
int i, j, k = 0; int i, j, k = 0;
for (i = 1; i <= n; i++) _rank_array[_suffix_array[i]] = i; for (i = 1; i <= len; i++) _rank_array[_suffix_array[i]] = i;
for (i = 0; i < n; _height_array[_rank_array[i++]] = k) for (i = 0; i < len; _height_array[_rank_array[i++]] = k)
for (k ? k-- : 0, j = _suffix_array[_rank_array[i] - 1]; arr[i + k] == arr[j + k]; k++); for (k ? k-- : 0, j = _suffix_array[_rank_array[i] - 1]; arr[i + k] == arr[j + k]; k++);*/
return;
} }
}; };
} }