Форум программистов, компьютерный форум CyberForum.ru

Усовершенствовать алгоритм Рабина-Карпа, чтобы он искал символьную подматрицу в символьной матрице - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр http://www.cyberforum.ru/cpp-beginners/thread1252585.html
Дан массив из N целых чисел, где N<=16, каждое число в диапазоне от –32000 до 32000. Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр. Облазил весь форум, нашёл таких же 4 темы и не где ответа нет.
C++ Не меняются местами значения переменных Доброго времени суток. Ни в какую не хочет менять местами значения двух переменных. Часть моего кода: if (c == 'Y' || c == 'y') { buf = a; a = b; b = buf; http://www.cyberforum.ru/cpp-beginners/thread1252576.html
C++ По заданным параметрам ввести граф используя заданные правила
По заданным параметрам a,b,c,d ввести граф(список рёбер) использующие следующие правила h={14,если d mod 3=0; 13,если d mod 3=1; 15,если d mod 3=2;} Программа вводит вершины a,b,c,d и получает n(список вершин) и количество рёбер. (i,j) Э x a*i+b*j/c mod d=<1 Вот что сам сделал точнее попытался сделать. #include "stdafx.h" #include <iostream> #include <stdlib.h>
Как вывести мнимую единицу? C++
Писал программу, решающую квадратное уравнение и столкнулся с проблемой вывода мнимой единицы, кое-как выкрутился, но возможно ли сделать это проще и функциональнее? #include <iostream> #include <cmath> int main() { // insert code here... setlocale(LC_ALL, "rus"); using namespace std; double a,b,c,x1=0,x2=0,D=0;
C++ Часы с таймером - найти ошибку в коде, из-за которой не срабатывает таймер http://www.cyberforum.ru/cpp-beginners/thread1252563.html
Не могу разобраться где ошибка и почему не срабатывает таймер,помогите пожалуйста :) #include <stdio.h> #include <conio.h> #include <windows.h> #include <ctime> #include <time.h> //using namespace std; int main(void) {
C++ Создание часов с таймером отключения через 3 минуты(не могу разобраться где ошибка и как исправить) Не могу разобраться где ошибка и почему не срабатывает таймер,помогите пожалуйста :) #include <stdio.h> #include <conio.h> #include <windows.h> #include <ctime> #include <time.h> //using namespace std; int main(void) { подробнее

Показать сообщение отдельно
taeas1995
6 / 2 / 0
Регистрация: 19.01.2012
Сообщений: 157

Усовершенствовать алгоритм Рабина-Карпа, чтобы он искал символьную подматрицу в символьной матрице - C++

07.09.2014, 22:56. Просмотров 517. Ответов 8
Метки (Все метки)

У меня есть этот алгоритм. Кто знает, как усовершенствовать его, чтобы он искал символьную подматрицу m * m в символьной матрицы n * n, при котором m <= n?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include<iostream>
#include<cstring>
#include<cstdio>
#define d 256                
using namespace std;
void search(char *txt , char *pat , int q){
int m=strlen(pat);
int n=strlen(txt);
 
int i,j;
int p=0;                 
int t=0;               
int h=1;                      
 
 
for(i=0;i<m-1;i++){
h=(d*h)%q;
}
 
 
 
for(i=0;i<m;i++){
p=(d*p+pat[i])%q;
t=(d*t+txt[i])%q;
}
 
for(i=0;i<=n-m;i++){
 
 
 
if(t==p){
for(j=0;j<m;j++){
if(txt[i+j]!=pat[j]) {
break;
}
}
if(j==m) cout<<"Stroka znaidena v ryadku: "<<i<<endl;
}
 
 
if(i<n-m){
t = (d*(t - txt[i]*h) + txt[i+m])%q;
 
 
if(t < 0)
t = (t + q); 
}
}
}
 
int main(){
char a[500],b[500];
cout<<"Vvedit text:"<<endl;
cin.getline(a,500);
cout<<"Vvedit stroku dlya poshuku:"<<endl;
cin.getline(b,500);
int q=7;                     
search(a,b,q);  
system("pause");
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru