【发布时间】:2021-03-02 02:55:30
【问题描述】:
最近我一直在研究 DNA 序列匹配算法及其比较。为了同样的目的,我已经实现了标准的 Naive、KMP 和 Robin-Karp 算法。
在 Java 中执行后(8Gb RAM,Intel I5 处理器,1GB 硬盘),我注意到 naive 的运行速度比 KMP 和 RK 快。
但是当我知道对于多达 100,000 个字符和 4 个字符的模式的 DNA 序列后,naive(6ms) 仍然优于 KMP(11ms) 和 RK(17ms)。我很困惑为什么会发生这种情况,这怎么可能?
naive 的工作速度真的那么快还是 JVM 抛出了一些随机垃圾值,还是我将 Java 的时间实例放在了错误的位置?
非常感谢任何帮助。
【问题讨论】:
-
您如何衡量绩效? (但话虽如此:naive 更快并非不可信。Java 的内置
String.indexOf使用了 naive 算法,因为它在实践中大部分时间效果更好。) -
性能是使用 System.currentMilliSeconds() 测量的。使用标准 charAt() 函数匹配字符串的代码。
-
stackoverflow.com/q/504103/869736 解释了这种衡量性能的方式如何导致非常不准确的结果。
标签: java string algorithm pattern-matching