Проблема, связанная с алгоритмом Бойера МураC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проблема, связанная с алгоритмом Бойера Мура

Сообщение Anonymous »

Я выполнил поиск подстроки в строке, используя вариант алгоритма Бойера-Мура. У меня поиск плохого персонажа с усилением, т.е. я сохраняю все позиции в парсере для каждого символа. Я делаю это для последующего смещения в сравнении. У меня также есть поиск хорошего суффикса с помощью Z-функции, а затем вычисление позиций, в которых повторяющаяся подстрока заканчивается в моей строке. И в итоге я просто нахожу максимальный шаг, сравнивая полученные 2 значения и 1 (для безопасности). Но мой кот где-то не работает, а я не могу понять где, подскажите пожалуйста.
int main()
{

//wor - text
//pat - string which i find
std::string alp = "abcdefghijklmnopqrstuvwxyz";

std::vector PPS(26);

for (int i = 0; i < pat.size(); i++)
{
ll pos = alp.find(pat);
PPS[pos].push_back(i);
}

for (int i = 0; i < 26; i++)
{
PPS.push_back(1e9);
}

std::string rev_pat = pat;

reverse(rev_pat.begin(), rev_pat.end());

std::vector Nj = z_func(rev_pat);

reverse(Nj.begin(), Nj.end());

std::vector Li(pat.size(), 0);

for (int i = 0; i < pat.size(); i++)
{
if (Nj != 0)
{
Li[pat.size() - Nj] = i - Nj + 1;
}
}

ll i = pat.size() - 1, nach = pat.size() - 1, kol = 0, start;
bool f = true;

while (nach < ll(wor.size()))
{
i = nach;
start = i;
for (int j = pat.size() - 1; j >= 0; j--)
{
if (pat[j] != wor)
{
ll pos = alp.find(wor);
ll zn = 1e9, zn2;
for (int t = 0; t < PPS[pos].size(); t++)
{
if (abs(j - PPS[pos][t]) < zn)
{
zn = abs(j - PPS[pos][t]);
}
}
//auto it = std::upper_bound(PPS[pos].begin(), PPS[pos].end(), pat.size() - j - 1);
//zn = *it;

if (zn >= 1e8)
{
zn = j;
}

if (nach == i)
{
zn2 = 0;
}
else
{
zn2 = Li[j];
}

nach += max(zn, zn2, 1LL);
f = false;
break;
}
i--;
}
if (f)
{
cout

Подробнее здесь: https://stackoverflow.com/questions/784 ... -algorithm
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему моя триангуляция Делоне с использованием алгоритма Бойера-Ватсона не работает?
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Я не могу найти модуль Мура в автоматическом
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Помогите с жадным алгоритмом распределения помидоров в кастрюлях [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Почему мой итератор не работает с алгоритмом std::copy
    Anonymous » » в форуме C++
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с алгоритмом быстрой сортировки
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»