----------------解决方案--------------------------------------------------------
计算机科学的两大基础目标,就是发现可证明其执行效率良好且可得最佳解或次佳解的算法。而启发式算法则试图一次提供一或全部目标。 例如它常能发现很不错的解,但也没办法证明它不会得到较坏的解;它通常可在合理时间解出答案,但也没办法知道它是否每次都可以这样的速度求解。
有时候人们会发现在某些特殊情况下,启发式算法会得到很坏的答案或效率极差,然而造成那些特殊情况的数据结构,也许永远不会在现实世界出现。因此现实世界中启发式算法很常用来解决问题。启发式算法处理许多实际问题时通常可以在合理时间内得到不错的答案。
有一类的通用启发式策略称为元启发式算法(metaheuristic),通常使用乱数搜寻技巧。他们可以应用在非常广泛的问题上,但不能保证效率。
----------------解决方案--------------------------------------------------------
谢谢,斑竹阿,我了解了,但是还有个问题
import java.util.*;
import java.net.*;
import java.io.*;
import org.w3c.tidy.Tidy;
import com.objectspace.jgl.PriorityQueue;
import org.w3c.dom.*;
import edu.gatech.disl.qr.util.*;
//import edu.gatech.disl.qr.wrapper.base.*;
import edu.gatech.disl.qr.xml.Piece;
public class Test
{
public int extractObjects(Node parsedPage) {
TreeTuple treeTuple = new TreeTuple(null);
TreeTuple rootTuple = new TreeTuple(null);
if (results == null) {
results = new Vector();
}
Node subtree = getSubtree(parsedPage, treeTuple, rootTuple, getSubtreePath(), getSubtreeRule());
finalSubtree = subtree;
TagHeuristic heuristic = new HighestCountTagHeuristic(null, configuration);
heuristic.process(subtree);
out.println("Tag count: "+heuristic.getTagCount());
fireWrapperBeganExtraction();
int count = printResults(finalTag, heuristic, treeTuple, rootTuple, results);
return count;
}
public static void main(String args[])
{
System.out.println("This is a test!");
Node p = null;
//Node p = new Node(3,3);带参数的形式
//Node p = new Node();//不带参数的形式
System.out.println("There are " +extractObjects(p);
}
}
在这个程序里TagHeuristic heuristic = new HighestCountTagHeuristic(null, configuration);
heuristic.process(subtree);应该就是启发式算法部分把,他的意义是什么啊?
----------------解决方案--------------------------------------------------------