Monday, March 26, 2012

Knuth moris pratt in java


package kws.algo.string;

import java.util.Arrays;

/**
* Created by IntelliJ IDEA.
* User: uchan
* Date: 3/27/12
* Time: 9:10 AM
* To change this template use File | Settings | File Templates.
*/
public class KnuthMorrisPratt {

public void match(char[] t, char[] p) {
short [] pi = calculatePi(p);
int q = 0; //number of character matched
for(int i = 0; i < t.length; i++) {
while(q > 0 && p[q] != t[i]){
q = pi[q-1];
}
if(p[q] == t[i]) {
q = q + 1;
}
if(q == p.length) {
System.out.println("Pattern found ");
q = pi[q-1];
}
}
}

private short[] calculatePi(char[] p) {
short [] pi = new short[p.length];
pi[0] = 0;
int k = 0;
for (int i = 1; i < p.length; i++) {
while(k > 0 && p[k] != p[i]) {
k = pi[k-1];
}
if(p[k] == p[i]) {
k = k + 1;
}
pi[i] = (short) k;
}
return pi;
}

public static void main(String ... arg) {
KnuthMorrisPratt knuthMorrisPratt = new KnuthMorrisPratt();
knuthMorrisPratt.match("xaababacahsababacagadfasd".toCharArray(), "ababaca".toCharArray());
}
}

No comments:

Post a Comment