算法导论-第32章-字符串匹配:Rabin-Karp算法C++实现
来源:互联网 发布:阿尔法狗软件 编辑:程序博客网 时间:2024/05/19 16:47
#include <iostream>#include <vector>#include <algorithm>using namespace std;int char_to_int(char c) {return c - '0';}int module(int x, int q) {if (x < 0) {return x % q + q;}else {return x % q;}}bool is_forge(char* P1, char* P2, int m) {for (int i = 0; i < m; ++i) {if (P1[i] != P2[i]) {return true;}}return false;}void rabin_karp(char* T, char* P, int d, int q, int m, int n) {int x = pow(d, m - 1);int h = module(x, q);int p{};int* t = new int[n - m] {};for (int i = 0; i < m; ++i) {p = module(d * p + char_to_int(P[i]), q);t[0] = module(d * t[0] + char_to_int(T[i]), q);}for (int s = 0; s < n - m - 1; ++s) {if (p == t[s]) {if (!is_forge(P, T + s, m)) {cout << "Pattern occurs with shift " << s - 1 << endl;}}else {t[s + 1] = module(d * (t[s] - char_to_int(T[s]) * h) + char_to_int(T[s + m]), q);}}delete[]t;}int main(int argc, char* argv[]) {vector<char> v{};int d{ 10 };cout << "please enter the radix : " << endl;cin >> d;int q{};cout << "please enter the mod number (prime better) : " << endl;cin >> q;char element{};cout << "please enter the pattern (end with 'a') :" << endl;while (cin >> element) {if (element != 'a') {v.push_back(element);}else {break;}}int m = v.size();char* P = new char[m] {};int index{};for_each(v.begin(), v.end(), [=](char x)mutable{ P[index++] = x; });v.clear();cout << "please enter the text (end with 'a') :" << endl;while (cin >> element) {if (element != 'a') {v.push_back(element);}else {break;}}int n = v.size();char* T = new char[n] {};index = 0;for_each(v.begin(), v.end(), [=](char x)mutable{ T[index++] = x; });rabin_karp(T, P, d, q, m, n);delete[]T;delete[]P;return 0;}
0 0
- 算法导论-第32章-字符串匹配:Rabin-Karp算法C++实现
- Java实现算法导论中Rabin-Karp字符串匹配算法
- Rabin-Karp字符串匹配算法c源代码
- Rabin-Karp字符串匹配算法
- 字符串匹配--Karp-Rabin算法
- Rabin-Karp字符串匹配算法
- Rabin-Karp 字符串匹配算法
- 第32章:字符串匹配问题: 朴素算法,Rabin-Karp算法
- 字符串匹配算法之Rabin-Karp算法
- 字符串匹配算法 -- Rabin-Karp 算法
- 字符串匹配之Rabin-Karp算法
- 字符串匹配之Rabin-Karp 算法
- 字符串算法-Rabin-Karp
- Rabin-Karp指纹字符串查找算法(c++)
- 面试算法之字符串匹配算法,Rabin-Karp算法详解
- 白话分析字符串匹配算法——Rabin-Karp算法
- 算法——字符串匹配之Rabin-Karp算法
- Rabin-Karp字符串查找算法
- DES加密和解密实用版
- AE栅格分级渲染
- maven资源库
- 对CS106B课程(抽象编程)的笔记与思考1
- git的基本使用
- 算法导论-第32章-字符串匹配:Rabin-Karp算法C++实现
- C++ static、const和static const 以及它们的初始化
- Qt 源码之元对象(QMetaObject)
- 二叉树的建立
- Cannot find or open the PDB file
- 虚拟内存,MMU/TLB,PAGE,Cache
- 利用session+application+cookie 实现单态登陆,且解决浏览器意外关闭的问题
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该...
- Android 四大组件详解