Применяет ли контейнер «map» C ++ алгоритм Рабина-Карпа для последовательных подстрок строки? - PullRequest
1 голос
/ 20 апреля 2019

Я работаю над методом обнаружения кодового плагиата.Мне нужно использовать алгоритм fingerprint для этого метода.Алгоритм отпечатка пальца помещает все подстроки исходного кода в хеш-таблицу.(Все подстроки имеют одинаковую длину.) В целях оптимизации рекомендуется использовать алгоритм Рабина-Карпа при помещении отпечатков пальцев в хеш-таблицу.

Например;для строки = abcdef и для длины = 5 мы должны поместить abcde и bcdef подстроки в хеш-таблицу.Поскольку для хеширования строк необходимо применять математическую операцию для каждого символа строки, это будет дорогостоящим для многочисленных подстрок.

Алгоритм Рабина-Карпа использует преимущество последовательностей подстрок.Он вычисляет значение хэша первого отпечатка.А для остальных подстрок он использует предыдущую подстроку.

Применяет ли контейнер «map» C ++ автоматически этот алгоритм для последовательных подстрок на фоне?Или я должен написать свою собственную хеш-библиотеку?

1 Ответ

2 голосов
/ 20 апреля 2019

Конструктор для std :: unordered_map http://www.cplusplus.com/reference/unordered_map/unordered_map/ принимает хешер.

Из онлайн-документов по std :: hash (https://en.cppreference.com/w/cpp/utility/hash):

Фактический хешфункции зависят от реализации и не должны отвечать никаким другим критериям качества, кроме указанных выше.

...