gpt4 book ai didi

java - jdk中String类的indexOf方法是使用BF实现的,为什么不使用KMP或BM呢?

转载 作者:行者123 更新时间:2023-12-01 13:07:38 37 4
gpt4 key购买 nike

jdk中String类的indexOf方法是使用BF实现的,为什么不使用KMP或BM呢?下面是jdk如何实现这个功能。它使用BF来解决。为什么不使用更有效的方法,例如KMP、BM?

   static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
if (fromIndex >= sourceCount) {
return (targetCount == 0 ? sourceCount : -1);
}
if (fromIndex < 0) {
fromIndex = 0;
}
if (targetCount == 0) {
return fromIndex;
}

char first = target[targetOffset];
int max = sourceOffset + (sourceCount - targetCount);

for (int i = sourceOffset + fromIndex; i <= max; i++) {
/* Look for first character. */
if (source[i] != first) {
while (++i <= max && source[i] != first);
}

/* Found first character, now look at the rest of v2 */
if (i <= max) {
int j = i + 1;
int end = j + targetCount - 1;
for (int k = targetOffset + 1; j < end && source[j] ==
target[k]; j++, k++);

if (j == end) {
/* Found whole string. */
return i - sourceOffset;
}
}
}
return -1;
}

最佳答案

why not use a more efficientive method, such as KMP, BM ?

更先进的字符串搜索算法的设置时间并不简单。如果您正在进行一次涉及不太大目标字符串的字符串搜索,您会发现您在设置上花费的时间比在字符串搜索期间节省的时间还要多。

即使只是测试目标和搜索字符串的长度也无法给出是否“值得”使用高级算法的良好答案。从(例如)Boyer-Moore 获得的实际加速取决于字符串的值;即字符模式。

Java 实现者采取了务实的方法。他们无法保证高级算法能够提供更好的性能,无论是平均性能还是特定输入性能。因此,他们将其留给程序员来处理......在必要时。

<小时/>

FWIW,我不知道有任何其他主流编程语言在其运行时库的标准“字符串查找”功能中使用 BM 等。

关于java - jdk中String类的indexOf方法是使用BF实现的,为什么不使用KMP或BM呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146845/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com