원형 버퍼가 동일한 길이의 다른 버퍼 목록의 미러 또는 회전인지 여부를 감지하려고합니다.순환 버퍼 비교/검색 알고리즘
예주어진 다음 버퍼 3 : 다음
AAABCCCA
AABCCBAA
AAAACCAA
:는 제 1 버퍼의 미러 회전 같이 CCBAAAAC
가 일치하는 것이다.
현재 모든 순환에서 모든 버퍼를 비교 한 다음 버퍼를 역순으로 다시 수행합니다.
이것은 다음을 요구합니다 : 2*n*i
버퍼 비교. (여기서 n은 2를 비교할 버퍼의 수이고 i는 버퍼의 길이입니다.)
누가 더 빠른 알고리즘을 알고 있습니까?
비교 대상 목록이 늘어났습니다 (목록에없는 목록을 찾음). 버퍼를 어떻게 든 주문할 수있는 방법이 있습니까? 그래서 비교가 더 빨리 이루어질 수 있습니까?
내가 가진 한 가지 아이디어는 각 버퍼의 정렬 된 버전을 저장하는 것이므로 같은 수의 항목이 있는지 빠르게 비교할 수 있습니다.
그러나 '순환 시퀀스'에 의해 어떻게 든 더 일반적인 솔루션이 있습니까?
중복 검색 패턴을 입력 한 다음 정확하게 일치하는 항목을 찾습니다. ?? –
그것은 본질적으로 내가 말한 것과 같은 것입니다. 패턴 매칭은 n 개의 문자열을 가로 지르는 장소에서 보일 것이며, 2 * n * i에 대해 역으로해야 할 것입니다. 그러나 strstr과 같은 표준 함수를 사용하여 코드를 작성하는 가장 쉬운 방법은 여러분이 말한 것입니다. – Myforwik