Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^4: Longest Common SubSequence Not Working Correctly

by blokhead (Monsignor)
on Nov 14, 2007 at 14:58 UTC ( #650763=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Longest Common SubSequence Not Working Correctly
in thread Longest Common SubSequence Not Working Correctly

The lcsbruteforce algorithm maintains this big table of solutions to subproblems. In this example, it's maintaining just the length of the LCS. Just change it to maintain the actual substring itself:

sub lcsbruteforce { my($x, $y) = @_; my(@v, $cx, $cy, $left, $above); for my $xi (0 .. length($x) - 1) { $cx = substr $x, $xi, 1; for my $yi (0 .. length($y) - 1) { $cy = substr $y, $yi, 1; if ($cx eq $cy) { # $v[$xi][$yi] = 1 + (($xi && $yi) ? $v[$xi - 1][$yi - 1] : 0); $v[$xi][$yi] = ($xi && $yi ? $v[$xi-1][$yi-1] : "") . $cx; } else { # $left = ($xi && $v[$xi - 1][$yi]) || 0; # $above = ($xi && $v[$xi][$yi - 1]) || 0; # $v[$xi][$yi] = ($left > $above) ? $left : $above; $left = ($xi && $v[$xi - 1][$yi]) || ""; $above = ($xi && $v[$xi][$yi - 1]) || ""; $v[$xi][$yi] = length($left) > length($above) ? $left : $above +; } } } return $v[length($x) - 1][length($y) - 1]; }
To change it to an actual brute force algorithm? That would be pretty strange. The brute force algorithm is:
$best = ""; for every subsequence $s of $x: if $s is also a subsequence of $y: $best = $s if length($s) > length($best); return $best;
Of course, the part where you get all subsequences and check for subsequence-ness is a pain. You can probably generate all subsequences using Algorithm::Loops, and perhaps use some regex stuff to check whether a string was a subsequence of another.

blokhead


Comment on Re^4: Longest Common SubSequence Not Working Correctly
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://650763]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chanting in the Monastery: (11)
As of 2014-10-21 19:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (106 votes), past polls