@@ -51,9 +51,9 @@ auto fibonacci_search(const std::vector<T> &v, const T &value) -> int
5151 while (low <= high) { // 当最小下标小于等于最大下标时
5252 int mid = low + fibonacci[k - 1 ] - 1 ; // 取黄金分割点
5353 if (mid >= v.size ()) { // 如果黄金分割点大于等于数组长度
54- mid = v.size () - 1 ; // 就将黄金分割点设置为数组最后一个元素的下标
54+ mid = v.size () - 1 ; // 就将黄金分割点设置为数组最后一个元素的下标
5555 }
56- if (v[mid] == value) { // 如果中间元素等于要查找的元素,就返回下标
56+ if (v[mid] == value) { // 如果中间元素等于要查找的元素,就返回下标
5757 return mid;
5858 } else if (v[mid] < value) { // 如果中间元素小于要查找的元素,就在右半部分查找
5959 low = mid + 1 ;
@@ -96,19 +96,19 @@ auto linear_index_search(const std::vector<T> &v, const T &value) -> int
9696template <typename T>
9797auto kmp_search (const std::vector<T> &v, const std::vector<T> &pattern) -> int
9898{
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数组
103103 while (k > -1 && pattern[k + 1 ] != pattern[i]) { // 如果k大于-1且下一个元素不等于当前元素
104104 k = next[k];
105105 }
106106 if (pattern[k + 1 ] == pattern[i]) { // 如果下一个元素等于当前元素
107107 ++k;
108108 }
109- next[i] = k; // 将k赋值给next数组的当前元素
109+ next[i] = k; // 将k赋值给next数组的当前元素
110110 }
111- k = -1 ; // next数组的下标
111+ k = -1 ; // next数组的下标
112112 for (int i = 0 ; i < v.size (); ++i) {
113113 while (k > -1 && pattern[k + 1 ] != v[i]) { // 如果k大于-1且下一个元素不等于当前元素
114114 k = next[k];
@@ -146,7 +146,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
146146 bc[pattern[i]] = i;
147147 }
148148
149- std::vector<int > suffix (pattern.size (), -1 ); // 好后缀
149+ std::vector<int > suffix (pattern.size (), -1 ); // 好后缀
150150 std::vector<bool > prefix (pattern.size (), false ); // 好后缀的前缀子串是否在模式串的前缀子串中存在
151151 for (int i = 0 ; i < pattern.size () - 1 ; ++i) {
152152 int j = i;
@@ -161,7 +161,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
161161 }
162162 }
163163 int i = 0 ;
164- while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
164+ while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
165165 int j = pattern.size () - 1 ;
166166 while (j >= 0 && v[i + j] == pattern[j]) { // 从后往前比较
167167 --j;
@@ -171,7 +171,7 @@ auto bm_search(const std::vector<T> &v, const std::vector<T> &pattern) -> int
171171 }
172172 i += std::max (move_by_suffix (j, suffix, prefix), j - bc[v[i + j]]); // 将模式串向后移动
173173 }
174- return -1 ; // not found
174+ return -1 ; // not found
175175}
176176
177177// Sunday查找
@@ -183,7 +183,7 @@ auto sunday_search(const std::vector<T> &v, const std::vector<T> &pattern) -> in
183183 bc[pattern[i]] = i;
184184 }
185185 int i = 0 ;
186- while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
186+ while (i <= v.size () - pattern.size ()) { // 从头到尾遍历
187187 int j = 0 ;
188188 while (j < pattern.size () && v[i + j] == pattern[j]) { // 从前往后比较
189189 ++j;
@@ -196,7 +196,7 @@ auto sunday_search(const std::vector<T> &v, const std::vector<T> &pattern) -> in
196196 }
197197 i += pattern.size () - bc[v[i + pattern.size ()]]; // 将模式串向后移动
198198 }
199- return -1 ; // not found
199+ return -1 ; // not found
200200}
201201
202202// Rabin-Karp查找
0 commit comments