우리는 이진 문자열에 대한 데이터 구조에 관심이 있습니다. S = s로하자. .... s m은 크기가 m
인 이진 문자열이어야한다. Shift(S,i)
은 문자열의 순환 시프트 S
i
왼쪽 공백입니다. 즉, (S, I) = 시프트이다 s의 I S I + S 1 + I 2 ... S 미터 S 1 ... I-1의. 지원하는 효율적인 데이터 구조를 제안한다 : (1) 시프트 문자열의 데이터 구조
Insert(s)
가 O의 DS에 이진 문자열을 삽입 O에서 empy DS의
Init()
을Search_cyclic(s)
확인되는 경우 (|^2 | S) O (| s |)에 ANYi
에 대해Shift(S,i)
이 있습니다.
공간 복잡도 : O (| S 1 | + | S 2 | + ..... + | S m |) S I는 m 스트링 경우이다 어디 이것까지 삽입했습니다.
일부 주어진 i에 대해 Search_cyclic (s, i)를 찾아야하는 경우 접미사 트리를 사용하고 O (| s |)로 건너 뛴다는 것이 매우 간단합니다. 그러나 Search_cyclic (s)에는 주어진 i가 없으므로 주어진 복잡성에서 무엇을해야할지 모르겠습니다. OTOH, Insert (s)는 일반적으로 접미어 트리에 삽입하기 위해 O (| s |)를 취하고 여기서 O (| s |^2)를 부여받습니다.
나는 이것이 숙제라고 생각한다. 그것이 사실이 아니라면, 과제 태그를 다시 제거하십시오. –
| s |가 무슨 뜻입니까? 바이너리 문자열을 포함하는 DS의 문자열 크기 Search_cyclic은 무엇을 검사합니까? – Shraddha
| s | Search_cyclic (s)에서 검색 할 문자열의 크기입니다. Search_cyclic (s)은 문자열 s의 이동 된 문자열이 DS에 있는지 확인해야합니다. 내가 생각하기에 접미어 트리를 사용하는 생각은 일반적으로 접미사 트리에 문자열을 삽입하는 동안 O (| s |)를 사용하는 반면 O (| s |^2) 일 수있는 Insert (s)를 활용할 수 있습니다. 그래서 나는 아마도 추가 된 여유로 무언가를해야 할 것입니다. –