Regulární výraz pro detekci opakovaných podřetězců je pomalu

hlasů
0

Snažím se přijít s GNU rozšířené regulární výraz, který detekuje opakované podřetězce v řetězci ASCII kódovaný bitů. Mám výraz, který funguje - tak nějak. Problém je v tom, že se provádí opravdu pomalu, když daný řetězec, který by mohl mít mnoho řešení

Výraz

([01] +) (\ 1) +

sestavuje rychle, ale trvá asi minutu vykonat proti řetězci

1010101010101010101010101010101010101010101010101010101010

Já používám provádění regex z glibc 2.5-49 (dodáván s CentOS 5.5.)

FWIW knihovna pcre provádí rychle, jako v gregexp nebo perl přímo. Tak zřejmé, ale špatně, odpověď zní „užívání libpcre“. Nemohu snadno představit novou závislost v mém projektu. Musím pracovat v knihovně std C, který je dodáván s CentOS / RHEL.

Položena 27/08/2010 v 20:35
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

V případě, že vstupní řetězec může být jakékoliv značnou délku, nebo je-li výkon vůbec obavy, pak se jeden z lepších způsobů, jak řešit tento problém není s regex, ale s více sofistikované struktuře řetězec dat, který usnadňuje tyto druhy dotazů moc efektivněji.

Taková struktura dat je přípona strom . Vzhledem k tomu, řetězec S, jeho přípona strom je v podstatě Patricia trie všech jeho přípon. Přes zdánlivou složitost, může být postaven v lineárním čase.

Přípona strom pro BananaPřípona strom pro "BANANA"(s laskavým svolením Wikipedie)

Můžete tak učinit mnoho druhů dotazů opravdu efektivně s příponou stromu, např nálezu všechny výskyty podřetězec, nejdelší podřetězec, který se vyskytuje nejméně dvakrát, atd druh řetězce, které jste po je nazýván tandemové repetice . Pro usnadnění tohoto dotazu budete muset předzpracování příponu strom v lineárním čase, takže si můžete udělat nejnižší společný předek dotazy v konstantním čase.

Tento problém je velmi běžné ve výpočetní biologii, kde může být DNA, pohlížet jako na velmi dlouhý řetězec skládající se z písmen ACGT. Tak, výkon a účinnost, je nanejvýš důležité, a tyto velmi sofistikované algoritmy a techniky byly navrženy.

Měli byste se podívat do jedné realizaci těchto technik od nuly pro binární sekvence, nebo možná je to jednodušší mapovat binární sekvenci na „falešné“ DNA řetězec a pak za použití jednoho z mnoha dostupných nástrojů pro genovou výzkum.

viz též

Odpovězeno 28/08/2010 v 13:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more