日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Brute Force算法介绍及C++实现

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。