em gà java lắm, các bác giúp em với
thuật toán này so khớp với các mẫu "pattern" mình nhập vào với nội dung file (save ở định dạng unicode)
các bác tạo 1 file text ở desktop chạy thử & nhập mẫu để so với nó
in file ra thì được nhưng đến dòng đưa vào biến s thì bị lỗi
nếu ko đưa file vào mà gán giá trị sẵn cho s thì chạy bthg` =.=
Mã:
package ahofix;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;
import java.util.Scanner;
public class Ahofix {
static final int ALPHABET_SIZE = 26;
Ahofix.Node[] nodes;
int nodeCount;
//Bước 2.Xây dựng hàm Goto Function
public static class Node {
int parent;
char charFromParent;
int suffLink = -1;
int[] children = new int[ALPHABET_SIZE];
int[] transitions = new int[ALPHABET_SIZE];
boolean leaf;
{
Arrays.fill(children, -1);
Arrays.fill(transitions, -1);
}
}
//Bước 3. Xây dựng hàm Failure Function
public Ahofix(int maxNodes) {
nodes = new Ahofix.Node[maxNodes];
// create root
nodes[0] = new Ahofix.Node();
nodes[0].suffLink = 0;
nodes[0].parent = -1;
nodeCount = 1;
}
//Bước 4. Xây dựng hàm Output Function
public void addString(String s) {
int cur = 0;
for (char ch : s.toCharArray()) {
int c = ch - 'a';
if (nodes[cur].children[c] == -1) {
nodes[nodeCount] = new Ahofix.Node();
nodes[nodeCount].parent = cur;
nodes[nodeCount].charFromParent = ch;
nodes[cur].children[c] = nodeCount++;
}
cur = nodes[cur].children[c];
}
nodes[cur].leaf = true;
}
//Bước 5. Thực hiện quá trình Transition
public int suffLink(int nodeIndex) {
Ahofix.Node node = nodes[nodeIndex];
if (node.suffLink == -1)
node.suffLink = node.parent == 0 ? 0 : transition(suffLink(node.parent), node.charFromParent);
return node.suffLink;
}
public int transition(int nodeIndex, char ch) {
int c = ch - 'a';
Ahofix.Node node = nodes[nodeIndex];
if (node.transitions[c] == -1)
node.transitions[c] = node.children[c] != -1 ? node.children[c] : (nodeIndex == 0 ? 0 : transition(suffLink(nodeIndex), ch));
return node.transitions[c];
}
//B6
public String ReadFile(String pathFile) {
try
{
//Tạo một con trỏ để connect đến pathFile
FileInputStream fileInPutStream = new FileInputStream(pathFile.trim());
//Đọc file với Unicode
Reader reader = new java.io.InputStreamReader(fileInPutStream, "Unicode");
//Đọc từng byte
BufferedReader buffReader = new BufferedReader(reader);
//Tạo 1 stringBuilder để lấy từng dòng (line) của file
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = buffReader.readLine()) != null)
{
//stringBuilder cho phép cộng dồn "append"
stringBuilder.append(line + "
");
}
reader.close();
return stringBuilder.toString();
}
catch(IOException io)
{
System.out.println("File not found ! " + pathFile);
}
return "";
}
public void Process()
{
Ahofix ahoCorasick = new Ahofix(1000);
System.out.println("enter number of patterns:");
Scanner nhap = new Scanner(System.in);
int n=nhap.nextInt();
String q , pattern,s,pathFile;
for(int i=1;i<=n;i++)
{
System.out.println("enter pattern number "+i+" :");
q=nhap.next();
ahoCorasick.addString(q);
}
System.out.println("enter pathfile:");
pathFile=nhap.next();
s=ahoCorasick.ReadFile(pathFile);
//s=nhap.next();
System.out.println(s);
int node = 0;
for (char ch :s.toCharArray()) {
node = ahoCorasick.transition(node, ch);
}
if(ahoCorasick.nodes[node].leaf==true) System.out.println("Match !");
else System.out.println("Not match !");
}
public static void main(String[] args) {
Ahofix ahoCorasick = new Ahofix(1000);
ahoCorasick.Process();}
//C:\\Users\\Dell\\Desktop\\file.txt
}
run:
enter number of patterns:
1
enter pattern number 1 :
bc
enter pathfile:
C:\\Users\\Dell\\Desktop\\file.txt
abc
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -87
at ahofix.Ahofix.transition(Ahofix.java:69)
at ahofix.Ahofix.Process(Ahofix.java:123)
at ahofix.Ahofix.main(Ahofix.java:130)
Java Result: 1
View more random threads:
Với sự đa dạng và phong phú về mẫu mã và giá cả, choxeonline.vn hứa hẹn sẽ là địa chỉ tin cậy cho những ai đang tìm kiếm chiếc xe ô tô ưng ý. Từ những mẫu xe hạng sang đến những chiếc xe gia đình...
Khám Phá Đa Dạng Sản Phẩm Xe Ô Tô...