Эффективная функция прокатки ha sh - PullRequest
0 голосов
/ 24 января 2020

На основе: { ссылка }
Я реализовал следующее:

for (...)
{
    unsigned long long RollingHash = 0;
    int k = LineSize - 1;

    for (size_t j = 0; j < LineSize; ++j)
    {
        if (condition)
        {
            RollingHash += (Line[j] * pow(257, k)) % MOD;
            RollingHash %= MOD;
            k -= 1;
        }
    }
}

Однако у меня есть 2 проблемы:

  1. Кажется, это не очень эффективно / быстро
  2. Добавление / удаление значений для начала или окончания по ссылке, похоже, не работает

    unsigned long long  h = (Line[0] * pow(257, Line.size()))%MOD;
    old = ((old * 257) + 'h' - h) % MOD;
    

Есть идеи?

...