필자는 문자열의 벡터를 가지고 있으며 벡터의 각 요소가 지정된 5000 단어 목록에 있는지 확인해야합니다. 두 중첩 루프의 평범한 방법 외에도 C++에서이를 수행하는 더 빠른 방법이 있습니까?빠른 문자열 검색?
답변
문자열 목록을 std::set에 넣어야합니다. 검색을 위해 최적화 된 데이터 구조입니다. 주어진 엘레멘트가 세트에 있는지 아닌지를 찾는 것은 모든 엔트리를 반복하는 것보다 훨씬 빠른 오퍼레이션이다.
이미 C++ 11을 사용하고있는 경우 해시 테이블로 구현되었으므로 조회가 더 빨라진 std::unordered_set을 사용할 수도 있습니다.
학교/대학용 : 이러한 데이터 구조가 어떻게 더 빠르게 관리되는지 설명 할 수 있도록 준비하십시오. 강사가 왜 그 책을 사용했는지 설명하라고 요청하면 "인터넷에있는 일부 사람들이 나에게 다음과 같이 말했습니다."라고 말하면서 책에 스티커를 적게 넣지는 않습니다.
하하, 아니, 학교에 있다면 언급했을거야. 이것은 usaco 문제에 대한 제 코드의 일부입니다. – ofey
단어 목록을 std::unordered_set에 넣을 수 있습니다. 그런 다음 벡터의 각 요소에 대해 O (1)의 unordered_set에 있는지 테스트해야합니다. O (n)의 예상되는 복잡성을 갖게됩니다 (예상되는 이유를 보려면 주석을보십시오).
그건 사실이 아닙니다. 각 문자열의 해시를 계산해야하며 문자열을 적어도 한 번 비교해야합니다. 그것들 각각은 문자열의 총 수 (예상되는 경우)와 독립적이지만, 언급할만한 가치가 있습니다. 최악의 경우는 극히 적지 만, 올바른 상태를 유지하고 * 예상 시간 *은 O (1)라고 말하는 것이 좋습니다. – delnan
당신은 완전합니다. 결과적으로 내 대답이 바뀌 었습니다. 고맙습니다. –
당신은 벡터를 정렬 할 수 있습니다. 그러면 하나의 "루프"(사전이 너무 정렬 됨)를 사용하여이를 해결할 수 있습니다. 즉, O (n)은 정렬 비용을 포함하지 않습니다.
문자열의 벡터가 있고 각 문자열에 하나 이상의 단어가 있고 사전에 벡터가 있고 문자열의 벡터에서 어떤 단어가 사전에 있는지를 결정해야합니까? 문자열의 벡터는 각 단어를 볼 필요가 있기 때문에 짜증이납니다. 먼저 새 벡터를 만들고 각 문자열을 단어로 분할 한 다음 각 단어를 새 벡터로 푸는 것으로 시작합니다. 그런 다음 새 벡터를 정렬하고 std::unique
알고리즘을 통해 실행하여 중복을 제거합니다. 그런 다음 사전을 정렬하십시오. 그런 다음 std::set_intersection
을 통해 두 범위를 모두 실행하여 결과를 작성하십시오.
- 1. 연락처 데이터베이스의 빠른 하위 문자열 검색 알고리즘
- 2. startsWith()와 같은 빠른 문자열 검색 equals()
- 3. 파이썬 정규식 빠른 검색
- 4. 빠른 검색
- 5. Magento 빠른 검색
- 6. 검색 문자열
- 7. 목록과의 빠른 문자열 비교
- 8. 컬렉션의 빠른 검색 항목
- 9. ReactiveUI 5 빠른 검색
- 10. Android에서 빠른 검색 버튼
- 11. 수정 AJAX 빠른 검색
- 12. 빠른 이미지 검색
- 13. MySQL에서의 빠른 데이터 검색
- 14. 빠른 정규식 검색
- 15. 빠른 앵글 경로 검색
- 16. 안드로이드 빠른 검색
- 17. JAXB 객체의 빠른 검색
- 18. 데이터 구조 - 빠른 검색
- 19. Magento 빠른 검색 방법
- 20. 유사한 텍스트의 빠른 검색
- 21. 빠른 검색 쿼리
- 22. Tmemo의 빠른 검색 방법
- 23. 빠른 해시 알고리즘 검색
- 24. Firefox에서의 빠른 MSDN 검색
- 25. 빠른 중위 검색
- 26. 성인용 빠른 검색 플러그인
- 27. Android에서 빠른 미리보기 검색
- 28. Java의 빠른 픽셀 검색
- 29. C에서 100k + 문자열 이상의 빠른 동적 퍼지 검색 #
- 30. 빠른 문자열 검색 또는 정규식 검색은 어느 것입니까?
목록이 아닌 연관 컨테이너를 채우는 옵션이 있습니까? –
5000 단어 목록을 정렬 할 수 있습니까? 그렇다면 정렬 된 목록에서 벡터의 문자열을 바이너리 검색 할 수 있습니다. – Satyajit
문자열이 세트의 전체 *와 일치하도록 하시겠습니까, 아니면 세트의 하나가 찾고있는 문자열로 충분합니까? –