2012-02-20 3 views
1

Я хочу, чтобы определить неизвестный образец в виде строки, например, как,Строка Неизвестный шаблон соответствия

s = 112468112468112468112468112468.

Итак, в этой строке мы можем ясно видеть, что 112468 является повторяющимся образцом. Я искал на google совсем немного, чтобы найти некоторые алгоритмы, которые могли бы мне помочь, но я мог видеть только те, которые находят данный шаблон в строке, такой как алгоритм Бойера-Мура и т. Д.

Что я сейчас делаю, чтобы найти эти повторяющиеся неизвестный образец является то, что

for(i=0;i<Length of String;i++) 
{ 
    for(j=i+1;j<Length of String;j++) 
    { 
    if(s[i]==s[j] && s[i+1]==s[j+1] && s[i+2]==s[j+2] && s[i+3]==s[j+3]) 
    { 
     patternlength=j-i; 

      for(k=i;k<j;k++) 
      { 
      pattern[k]=s[i+k] 
      } 
    } 
    } 
} 

Хотя это работает для данной строки, используя окно сравнения 4 литер, он может очень хорошо работать не для какой-то другой строки. Кто-нибудь знает лучшее решение этого.

Благодаря

+1

Наличие машины для идентификации любых шаблонов в тексте не является тривиальной проблемой. Вас интересует ** **, например, строки с повторяющимися узорами? Если вы можете указать нам ** тип ** или образец или шаблоны, для которых вы заинтересованы в поиске, мы могли бы помочь больше. – jefflunt

+0

Ну, типа шаблонов, с которыми я имею дело, будут строки с повторяющимися узорами и будут очень похожи на ту, которую я написал выше, как «s» и. Метод, который я закодировал выше, работает для меня очень хорошо. Но я просто хотел знать, есть ли какой-то стандартный алгоритм для этого. – Goku

ответ

1

Это не по шаблону, это распознавание рисунка на , которая коренным образом отличается и потенциально гораздо сложнее.

Однако простой вид шаблона экспонировались этой строки можно было найти с помощью (код Python):

def find_repeated_pattern(s): 
    for i in xrange(1, len(s)/2): 
     if s == s[:i] * (len(s)/i): 
      return s[:i] 

Это наивная реализация из-за всех его строковому копирования, но это может быть сделано в работа в O (n ²) время и постоянное пространство.

+1

Привет. Спасибо за ваш ответ. На самом деле строка, в которой я должен найти шаблон, также динамически генерируется. Я не настолько эксперт по python, но этот фрагмент кода работает для любой строки, отличной от кода, который я написал. – Goku

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