@@ -51,9 +51,9 @@ auto fibonacci_search(const std::vector<T> &v, const T &value) -> int
51
51
while (low <= high) { // 当最小下标小于等于最大下标时
52
52
int mid = low + fibonacci[k - 1 ] - 1 ; // 取黄金分割点
53
53
if (mid >= v.size ()) { // 如果黄金分割点大于等于数组长度
54
- mid = v.size () - 1 ; // 就将黄金分割点设置为数组最后一个元素的下标
54
+ mid = v.size () - 1 ; // 就将黄金分割点设置为数组最后一个元素的下标
55
55
}
56
- if (v[mid] == value) { // 如果中间元素等于要查找的元素,就返回下标
56
+ if (v[mid] == value) { // 如果中间元素等于要查找的元素,就返回下标
57
57
return mid;
58
58
} else if (v[mid] < value) { // 如果中间元素小于要查找的元素,就在右半部分查找
59
59
low = mid + 1 ;
@@ -96,19 +96,19 @@ auto linear_index_search(const std::vector<T> &v, const T &value) -> int
96
96
template <typename T>
97
97
auto kmp_search (const std::vector<T> &v, const std::vector<T> &pattern) -> int
98
98
{
99
- std::vector<int > next (pattern.size ()); // next数组
100
- next[0 ] = -1 ; // next数组的第一个元素为-1
101
- int k = -1 ; // next数组的下标
102
- for (int i = 1 ; i < pattern.size (); ++i) { // 生成next数组
99
+ std::vector<int > next (pattern.size ()); // next数组
100
+ next[0 ] = -1 ; // next数组的第一个元素为-1
101
+ int k = -1 ; // next数组的下标
102
+ for (int i = 1 ; i < pattern.size (); ++i) { // 生成next数组
103
103
while (k > -1 && pattern[k + 1 ] != pattern[i]) { // 如果k大于-1且下一个元素不等于当前元素
104
104
k = next[k];
105
105
}
106
106
if (pattern[k + 1 ] == pattern[i]) { // 如果下一个元素等于当前元素
107
107
++k;
108
108
}
109
- next[i] = k; // 将k赋值给next数组的当前元素
109
+ next[i] = k; // 将k赋值给next数组的当前元素
110
110
}
111
- k = -1 ; // next数组的下标
111
+ k = -1 ; // next数组的下标
112
112
for (int i = 0 ; i < v.size (); ++i) {
113
113
while (k > -1 && pattern[k + 1 ] != v[i]) { // 如果k大于-1且下一个元素不等于当前元素
114
114
k = next[k];
@@ -146,7 +146,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
146
146
bc[pattern[i]] = i;
147
147
}
148
148
149
- std::vector<int > suffix (pattern.size (), -1 ); // 好后缀
149
+ std::vector<int > suffix (pattern.size (), -1 ); // 好后缀
150
150
std::vector<bool > prefix (pattern.size (), false ); // 好后缀的前缀子串是否在模式串的前缀子串中存在
151
151
for (int i = 0 ; i < pattern.size () - 1 ; ++i) {
152
152
int j = i;
@@ -161,7 +161,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
161
161
}
162
162
}
163
163
int i = 0 ;
164
- while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
164
+ while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
165
165
int j = pattern.size () - 1 ;
166
166
while (j >= 0 && v[i + j] == pattern[j]) { // 从后往前比较
167
167
--j;
@@ -171,7 +171,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
171
171
}
172
172
i += std::max (move_by_suffix (j, suffix, prefix), j - bc[v[i + j]]); // 将模式串向后移动
173
173
}
174
- return -1 ; // not found
174
+ return -1 ; // not found
175
175
}
176
176
177
177
// Sunday查找
@@ -183,7 +183,7 @@ auto sunday_search(const std::vector<T> &v, const std::vector<T> &pattern) -> in
183
183
bc[pattern[i]] = i;
184
184
}
185
185
int i = 0 ;
186
- while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
186
+ while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
187
187
int j = 0 ;
188
188
while (j < pattern.size () && v[i + j] == pattern[j]) { // 从前往后比较
189
189
++j;
@@ -196,7 +196,7 @@ auto sunday_search(const std::vector<T> &v, const std::vector<T> &pattern) -> in
196
196
}
197
197
i += pattern.size () - bc[v[i + pattern.size ()]]; // 将模式串向后移动
198
198
}
199
- return -1 ; // not found
199
+ return -1 ; // not found
200
200
}
201
201
202
202
// Rabin-Karp查找
0 commit comments