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

Молниеносное нахождение подстрок - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
25.08.2011, 20:21     Молниеносное нахождение подстрок #1
Воодится число тестов. Далее каждый тест содержит 2 строки. Подстроку и текст. Надо найти количество подстрок в тексте. Количество тестов неизвестно, но много. Длина подстроки 10000, а текста 1000000.
Вот мой код:
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
string str1;
string str2;
string str;
int i,n,m,q=0,t,k,a;
int *mas;
cin >> t;
while (t--)
{
 cin >> str2;
 cin >> str1;  
 n=str1.length();
 m=str2.length();
 mas=(int*)malloc((n+m+1)*sizeof(int));
 str=str2+'#'+str1; mas[0]=0;
 a=0; k=0; q=0;
 for(i=1; i<n+m+1; i++)
  {         
   while((k>0) && (str[k]!=str[i])) k=mas[k-1];
   if (str[k]==str[i]) k++;
   if (k==m) q++;
   mas[i]=k;
  }
 cout << q << endl;
}
return 0;
}
Медленно, кто-нибудь может ускорить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
26.08.2011, 15:16     Молниеносное нахождение подстрок #41
Может быть, это поможет?
Напишите свои аналоги функций strlen(), strcpy(), strcmp() и сравните с библиотечными.
Там строка проматывается кусками по несколько байт.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
26.08.2011, 15:30     Молниеносное нахождение подстрок #42
Цитата Сообщение от #pragma Посмотреть сообщение
Там строка проматывается кусками по несколько байт.
Выглядит как будто бы Вы предлагаете использовать брутфорс. Я думаю, здесь все же немного другой случай.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
26.08.2011, 16:46     Молниеносное нахождение подстрок #43
AvengerAlive, ваша задача с какого сайта?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.08.2011, 02:40     Молниеносное нахождение подстрок
Еще ссылки по теме:

C++ Количество подстрок в строке
Реализация алгоритма поиска подстрок чжу такаоки на c++ C++
C++ Выделить все вхождения подстрок, заключенных в скобки

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.08.2011, 02:40     Молниеносное нахождение подстрок #44
AvengerAlive,
ссылку на задачу можете дать?
Yandex
Объявления
27.08.2011, 02:40     Молниеносное нахождение подстрок
Ответ Создать тему
Опции темы

Текущее время: 02:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru