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

Реализация алгоритма Рабина-Карпа для двух однонаправленных линейных списков - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти в списке первый подходящий по размеру узел http://www.cyberforum.ru/cpp-beginners/thread620812.html
Дан линейный односвязный список свободных блоков памяти. Узел-адрес начала блока, размер блока. На входе подается запрос на блок памяти определенного размера. Найти в списке первый подходящий по размеру узел, произвести необходимые изменения в списке и выдать сообщение если таких узлов нет.
C++ Программирование сетевой карты Здравствуйте! Подскажите пожалуйста где посмотреть полное описание Broadcom 802.11n. Регистры, их назначение и адреса. http://www.cyberforum.ru/cpp-beginners/thread620800.html
C++ Алгоритм Рабина-Карпа для нахождения кол-ва вхождений подстроки в строку
У меня был текстовый файл, в котором элементами были числа, записанные через запятую. Например: 5421,777 254,888 11,82 Надо было найти кол-во вхождений первой строки в остальные. По заданию также нужно было записать эти самые строки в список, элементами которого являются вот эти вот числа, записанные через запятую. Я создал эти два списка. В первом как элементы записаны числа первой строки,...
Операторы "видимости" C++
Объясните плиз нубу, что значат в с++ операторы: ->, ::, . ? В любой литературе этот вопрос упускают, говоря что это "оператор видимости".
C++ printf не выводит значение строки http://www.cyberforum.ru/cpp-beginners/thread620722.html
заместо значения выводит (null) #include <stdio.h> #include <string> #include <iostream> int main() { std::string stry("dDSGSfSfSGSDGdsGfHSDSDdSDGSD"); for(std::string::iterator it=stry.begin(); it != stry.end();++it) {
C++ Проинициализировать класс массивов который имеет конструктор по умолчанию Или я не знаю как правельно спрасить у гуглы,или это не возможно,кто знает как можно реализовать такое class a { int q,w,e; a(int b) { q = w = e = b; } }; подробнее

Показать сообщение отдельно
Uz
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 22
09.07.2012, 17:39  [ТС]     Реализация алгоритма Рабина-Карпа для двух однонаправленных линейных списков
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
string s, t; // входные данные
 
// считаем все степени p
const int p = 31;
vector<long long> p_pow (max (s.length(), t.length()));
p_pow[0] = 1;
for (size_t i=1; i<p_pow.size(); ++i)
    p_pow[i] = p_pow[i-1] * p;
 
// считаем хэши от всех префиксов строки T
vector<long long> h (t.length());
for (size_t i=0; i<t.length(); ++i)
{
    h[i] = (t[i] - 'a' + 1) * p_pow[i];
    if (i)  h[i] += h[i-1];
}
 
// считаем хэш от строки S
long long h_s = 0;
for (size_t i=0; i<s.length(); ++i)
    h_s += (s[i] - 'a' + 1) * p_pow[i];
 
// перебираем все подстроки T длины |S| и сравниваем их
for (size_t i = 0; i + s.length() - 1 < t.length(); ++i)
{
    long long cur_h = h[i+s.length()-1];
    if (i)  cur_h -= h[i-1];
    // приводим хэши к одной степени и сравниваем
    if (cur_h == h_s * p_pow[i])
        cout << i << ' ';
}
Как вот то же самое, только для двух однонаправленных списков реализовать? Помогите, пожалуйста.
 
Текущее время: 00:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru