factor/extra/z-algorithm/z-algorithm-docs.factor

50 lines
1.4 KiB
Factor

! Copyright (C) 2010 Dmitry Shubin.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays help.markup help.syntax sequences ;
IN: z-algorithm
HELP: lcp
{ $values
{ "seq1" sequence } { "seq2" sequence }
{ "n" "a non-negative integer" }
}
{ $description
"Outputs the length of longest common prefix of two sequences."
} ;
HELP: z-values
{ $values
{ "seq" sequence } { "Z" array }
}
{ $description
"Outputs an array of the same length as " { $snippet "seq" }
", containing Z-values for given sequence. See "
{ $link "z-algorithm" } " for details."
} ;
ARTICLE: "z-algorithm" "Z algorithm"
{ $heading "Definition" }
"Given the sequence " { $snippet "S" } " and the index "
{ $snippet "i" } ", let " { $snippet "i" } "-th Z value of "
{ $snippet "S" } " be the length of the longest subsequence of "
{ $snippet "S" } " that starts at " { $snippet "i" }
" and matches the prefix of " { $snippet "S" } "."
{ $heading "Example" }
"Here is an example for string " { $snippet "\"abababaca\"" } ":"
{ $table
{ { $snippet "i:" } "0" "1" "2" "3" "4" "5" "6" "7" "8" }
{ { $snippet "S:" } "a" "b" "a" "b" "a" "b" "a" "c" "a" }
{ { $snippet "Z:" } "9" "0" "5" "0" "3" "0" "1" "0" "1" }
}
{ $heading "Summary" }
"The " { $vocab-link "z-algorithm" }
" vocabulary implements algorithm for finding all Z values for sequence "
{ $snippet "S" }
" in linear time. In contrast to naive approach which takes "
{ $snippet "Θ(n^2)" } " time."
;
ABOUT: "z-algorithm"