50 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			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" |