Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String 一种有效的MEM查找算法_String_Algorithm_Search_Pattern Matching - Fatal编程技术网

String 一种有效的MEM查找算法

String 一种有效的MEM查找算法,string,algorithm,search,pattern-matching,String,Algorithm,Search,Pattern Matching,MEM是“最大精确匹配”问题的缩写,该问题的目的是寻找两个输入字符串之间的所有最大相似子字符串。请注意,此问题与字符串匹配问题(或文本搜索)略有不同,您希望在另一个文本中查找给定字符串 例如,在以下两个字符串中(使用有限字符{1,2,3}),MEM是“12”和“3312” str1:“12233312” str2:“123312” < Expple 233 >也是两个输入字符串之间的公共子串,但是由于还有另一个更大的子串包含它,所以我们不认为它是MEM。< /P> 有没有人对如何解决这个问题有什

MEM是“最大精确匹配”问题的缩写,该问题的目的是寻找两个输入字符串之间的所有最大相似子字符串。请注意,此问题与字符串匹配问题(或文本搜索)略有不同,您希望在另一个文本中查找给定字符串

例如,在以下两个字符串中(使用有限字符{1,2,3}),MEM是“12”和“3312”

str1:“12233312”

str2:“123312”

< Expple 233 >也是两个输入字符串之间的公共子串,但是由于还有另一个更大的子串包含它,所以我们不认为它是MEM。< /P>
有没有人对如何解决这个问题有什么好主意。一个非常简单的想法是使用搜索算法,通过一些像Boyer–Moore这样的快速字符串搜索算法,在大字符串中查找小字符串的所有可能子字符串。但这似乎不是解决这个问题的有效方法。

是的,你可以相对容易地做到这一点,它被称为动态规划。
创建一个布尔二维表,第一个维度是str1,第二个维度是str2。将所有常用数字设置为true。一旦你完成了你的bollean 2D表格,对角迭代并找到最大计数为true。

是的,你可以相对容易地做到这一点,它被称为动态规划。
创建一个布尔二维表,第一个维度是str1,第二个维度是str2。将所有常用数字设置为true。一旦你完成了你的bollean 2D表格,对角迭代并找到最大计数为true。

是的,你可以相对容易地做到这一点,它被称为动态规划。
创建一个布尔二维表,第一个维度是str1,第二个维度是str2。将所有常用数字设置为true。一旦你完成了你的bollean 2D表格,对角迭代并找到最大计数为true。

是的,你可以相对容易地做到这一点,它被称为动态规划。
创建一个布尔二维表,第一个维度是str1,第二个维度是str2。将所有常用数字设置为true。完成bollean 2D表格后,按对角线迭代,找到true的最大计数。

这是一个线性时间算法

  • str1+“X”+str2
    上构建后缀树,其中
    'X'
    不会出现在
    str1
    str2

  • 一些叶节点对应于以
    str1
    开头的后缀(包含
    'X'
    )。把这些涂成红色。把其他的涂成蓝色

  • 将树的根遍历到叶子,用从根到节点的字符串长度标记每个节点

  • 将树的叶子遍历到根,以查找同时具有红色子代和蓝色子代的叶子节点。步骤3中计算的标签是公共子字符串的长度


  • 这是一个线性时间算法

  • str1+“X”+str2
    上构建后缀树,其中
    'X'
    不会出现在
    str1
    str2

  • 一些叶节点对应于以
    str1
    开头的后缀(包含
    'X'
    )。把这些涂成红色。把其他的涂成蓝色

  • 将树的根遍历到叶子,用从根到节点的字符串长度标记每个节点

  • 将树的叶子遍历到根,以查找同时具有红色子代和蓝色子代的叶子节点。步骤3中计算的标签是公共子字符串的长度


  • 这是一个线性时间算法

  • str1+“X”+str2
    上构建后缀树,其中
    'X'
    不会出现在
    str1
    str2

  • 一些叶节点对应于以
    str1
    开头的后缀(包含
    'X'
    )。把这些涂成红色。把其他的涂成蓝色

  • 将树的根遍历到叶子,用从根到节点的字符串长度标记每个节点

  • 将树的叶子遍历到根,以查找同时具有红色子代和蓝色子代的叶子节点。步骤3中计算的标签是公共子字符串的长度


  • 这是一个线性时间算法

  • str1+“X”+str2
    上构建后缀树,其中
    'X'
    不会出现在
    str1
    str2

  • 一些叶节点对应于以
    str1
    开头的后缀(包含
    'X'
    )。把这些涂成红色。把其他的涂成蓝色

  • 将树的根遍历到叶子,用从根到节点的字符串长度标记每个节点

  • 将树的叶子遍历到根,以查找同时具有红色子代和蓝色子代的叶子节点。步骤3中计算的标签是公共子字符串的长度


  • 我找到了我正在寻找这个问题的论文。这个想法与大卫·艾森斯塔·门蒂翁的想法相似。实际上我不需要包含两个字符串,我可以在previos树上构建第一个字符串的后缀树,然后构建第二个字符串的后缀树。它的意思是,当我遍历前一棵树以找到secons字符串的方法时,我可以找到显示公共子字符串的公共路径


    我找到了我正在寻找这个问题的论文。这个想法与大卫·艾森斯塔·门蒂翁的想法相似。实际上我不需要包含两个字符串,我可以在previos树上构建第一个字符串的后缀树,然后构建第二个字符串的后缀树。它的意思是,当我遍历前一棵树以找到secons字符串的方法时,我可以找到显示公共子字符串的公共路径


    我找到了我正在寻找这个问题的论文。这个想法与大卫·艾森斯塔·门蒂翁的想法相似。实际上我不需要包含两个字符串,我可以在previos树上构建第一个字符串的后缀树,然后构建第二个字符串的后缀树。W