는의 문자열이
그래서 우리는 우리의 주 패턴에 부분적으로 일치되고 싶어 나노
입니다 가정 해 봅시다
에 무슨 일이 일어나고 있는지 볼 수있는 예이다. "nano"
과 일치하는 부분은 "", "n", "na", "nan", or (the complete match) "nano"
입니다. 즉, 문자열의 접두사 일뿐입니다. 일반적으로 패턴에 m 문자가 있으면 m + 1 상태가 필요합니다. 여기서 m = 4이고 5 개의 상태가 있습니다.
방금 "...nan"
을보고 다른 문자 "x"
을 보면 어떤 상태로 가야합니까? x가 경기의 다음 문자 (여기서 "o") 인 경우 분명히 다음 긴 접두어 (여기에서 "nano")로 이동해야합니다. 그리고 우리가 완전한 일치를 보았을 때, 우리는 단지 그 상태에 머물러 있습니다. 그러나 "a"
과 같은 다른 문자가 있다고 가정합니다. 즉, 문자열은 "...nana"
과 같습니다. 가장 긴 부분 일치는 단지 "na"
이며 마지막 2 문자를 사용할 수 있습니다.따라서 상태가 "nan"
인 경우 "a"
이라는 화살표를 그려서 "na"
으로 표시해야합니다. "na"
은 접두어가 "nano"
(상태이므로)이고 접미어는 "nana"
입니다. (부분적으로 일치하는 내용이므로 방금 본 내용과 일치합니다).
일반적으로 상태 + 문자에서 상태로의 전환은 원본 패턴의 접두사와 방금 본 상태 + 문자의 접미사 인 최장 문자열입니다. 이것은 모든 변화가 무엇인지 말해주기에 충분합니다. 우리는 패턴 "nano"
을 찾고 있다면, 전환 테이블은
n a o other
--- --- --- ---
empty: "n" empty empty empty
"n": "n" "na" empty empty
"na": "nan" empty empty empty
"nan": "n" "na" "nano" empty //just as an illustration, nan + n = n because we can only use the last 'n', nan + a = na because now we can use the last two 'na'
"nano": "nano" "nano" "nano" "nano"
은 그래서 지금 우리가 실제로 패턴이 검색 할이 표를 사용하여 어떻게 될 것인가?
문자열 "banananona"
에서이를 시뮬레이션하면 한 번에 한 문자 씩 이동하여 상태 시퀀스를 비워 둡니다. 빈 문자는 "n", "na", "nan", "na", "nan", "nano", "nano", "nano"
입니다. 상태가 "nano"
으로 끝나기 때문에이 문자열에는 어딘가에 "nano"
이 포함되어 있습니다. 위의 표를 사용하는 방법을 확장하고 'b'에서 가능한 상태 중 하나가 아니기 때문에 'n', 'na', 'nan', 'nano'
에 있습니다. 그래서 그것은 빈 것으로 간주됩니다 ... 우리가 'ba'
에 도착할 때와 같습니다. 다음 문자 'n'
을 치면 기본적으로 빈에서 n으로 바뀌므로 위에 나온 표를 사용하여 'n'
으로 끝나는 것을 봅니다. 이제 우리는 banananona의 4 글자를 얻었습니다. 그래서 우리는 'n'
에서 ... a를 추가하기로했습니다 ... 다시 우리는 테이블을 사용하여 'na'
으로 끝나는 것을 볼 수 있습니다.
다음을 추가해야합니다. 이 질문에 대한 많은 문맥이 누구에게나 유용합니다. – Marcin
이 책을 의미합니까? [알고리즘 소개] (http://www.google.co.in/url?sa=t&rct=j&q=STRING+ALGORITHMS+Cormen,+Leiserson,+Rivest+book+mcgraw+hill&source = 웨브 CD = 1 VED = 0CB4QFjAA 및 HTTP URL = % 3A % 2F % 2Fbooks.google.co.in % 2Fbooks % 2Fabout % 2FIntroduction_to_algorithms.html % 3Fid % 3DwHHDQgAACAAJ 및 EI = NOMGT5zUOoKViQfi7siuCQ 및 USG = AFQjCNGQ3aAs5_zZAaZaRgywOFquDP8gXQ 및 SIG2 = _RcvwlIv42K9TqU6e6d61A)? –
예, 서적은 Cormen의 알고리즘 소개입니다. – venkysmarty