Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么双向算法与左部分相反?_Algorithm_String Search - Fatal编程技术网

Algorithm 为什么双向算法与左部分相反?

Algorithm 为什么双向算法与左部分相反?,algorithm,string-search,Algorithm,String Search,该算法是一种子串搜索算法 它将搜索模式x分为两部分:x=xl xr,首先它尝试将xr与文本匹配,如果匹配成功,算法将按相反的顺序(即从右到左的顺序)指定匹配xl 为什么xl从右向左匹配 我可以用从左到右的比较来代替它吗 这个问题的原因很简单:一个未指定顺序的比较已经可用,而且可能更有效,可以考虑一些优化的memcmp或展开的循环。从效率的角度来看,这显然不重要。我能想到的唯一其他原因是:在不匹配的情况下,从右向左的尝试可能会给算法留下更多关于部分匹配的信息。所以在RTL中,如果我们匹配xl中

该算法是一种子串搜索算法

它将搜索模式x分为两部分:x=xl xr,首先它尝试将xr与文本匹配,如果匹配成功,算法将按相反的顺序(即从右到左的顺序)指定匹配xl

  • 为什么xl从右向左匹配
  • 我可以用从左到右的比较来代替它吗

这个问题的原因很简单:一个未指定顺序的比较已经可用,而且可能更有效,可以考虑一些优化的
memcmp
或展开的循环。

从效率的角度来看,这显然不重要。我能想到的唯一其他原因是:在不匹配的情况下,从右向左的尝试可能会给算法留下更多关于部分匹配的信息。所以在RTL中,如果我们匹配xl中的2个字符,然后失败,我们知道我们有一个2个字符+xr的部分连续匹配。如果我们匹配xl LTR并失败,我们只知道xr匹配。

当您查找后缀时,如何从左到右匹配它?您正在查找文本中第一个出现的子字符串x,因此全局搜索是从“左到右”(内存顺序),但模式的这一半是从最右边的字节开始匹配的。