Brute Force算法介绍及C++实现
生活随笔
收集整理的這篇文章主要介紹了
Brute Force算法介绍及C++实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
字符串的模式匹配操作可以通過Brute Force算法來實現。字符串匹配操作即是查看S串(目標串或主串)中是否含有T串(模式串或子串),如果在主串中查找到了子串,則模式匹配成功,返回模式串中的第一個字符在主串中的位置;如果未找到,則模式匹配失敗,返回-1。
Brute Force算法,即暴風算法,是簡單的模式匹配算法,其思想是將目標串S的第一個字符與模式串T的第一個字符進行匹配,若相等,則繼續比較S的第二個字符和T的第二個字符;若不相等,則比較S的第二個字符和T的第一個字符,依次比較下去,直到得出最后的匹配結果。Brute Force算法簡單,易于實現;進行了回溯,效率不高。KMP算法是Brute Force的一種改進算法。
以下是測試code:
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include "common.hpp"// ============================ Brute Force ================================
typedef std::tuple<int, int> brute_force_result; // <status, pos>int brute_force(const std::string& str, const std::string& sub, brute_force_result& result)
{std::get<0>(result) = -1;std::get<1>(result) = -1;int length_str = str.length(), length_sub = sub.length();if (length_str < length_sub) return 0;for (int i = 0; i < length_str - length_sub + 1; ++i) {int count{ 0 };for (int j = 0; j < length_sub; ++j) {const char& c1 = str.at(i + count);const char& c2 = sub.at(j);if (c1 == c2) ++count;else break;}if (count == length_sub) {std::get<0>(result) = 0;std::get<1>(result) = i;}}return 0;
}int test_brute_force_string_match()
{const std::string str{ "abcdABCD EFaadfk32!@#34flasf dafe" };const std::vector<std::string> sub{ "abcde", "ABCD EF", "fe", "!@#", "asf dafe", "afea"};for (const auto& val : sub) {fbc::brute_force_result result;fbc::brute_force(str, val, result);fprintf(stdout, "string match result: status: %d, pos: %d\n",std::get<0>(result), std::get<1>(result));}return 0;
}
執行結果如下:
GitHub:??https://github.com/fengbingchun/NN_Test?
總結
以上是生活随笔為你收集整理的Brute Force算法介绍及C++实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV3.3中 K-最近邻法(KN
- 下一篇: Ubuntu14.04上安装Tensor