Portál AbcLinuxu, 10. května 2025 02:35

Dotaz: Perl - nejefektivnější prohledávání pole

29.6.2011 11:13 Pirkil
Perl - nejefektivnější prohledávání pole
Přečteno: 314×
Odpovědět | Admin

Dobrý den, potřebuju poradit, jak zeefektivnit prohledávání pole.

Mám asi toto:

for my $regex (@regexeps) {

$regex = qr{$regex};

my @occurrences = grep { $_ =~ m{$regex}xms } keys %strings;

...

 

}

Při větším množství dat mi jde prohledávání pomalu. Existuje něco efektivnějšího? (Kód v textu je pouze příklad, jinak používám odkazy. Jsem si jistý, že je to způsobeno tím, že hash %strings obsahuje velké množství dat. Klíče musím porovnávat jako strings, protože mi jde asi o toto: ... grep {  'táta a máma' =~ m{\btáta\b}xms } ...)

Díky za pomoc!

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.6.2011 17:45 vbar
Rozbalit Rozbalit vše Re: Perl - nejefektivnější prohledávání pole
Odpovědět | | Sbalit | Link | Blokovat | Admin
No standardní optimalizace je zkombinovat všechny regulární výrazy jako alternativy, tj.
$theregex = join '|', map { "(?:$_)"; } @regexeps;
- což pravda předpokládá že s každým matchem se dělá víceméně to samé - plus si vyžádat kompilaci, tj.
$theregex = qr{$theregex}o;
Samozřejmě to není testované, a pro dostatečný počet regulárních výrazů se jistě projeví nějaká systémová omezení, ale v zásadě někudy tímto směrem by to mělo jít...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.