Я выполнил поиск подстроки в строке, используя вариант алгоритма Бойера-Мура. У меня поиск плохого персонажа с усилением, т.е. я сохраняю все позиции в парсере для каждого символа. Я делаю это для последующего смещения в сравнении. У меня также есть поиск хорошего суффикса с помощью 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
Проблема, связанная с алгоритмом Бойера Мура ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему моя триангуляция Делоне с использованием алгоритма Бойера-Ватсона не работает?
Anonymous » » в форуме C++ - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Помогите с жадным алгоритмом распределения помидоров в кастрюлях [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-