日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

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