Подтвердить что ты не робот

Что такое Big-O из String.contains() в Java?

Я работаю над проектом и должен оптимизировать время работы. Является ли String.contains() время выполнения таким же, как TreeSet.contains(), которое является O (logN)?

Причина, по которой я спрашиваю, это создание TreeMap<String, TreeSet<Song>>, где Песни содержат строку текстов. В зависимости от эффективности, я рассматриваю возможность включения набора лирических слов внутри песни и выполнения поисков на этом, а не на String.

4b9b3361

Ответ 1

Одним из наиболее известных алгоритмов является поисковый алгоритм Boyer-Moore, который является O (n), хотя он может дать сублинейную производительность в лучший случай.

Какой алгоритм используется в Java, зависит от того, какую загрузку вы загружаете. Похоже, что OpenJDK использует наивный алгоритм, который работает в O (nm) и линейной производительности в лучшем случае. См. Строки 1770-1806 здесь.

Ответ 2

Вы также можете попробовать использовать Trie вместо TreeMap (хотя Java не имеет встроенной реализации Trie)