Java 中 String.contains() 的 Big-O 是什么?
我正在处理一个项目,需要优化运行时间。运行时是否与 O(logN)相同?String.contains()
TreeSet.contains()
我问的原因是我正在构建一个,其中歌曲包含一串歌词。根据效率,我正在考虑在歌曲中包含一组歌词,并对其进行搜索而不是字符串。TreeMap<String, TreeSet<Song>>
我正在处理一个项目,需要优化运行时间。运行时是否与 O(logN)相同?String.contains()
TreeSet.contains()
我问的原因是我正在构建一个,其中歌曲包含一串歌词。根据效率,我正在考虑在歌曲中包含一组歌词,并对其进行搜索而不是字符串。TreeMap<String, TreeSet<Song>>
最著名的算法之一是Boyer-Moore字符串搜索算法,它是O(n),尽管它可以在最佳情况下提供子线性性能。
Java 中使用哪种算法取决于您下载的实现。例如,OpenJDK似乎使用了一种天真的算法,该算法在O(nm)中运行,并且在最佳情况下以线性性能运行。请在此处查看第 1770-1806 行。
.contains()
绝对使用幼稚的方法,相当于时间的复杂性。O(nm)
O(nm)
O(n)
在与模式匹配相关的问题之一中,我使用了,并且它花了,而用替换该行将时间减少到..contains()
70 ms
patternSearch() //KMP search
14 ms