Vous êtes sur la page 1sur 2

LCS ‫חיפוש של מחרוזת משותפת ארוכה ביותר באמצעות אלגוריתם‬

import java.util.Stack;

public class LCS_LIS {


// inner class Node
private classNode{
char c;
Stack<Integer> st;
public Node(char c){
this.c = c;
st = new Stack<Integer>();
}
}// inner class Node
// data items
char X[], Y[];
Node [] nodeArr;
int [] clusterArray;
int size = 'z'-'a'+1; // number of letters a,b,...,z
///
// constructor
public LCS_LIS(char []X, char[]Y){
//initialization of X, Y
this.X = new char[X.length];
for (int i=0; i<X.length; i++) this.X[i] = X[i];
this.Y = new char[Y.length];
for (int i=0; i<Y.length; i++) this.Y[i] = Y[i];
// initialization of array of Nodes
nodeArr = new Node[size];
for (char ci='a'; ci<='z'; ci++){
nodeArr[ci-'a'] = new Node(ci);
}
clusterArray = new int[Y.length*X.length];
}
‫ בניית מערך עזר‬//
public void buildHelpY(){
// O(Y.length)
int index;
for (int i=Y.length-1; i>=0; i--){
index = Y[i]-'a';
nodeArr[index].st.push(i);
}
}
‫ בניית מערך של אשכולות‬//
public void buildClusterArr(){
// O(|A|*log|A|)
int index, count=0;
for (int i=0; i<X.length; i++){
index = X[i]-'a';
if (!nodeArr[index].st.empty()){
for (int j=0; j<nodeArr[index].st.size(); j++){
clusterArray[count] = nodeArr[index].st.get(j);
System.out.print(clusterArray[count]+",");
count++;
}
// System.out.println();
}
}
}
1
‫חישוב המחרוזת המשותפת הערוכה ביותר‬//
public char [] LongestCommSeq(char []X, char []Y){
buildHelpY();
buildClusterArr();
int [] d = LongestIncreasingSequence.LIS(clusterArray);
char c[] = new char[d.length];
System.out.println();
for (int i=0; i<d.length; i++) {
c[i] = Y[d[i]];
System.out.print(c[i]+",");
}
System.out.println();
return c;
}
‫תוכנית בדיקה‬//
public static void main(String[] args) {
//char X[] = {'a','b','a','c','t'};
//char Y[] = {'b','a','a','b','c','a'};
//char X[] = {'c', 'a', 'b', 'c', 'a', 'b'};
//char Y[] = {'c', 'a', 'a', 'c', 'd', 'b'};
char X[] = {'d','b','a','a','d','c','b','b','a','d'};
char Y[] = {'a','c','a','b','a','a','d','c','b','c'};
int numOfLetters=4, sizeX = 10, sizeY = 10;
// char X[] = MyLibrary.randomCharArray(sizeX,numOfLetters);
MyLibrary.printCharArray(X);
// char Y[]=MyLibrary.randomCharArray(sizeY,numOfLetters);
MyLibrary.printCharArray(Y);

LCS_LIS ls = new LCS_LIS(X, Y);


char [] ch = ls.LongestCommSeq(X, Y);
MyLibrary.printCharArray(ch);
}
}

Vous aimerez peut-être aussi