Results in#!perl -w use strict; use Benchmark qw/:all/; my $result = timethese( -5, { index => sub { -1 != index 'fooabc123', '123' }, regex => sub { 'fooabc123' =~ /123/ } } ); cmpthese $result;
Benchmark: running index, regex for at least 5 CPU seconds... index: 6 wallclock secs ( 6.56 usr + -0.03 sys = 6.53 CPU) @ 81 +19742.77/s (n=53030040) regex: 5 wallclock secs ( 5.50 usr + 0.00 sys = 5.50 CPU) @ 44 +81230.91/s (n=24646770) Rate regex index regex 4481231/s -- -45% index 8119743/s 81% --
Results in#!/usr/bin/perl use warnings; use strict; use Data::Dumper; use Benchmark qw/:all/; sub LCSRegEx { my $substr = $_[0]; my $len = length $_[0]; my $off = 0; while ($substr) { my @matches = grep /\Q$substr/, @_; last if @matches == @_; $off++; $len-- and $off=0 if $off+$len > length $_[0]; $substr = substr $_[0], $off, $len; } return $substr; } sub LCSIndex { my $substr = $_[0]; my $len = length $_[0]; my $off = 0; while ($substr) { my @matches = grep { -1 != index $_, $substr } @_; last if @matches == @_; $off++; $len-- and $off=0 if $off+$len > length $_[0]; $substr = substr $_[0], $off, $len; } return $substr; } my $result = timethese( -5, { LCSRegEx => sub { for ([ qw(fooabc123 fooabc321 foobca232) ], [ qw(abcfoo123 bcafoo321 foo123abc) ], [ qw(foo bor boz bzo) ]) { LCSRegEx(@{$_}); } }, LCSIndex => sub { for ([ qw(fooabc123 fooabc321 foobca232) ], [ qw(abcfoo123 bcafoo321 foo123abc) ], [ qw(foo bor boz bzo) ]) { LCSIndex(@{$_}); } } }); cmpthese $result;
Benchmark: running LCSIndex, LCSRegEx for at least 5 CPU seconds... LCSIndex: 6 wallclock secs ( 5.28 usr + 0.00 sys = 5.28 CPU) @ 34 +63.93/s (n =18293) LCSRegEx: 6 wallclock secs ( 5.50 usr + 0.00 sys = 5.50 CPU) @ 91 +6.36/s (n= 5040) Rate LCSRegEx LCSIndex LCSRegEx 916/s -- -74% LCSIndex 3464/s 278% --
In reply to Re: finding longest common substring
by CombatSquirrel
in thread finding longest common substring
by revdiablo
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |