LCS
NAME
Algorithm::LCS - Implementation of the longest common subsequence algorithm
SYNOPSIS
use Algorithm::LCS;
# regular usage
say lcs(<A B C D E F G>, <A C F H J>); # prints T<A C F>
# custom comparator via :compare
say lcs(<A B C>, <D C F>, :compare(&infix:<eq>));
# extra special custom comparison via :compare-i
my @a = slurp('one.txt');
my @b = slurp('two.txt');
my @a-hashed = @a.map({ hash-algorithm($_) });
my @b-hashed = @b.map({ hash-algorithm($_) });
say lcs(@a, @b, :compare-i({ @a-hashed[$^i] eqv @b-hashed[$^j] }));
DESCRIPTION
This module contains a single subroutine, lcs
, that calculates
the longest common subsequence between two sequences of data. lcs
takes two lists as required parameters; you may also specify the comparison
function (which defaults to eqv
) via the &compare
named parameter).
Sometimes you may want to maintain a parallel array of information to
consult during calculation (for example, if you're comparing long lines
of a file, and you'd like a speedup by comparing their hashes rather than
their contents); for that, you may use the &compare-i
named argumeny
SUBROUTINES
SEE ALSO
AUTHORS
Rob Hoelz
Raku Community
COPYRIGHT AND LICENSE
Copyright (c) 2014 - 2017 Rob Hoelz
Copyright (c) 2024 Raku Community
This library is free software; you can redistribute it and/or modify it under the MIT license.