2016-06-02 4 views
1

Учитывая одна строки сказать S длиной m и множество других строк R все с длиной равной или более крупной, чем m. Найдите строки в наборе, которые имеют S в качестве подпоследовательности.Найти подпоследовательность вхождения в нескольких строках

Так что, если S является blr и множество струн:

bangalore 
booleer 
bamboo 

Она должна возвращать первые две строки.

Я понимаю, что можно найти, если строка S длины m является subsecuence другой строки T длины n в временной сложностью O (N + M). Поэтому я знаю, что могу просто выполнить этот алгоритм для каждого элемента в наборе, но это будет временной сложностью O (k * (n + m)), которая равна k размеру набора (и если все строки имеют такой же длины). Это заставляет меня задаться вопросом, есть ли какая-то предварительная обработка, которая помогает мне решить эту проблему с помощью нескольких строк.

Итак, есть ли какая-либо предварительная обработка или структура, которые я могу использовать для решения этой проблемы? Какую наилучшую временную сложность я могу достичь? Существуют ли какие-либо другие способы решения этой проблемы?

ответ

0

жгутом струнной ч и с, если вы хотите найти, если ч находится в наборе, которые имеют S в качестве подпоследовательности, алгоритм будет иметь сложность O (N)

public bool function(string ch, string s) 
     { 
      if (ch.Length < s.Length) 
       return false; 

      int j = 0; 
      for (int i = 0; i < ch.Length; i++) 
      { 
       if (ch[i] == s[j]) 
       { 
        j++; 
        if (s.Length == j) 
        { 
         return true; 
        } 
       } 
      } 
      return false; 
     } 

После thatyou должны применяться это для всей вашей строки в R

0

У меня нет реализации кода, но мне удалось найти бумагу 1984 года "Computing a longest common subsequence for a set of strings" от WJ Hsu и MW Du.

Их вывод состоит в том, что, выполняя время предварительной обработки O (L) (где L представляет собой совокупную длину всех строк в наборе), можно выполнить каждый поиск в O (P), где P - это число раз, когда игла появляется в стоге сена.

Смежные вопросы