Mam kilka dużych plików (setki MB), które muszę wyszukać dla kilku tysięcy ~ 20-znakowych unikatowych ciągów.Ile wyrażeń regularnych mogę połączyć za pomocą naprzemiennej metody?
Odkryłam, że za pomocą rury naprzemiennej metaznaku do dopasowywania wyrażeń regularnych jak (string1|string2|string3)
przyspiesza proces wyszukiwania dużo (versus szukając jednej strunie naraz).
Jaki jest limit rozmiaru skali? Ile wyrażeń mogę połączyć w ten sposób? Czy spowoduje to pewnego rodzaju przepełnienie? Czy jest lepszy sposób to zrobić?
EDIT
W celu utrzymania moje pytanie krótkie, nie podkreślić fakt, że już wdrożone kod za pomocą tego podejścia naprzemiennej i znalazłem to być pomocne: W przypadku testowego przy typowym zbiorze danych czas działania został skrócony z 87 minut do 18 sekund - przyspieszenie 290x, najwyraźniej z O (n) zamiast O (n * m).
Moje pytanie dotyczy tego, w jaki sposób można oczekiwać, że to podejście będzie działać, gdy inni użytkownicy uruchomią ten kod w przyszłości, używając znacznie większych zbiorów danych z większymi plikami i innymi wyszukiwanymi terminami. Oryginalny kod O (n * m) był istniejącym kodem, który był używany przez 13 lat, a jego powolność została ostatnio wskazana, ponieważ zestawy danych związane z genomem, na których działa, ostatnio stały się znacznie większe.
Dlaczego nie spróbujesz i nie powiesz nam o wynikach? – Kevin
To dziwne: moje wyniki były dokładnie odwrotne, a było o wiele więcej czasu na wykonanie kilku oddzielnych wyszukiwań niż jeden z naprzemiennymi.Czy mogę zasugerować, abyś przekazał nieco więcej informacji o swoim kodzie? – raina77ow
Użyj jednego z [Regexp :: Assemble] (http://metacpan.org/module/Regexp::Assemble), [Regexp :: Trie] (http://metacpan.org/module/Regexp::Trie) , [Regex :: PreSuf] (http://metacpan.org/module/Regex::PreSuf), aby zmontować bardziej wydajne zmiany. – obmib