Algorithm KMP算法在最佳情况下的最小比较次数是多少?

Algorithm KMP算法在最佳情况下的最小比较次数是多少?,algorithm,knuth-morris-pratt,Algorithm,Knuth Morris Pratt,KMP算法在最佳情况下的最小比较次数是多少?当您要查找的字符串正好位于文本字符串的开头时,会出现最佳情况。在这种情况下,如果要在n字母字符串中查找k字母字符串,则比较的最佳案例数应为k 您还必须考虑基于k字母单词计算表的开销,这将允许您知道如果找不到匹配项,应跳过哪些字母。在任何情况下,这种构造都是在O(k)中完成的。最好的情况是,您要查找的字符串正好位于文本字符串的开头。在这种情况下,如果要在n字母字符串中查找k字母字符串,则比较的最佳案例数应为k 您还必须考虑基于k字母单词计算表的开销,这将

KMP算法在最佳情况下的最小比较次数是多少?

当您要查找的字符串正好位于文本字符串的开头时,会出现最佳情况。在这种情况下,如果要在
n
字母字符串中查找
k
字母字符串,则比较的最佳案例数应为
k


您还必须考虑基于
k
字母单词计算表的开销,这将允许您知道如果找不到匹配项,应跳过哪些字母。在任何情况下,这种构造都是在
O(k)

中完成的。最好的情况是,您要查找的字符串正好位于文本字符串的开头。在这种情况下,如果要在
n
字母字符串中查找
k
字母字符串,则比较的最佳案例数应为
k


您还必须考虑基于
k
字母单词计算表的开销,这将允许您知道如果找不到匹配项,应跳过哪些字母。在任何情况下,这种构造都是在
O(k)

中完成的。好吧,在最佳情况下,比较的最小次数是字符串的长度,这意味着您第一次尝试就找到了匹配项。算法是O(n),这意味着上限或最坏情况将进行n次比较,其中n是正在搜索的字符串的长度。维基很不错。

好吧,在最佳情况下,比较的最小次数是字符串的长度,这意味着您第一次尝试就找到了匹配项。算法是O(n),这意味着上限或最坏情况将进行n次比较,其中n是正在搜索的字符串的长度。维基很不错。

0,如果正在搜索的字符串为空。没有比这更好的方案了。它不是常数,它的O(n),其中n是文本的长度,这里的文本长度是0,所以n=0。在这种情况下,它显然是0,但O(n)与n不同。例如,n+k(对于任何常数k)是O(n)。O(n)只是关于极限的陈述,而不是关于n的特定值的陈述。在任何情况下,KMP肯定是O(n),但在大多数情况下,如果搜索的字符串为空,则乘数(用于比较次数)会大大小于1.0.0。没有比这更好的方案了。它不是常数,它的O(n),其中n是文本的长度,这里的文本长度是0,所以n=0。在这种情况下,它显然是0,但O(n)与n不同。例如,n+k(对于任何常数k)是O(n)。O(n)只是关于极限的陈述,而不是关于n的特定值的陈述。在任何情况下,KMP肯定是O(n),但在大多数情况下,乘数(用于比较的数量)相当小,小于1.0。比如,我有一个文本和模式,如:T=xxabc P=xx在本例中,字符串长度为5,模式长度为2,而总比较数为4。这是最好的情况吗,因为它看起来不像O(m),四个比较在哪里?将T[0]与P[0]进行比较,然后将T[1]与P[1]进行比较,就完成了。比方说,我有一个文本和模式,如:T=xxabc P=xx在本例中,字符串长度为5,模式长度为2,而总比较数为4。这是最好的情况吗,因为它看起来不像O(m),四个比较在哪里?你比较T[0]和P[0],然后T[1]和P[1]就完成了。我从你的回答中得到的是:如果T是一个字符串,P是一个模式,其中| T |=n,| P |=m,如果总移位数是S,那么最多移位数是m-1,需要的最小移位数是1,如果总比较数是n,那么总移位数将是O(n+S),因为最小移位数是1,而不是O(n)。例如,如果T=xxa,P=xx,则在第一次尝试执行移位1算法停止后,总比较将为3(2表示'xx',1表示不匹配)……如果我错了,请更正我。在您的示例中不会出现不匹配,因为P在初始对齐时只有两个字符,算法首先报告“xx”匹配,并执行1个字符的移位,以检查是否有其他匹配。移位后,将比较T[3]和P[2],这将是不匹配,算法在此停止。显然,它以O(n)为界,其中n是文本的长度。通常算法返回第一个匹配,所以我不明白为什么你说它检查t[3]算法应该报告文本中所有出现的模式,如果它在报告第一个匹配后停止,我从你的回答中得到的是:如果T是一个字符串,P是一个模式,其中| T |=n,| P |=m,如果总移位数为S,那么最多移位数为m-1,所需的最小移位数为1,如果总比较数为n,那么总移位数为O(n+S),因为最小位移是1,所以它将是O(n)。例如,如果T=xxa,P=xx,则在第一次尝试执行移位1算法停止后,总比较将为3(2表示'xx',1表示不匹配)……如果我错了,请更正我。在您的示例中不会出现不匹配,因为P在初始对齐时只有两个字符,算法首先报告“xx”匹配,并执行1个字符的移位,以检查是否有其他匹配。移位后,将比较T[3]和P[2],这将是不匹配,算法在此停止。显然,它是以O(n)为界的,其中n是文本的长度。通常算法返回第一个匹配,所以我不明白为什么你说它检查t[3]算法应该报告文本中所有出现的模式,如果它在报告第一个匹配后停止,那么它肯定会错过模式的所有后续出现。