环境:JDK1.8
在JDK1.8中我点开了String的indexOf(String str)发现并没有使用KMP算法。那么为什么JDK不使用KMP算法呢?
1)大部分比较是短字符串,普通算法的O(nm)已经够用,而KMP算法在较短字符串里是O(n+m)。KMP算法的常数因子会拖慢算法。
2) 因为是公共库函数,需要考虑各种情况的性能。可能你也不想突然的内存开销。
3)也许未来的JDK版本会像Hashmap里的红黑树一样增加特定情况的算法优化。
环境:JDK1.8
在JDK1.8中我点开了String的indexOf(String str)发现并没有使用KMP算法。那么为什么JDK不使用KMP算法呢?
1)大部分比较是短字符串,普通算法的O(nm)已经够用,而KMP算法在较短字符串里是O(n+m)。KMP算法的常数因子会拖慢算法。
2) 因为是公共库函数,需要考虑各种情况的性能。可能你也不想突然的内存开销。
3)也许未来的JDK版本会像Hashmap里的红黑树一样增加特定情况的算法优化。