On Feb 14, Andrew Pimlott said:

>On Thu, Feb 14, 2002 at 10:20:50PM -0500, Jeff 'japhy' Pinyan wrote:
>>   while ($str =~ m{ ([^\0]{$len,}) (?= [^\0]* \0 [^\0]*? \1 ) }xg) {
>
>Thanks to the comma,             ^
>
>>     $len = length($match = $1) + 1;
>>   }
>
>this is O(N^3) in the case of no common substring:
>
>- 1 factor for the positions at which the re engine tries to match
>- 1 factor for the lengths it tries for {$len,}
>- 1 factor for scanning string 2, failing to find \1
>
>I think that without the comma there is no O(N^3) worst case.  For
>every scan of string 2, you either
>
>- find \1, in which case the re engine stops and you increment $len
>- don't find \1, in which case it increments $+[0] (aka pos())

Except that you are forced to find a 2-character match, which means you
end up skipping a POTENTIAL 3-character-or-more match.

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.
[  I'm looking for programming work.  If you like my work, let me know.  ]

Reply via email to