我正在使用 Java 开发一个简单的搜索引擎。
搜索引擎首先将包含要搜索的文件(txt 文件)的目录名称作为输入,并且在每个文件中包含许多单词。
然后搜索引擎为目录中遇到的所有单词创建一个倒排索引。引擎读取每个文件并将每个单词插入到 doubleLinkedList 中。
问题是,当我处理包含 100 个 .txt 文件的目录时:
索引时间:~201ms 排序时间:2463ms
排序一个目录包含 1000 个文件
索引时间:2461ms 排序时间:922654ms
排序一个目录包含 10000 个文件
大约 10 小时 :(
有什么方法可以减少执行时间?
我使用了插入排序,所以对排序算法有什么建议吗?
DoubleLinkedList 类的实现
public class DoubleLinkedList<T> {
private Node<T> head;
private Node<T> current;
public DoubleLinkedList(){
head = current = null;
}
public boolean empty(){
return head == null;
}
public boolean last(){
return current.next==null;
}
public boolean first(){
return current.previous == null;
}
public boolean full(){
return false;
}
public void findFirst(){
current = head;
}
public void findNext(){
current = current.next;
}
public void findPrevious(){
current = current.previous;
}
public T retrieve(){
return current.data;
}
public void update(T val){
current.data = val;
}
public void insert(T val){
if(head == null){
head = current = new Node<T>(val);
}else{
Node<T> tmp = new Node<T>(val);
tmp.next = current.next;
tmp.previous = current;
if(current.next != null)
current.next.previous = tmp;
current.next = tmp;
current = tmp;
}
}
public void remove(){
if(current == head){
head = head.next;
if(head!=null){
head.previous=null;
}
}else{
current.previous.next = current.next;
if(current.next!=null){
current.next.previous = current.previous;
}
}
if(current.next == null){
current = head;
}else{
current = current.next;
}
}
}