Временная сложность поиска строки в неупорядоченном наборе строк - PullRequest
0 голосов
/ 18 апреля 2020

http://www.cplusplus.com/reference/unordered_set/unordered_set/find/

Временная сложность поиска в unordered_set была задана постоянной в среднем для unordered_set. Если у меня есть unordered_set строк, то какова будет временная сложность поиска строки в этом наборе? Это будет константа или O (длина строки)?

1 Ответ

1 голос
/ 18 апреля 2020

std::unordered_set реализован в виде таблицы ha sh. Его find метод имеет среднюю сложность O(1) и наихудшую сложность O(set.size()) сравнений ключей, как указано [tab: container.ha sh .req] .


По умолчанию std::unordered_set<std::string> использует operator== для сравнения ключей, поэтому каждое сравнение ключей выполняется в O(str.size()), как указано в [string.view.ops] (operator==(const std::string&, const std::string&) определяется как эквивалентный std::string_view(str1) == std::string_view(str2), который определяется как эквивалентный std::string_view(str1).compare(std::string_view(str2) == 0).

Для std::unordered_set<std::string> контейнер должен вычислить га sh строки для поиска. По умолчанию для этого используется std::hash<std::string>. Стандарт не устанавливает никаких требований к сложности для std::hash<std::string>, но, скорее всего, O(str.size()).

...