Java实现双数组Trie树(DoubleArrayTrie,DAT) (三)

2014-11-24 08:07:36 · 作者: · 浏览: 7
}

}
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;

import javax.xml.crypto.Data;


public class Main {

public static void main(String[] args) throws Exception {
ArrayList words = new ArrayList();
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("E:/兔子的试验学习中心[课内]/ACM大赛/ACM第四届校赛/E命令提示/words3.dic")));
String s;
int num = 0;
while((s=reader.readLine()) != null)
{
words.add(s);
num ++;
}
DoubleArrayTrie dat = new DoubleArrayTrie();

for(String word: words)
{
dat.Insert(word);
}

System.out.println(dat.Base.length);
System.out.println(dat.Tail.length);

Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
String word = sc.next();
System.out.println(dat.Exists(word));
System.out.println(dat.FindAllWords(word));
}

}

}

下面是测试结果,构造6W英文单词的DAT,大概需要20秒


我增长数组的时候是每次长度增加到2倍,初始1024

Base和Check数组的长度为131072

Tail的长度为262144

\






摘自 New Day New Plan