문자열에서 가장 긴 반복 패턴을 찾는 효율적인 알고리즘을 찾고 있습니다.
예를 들어 다음과 같은 숫자 문자열을 고려하십시오.
5431428571428571428571428571427623874534
.
보시다시피, 142857142857
이 문자열에서 몇 번 (적어도 두 번) 반복되는 가장 긴 패턴입니다.
반복되는 줄에는 무차별적인 것이 아니라 어떤 생각도 포함되어서는 안됩니까?
문자열에서 가장 긴 반복 패턴을 찾는 효율적인 알고리즘을 찾고 있습니다.
예를 들어 다음과 같은 숫자 문자열을 고려하십시오.
5431428571428571428571428571427623874534
.
보시다시피, 142857142857
이 문자열에서 몇 번 (적어도 두 번) 반복되는 가장 긴 패턴입니다.
반복되는 줄에는 무차별적인 것이 아니라 어떤 생각도 포함되어서는 안됩니까?
답변:
이 문제는 놀라 울 정도로 사소한 문제입니다. 먼저, 두 개의 무차별 알고리즘. 정사각형 ( "반복 패턴")의 길이는 그리고 위치 , 시간이 걸립니다 확인합니다. 우리가 다 넘어 가면 과 우리는 연산. 먼저 반복하여 개선 할 수 있습니다거리를두고 두 개의 실행 포인터로 문자열을 스캔합니다. . 이런 식으로, 길이의 제곱을 확인할 수 있습니다 선형 시간으로 존재하며 .
Kolpakov와 Kucherov는 한 번에 한 단어로 모든 최대 반복 을 찾기위한 알고리즘을 개발했습니다. [1] 및 해당 알고리즘을 사용하여 시간의 모든 최대 제곱을 찾을 수 있습니다. . 반복 형태의 subword입니다, 어디 과 올바른 접두사입니다 . 그 반복에 포함 된 가장 큰 사각형은. 이 수식을 사용하면 단어의 모든 최대 반복 횟수가 주어집니다. 가장 큰 광장을 찾을 수 있습니다.
[1] Kolpakov, R. 및 Kucherov, G. (1999). 선형 시간으로 단어에서 최대 반복 찾기 . 년 에 컴퓨터 과학, 1999 년 40 연례 심포지엄의 기초 (PP. 596-604). IEEE.
142857
길기 때문에 가장142857142857
길지 않습니다. “반복 된 패턴”이 의미하는 바를 명확히하기 위해 질문을 편집해야한다고 생각합니다.