2017136116   2년 전

strstr로 푼 소스: https://www.acmicpc.net/source...

string::find로 푼 소스: https://www.acmicpc.net/source...

동일하게 슬라이딩 윈도우 로직으로 풀었는데 하나는 TLE고 하나는 AC입니다.

제가 실수한 부분이 있는 건지 아니면 string::find가 느린 이유가 있는 건지 궁금합니다.

doju   2년 전

strstrstring::find는 비슷한 역할을 하지만 어쨌든 말 그대로 다른 함수이며, 다른 방식으로 구현되어 있습니다.

  • string::find는 가장 기본적인 형태의 brute-force 알고리즘을 사용하며, 최악의 경우 두 문자열의 길이의 곱에 비례하는 시간이 걸립니다.
  • 반면 strstr은 선형 시간복잡도가 보장되는 two-way 알고리즘을 사용하며, 찾으려는 문자열의 길이가 짧은 경우는 해싱을 사용해 더욱 빠르게 동작합니다.

위 내용은 Linux 기반의 운영체제와 GCC 컴파일러를 사용하는 환경을 가정한 것으로, 다른 환경에서는 위의 내용과 다르게 동작할 수 있습니다.

2017136116   2년 전

감사합니다. 내부 구현 소스를 어디서 찾아야하는지 몰라서 질문 올렸는데 링크까지 첨부해주셔서 큰 도움이 되었습니다.

doju   2년 전

그사이 새로운 커밋이 추가되어 링크가 잘못된 줄을 가리키게 되었기에 permalink로 대체합니다.

댓글을 작성하려면 로그인해야 합니다.