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++实现相关推荐
- 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)
#笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...
- DVWA学习(三)Brute Force(暴力破解)
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相 ...
- JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
JavaScript实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码) bfMaximumSubarray.js完整源代码 bfMaximumSuba ...
- 吴昊品游戏核心算法 Round 7 —— 熄灯游戏AI(有人性的Brute Force)(POJ 2811)
暴力分为两种,一种属于毫无人性的暴力,一种属于有人性 的暴力.前面一种就不说了,对于后面一种情况,我们可以只对其中的部分问题进行枚举,而通过这些子问题而推导到整个的问题中.我称之为有人性的Brute ...
- Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)
今天介绍两种基础的字符串匹配算法,当然核心还是熟悉一下Go的语法,巩固一下基础知识 BF(Brute Force) RK(Rabin Karp) 源字符串:src, 目标字符串:dest: 确认des ...
- Unit 2: Password Cracking 2.1 Password Cracking Brute Force Attacks
>> In a future unit, we'll learn how attackers can get possession of a database containing has ...
- 网络安全入门之 Burp Suite 暴力破解 DVWA Brute Force Low
文章目录 1. 背景 2. 准备工作 2.1. 靶场环境 2.2. 安装破解工具 3. 破解过程 3.1. 代理请求 3.2. 拦截请求 3.3. 填装弹药 3.4. 设置岗哨 3.5. 开始攻击 4 ...
- 新手指南:DVWA-1.9全级别教程之Brute Force
目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk/),而网上的教程大多停留在旧版本,且没有针对DVWA high级别的教程,因此萌发了一个撰写新手教程的想法,错误的 ...
- Brute force and exhaustive search
Brute force and exhaustive search(蛮力和彻底搜索) Brute force is a straightforward approach to solving a pr ...
最新文章
- 用 Flask 来写个轻博客 (19) — 以 Bcrypt 密文存储账户信息与实现用户登陆表单
- Cocos Creator JS 时间戳日期转换
- Codeforses 185 A Plant 思维 规律
- ENVI修复图像坏点扩展补丁
- 1^2+2^2+……+n^2的公式证明
- 双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...
- nodejs的一些玩法
- 【C++入门】C++类和对象
- C++11 右值引用与移动语义
- NLP ---文本情感分析
- 第3章 数据库操作SQL语言---数据库原理及应用
- FlashCC导入使用greensock(TweenLite)包
- 共享打印机服务器系统64位,win7系统64位和winXP 32位共享网络打印机的操作方法...
- CDA Day1-3 Excel公式常用函数跟课学习
- linux下低格u盘,拯救U盘,一个靠谱的强制低格的工具
- 【有利可图网】PS实战系列:PS制作人像印章效果
- 夜神模拟器无法安装Charles证书
- html 编辑cad图,cad制图是什么
- 计算机公式怎么计算合计,excel表格函数数据求和公式是什么-Excel中怎么用公式计算合计...
- Python百日百行代码挑战-day7,游戏模块学习,tkinter