web-dev-qa-db-ja.com

JavaのString.contains()のBig-Oとは何ですか?

私はプロジェクトに取り組んでおり、実行時間を最適化する必要があります。 String.contains()ランタイムは、O [logN)であるTreeSet.contains()と同じですか?

私が尋ねている理由は、TreeMap<String, TreeSet<Song>>、曲には歌詞の文字列が含まれます。効率に応じて、歌詞内に歌詞のセットを含め、文字列ではなくその上で検索を実行することを検討しています。

27
Jason

最もよく知られているアルゴリズムの1つは、 Boyer-Moore 文字列検索アルゴリズムです。これは、O(n))ですが、最良の場合は線形以下のパフォーマンスを提供できます。

Javaで使用されるアルゴリズムは、ダウンロードする実装によって異なります。たとえば、OpenJDKは、O(nm)および線形で実行される単純なアルゴリズムを使用しているようです最良の場合のパフォーマンス。1770-1806行目 ここ を参照してください。

26
Mark Byers

TreeMapの代わりにTrieを使用することもできます(ただし、Javaには組み込みのTrie実装はありません)。

0
dty