나는 수천 ~ 20 자의 고유 한 문자열을 검색해야하는 대용량 파일 (수백 MB)이 있습니다.대체를 사용하여 몇 개의 정규 표현식을 연결할 수 있습니까?
나는 (string1|string2|string3)
같은 정규 표현식을 일치하는 파이프 교대 메타 문자를 사용하여 검색 프로세스 (한 번에 하나의 문자열을 검색 대) 많은을 줄일 수 있다는 사실을 발견했습니다.
이 척도가 얼마나 잘 적용될 수 있습니까? 얼마나 많은 표현을 이렇게 연결할 수 있습니까? 어떤 시점에서 오버 플로우가 발생합니까? 이 작업을 수행하는 더 좋은 방법이 있습니까?
짧은 내 질문을 유지하기위한 노력의 일환으로 편집
, 나는 이미이 교대 방식을 사용하여 코드를 구현 한 사실을 강조하지 않았고, 나는 그것이 도움이 될 것으로 : 테스트 케이스에 전형적인 데이터 세트를 사용하면 실행 시간이 87 분에서 18 초로 단축되어 O (n * m) 대신 O (n)으로 290x 속도 향상이 가능합니다.
내 질문은 다른 사용자가 더 큰 파일과 더 많은 검색어로 훨씬 더 큰 데이터 세트를 사용하여이 코드를 나중에 실행할 때 어떻게 작동 할 것으로 기대되는지에 관한 것입니다. 최초의 O (n * m) 코드는 13 년 동안 사용 된 기존 코드였으며, 최근 작동 속도가 더 빨라진 게놈 관련 데이터 세트가 최근에 많이 지적되었습니다.
왜 시도해보고 결과를 알려주시겠습니까? – Kevin
이상한 점이 있습니다 : 나의 결과는 정반대 였고, 교대로 검색하는 것보다 몇 가지 별도의 검색을하는 것이 훨씬 빨랐습니다.코드에 대해 더 자세히 설명해 주시겠습니까? – raina77ow
[Regexp :: Assemble] (http://metacpan.org/module/Regexp::Assemble), [Regexp :: Trie] (http://metacpan.org/module/Regexp::Trie) 중 하나를 사용하십시오. , [Regex :: PreSuf] (http://metacpan.org/module/Regex::PreSuf)보다 효율적인 변경을 어셈블하십시오. – obmib