자료 구조와 알고리즘

문자열 안에서 패턴을 찾는 BM법(보이어-무어 알고리즘)의 특징으로 올바른 것은?

  1. A패턴의 끝 문자부터 비교하며, 일치하지 않은 텍스트의 문자가 패턴에 포함되지 않는다는 등의 정보를 사용해 패턴을 한 번에 크게 이동시킨다
  2. B텍스트의 앞에서부터 한 문자씩 이동하면서, 매번 패턴의 처음부터 끝까지 모든 문자를 비교한다
  3. C텍스트와 패턴을 모두 정렬한 다음 이진 탐색으로 찾는다
정답과 해설 보기

정답: A. 패턴의 끝 문자부터 비교하며, 일치하지 않은 텍스트의 문자가 패턴에 포함되지 않는다는 등의 정보를 사용해 패턴을 한 번에 크게 이동시킨다

BM법은 패턴을 끝 문자부터 비교하고, 불일치가 된 텍스트의 문자가 패턴에 포함되지 않으면 패턴 전체를 그 문자 너머까지 이동시킬 수 있다는 식의 표를 미리 만들어 둡니다. 그래서 자연스러운 문장에서는 텍스트의 많은 문자를 비교하지 않고 건너뛸 수 있습니다. 텍스트의 길이를 n, 패턴의 길이를 m이라 하면, 한 문자씩 이동하며 모두 비교하는 단순한 방법은 최악 O(nm)이 걸립니다. KMP 알고리즘도 불일치 정보를 사용해 이동시키지만, 이쪽은 패턴의 앞에서부터 비교하며 최악에도 O(n + m)을 보장합니다.

이 분야 연습하기 분야로 돌아가기

자료 구조와 알고리즘의 다른 문제

  1. 가변 길이 배열에서, 용량이 가득 찼을 때 원소를 추가하면 2배 용량의 영역을 새로 확보하여 모든 원소를 복사한다. 용량 1인 빈 배열에 원소를 하나씩 1,000개 추가했을 때, 복사되는 원소의 총수는?
  2. 원소 수가 많고 적재율을 0.5 정도로 유지한 해시 테이블에서, 선형 탐사의 개방 주소법이 체이닝(연결 리스트로 잇는 방법)보다 빨라지기 쉬운 이유로 가장 적절한 것은?
  3. GPU 같은 병렬 처리 장치에서 정렬을 수행할 때, 바이토닉 정렬처럼 비교·교환 절차가 정해져 있는 정렬(정렬 네트워크)이 쓰이는 경우가 있다. 그 이유로 올바른 것은?
  4. 원소 수가 n인 배열에서 서로 다른 두 원소의 쌍을 모두 한 번씩 비교하는 처리(i번째 원소를 그보다 뒤에 있는 모든 원소와 비교하는 것을, i를 하나씩 늘려 가며 반복하는 이중 루프)의 시간 복잡도는?
  5. 시간 복잡도가 O(n²)인 프로그램에서 데이터 수가 1,000일 때 처리 시간이 0.5초였다. 데이터 수를 4,000으로 하면 처리 시간은 약 몇 초가 되는가?