通过邻接表在单词表中表示关系以快速搜索

时间:2018-10-09 15:22:49

标签: java data-structures adjacency-list hash-function word-list

我正在编写一个程序,该程序应该读取一个单词文件,然后通过从开始字到一个会有一个字母不同的相邻单词,找到一个单词到另一个单词中最短的一个,例如:Startword:dog endword :for可能是:“ dog-> fog-> for”。

我的想法是在相邻列表中进行BFS。除了我的Graph(相邻列表)之外,所有内容都在我的代码中运行。问题是我想将单词散列到图中的索引,但是为此需要知道列表的大小。

我首先添加一个包含整个单词表的向量,然后使用该向量的大小设置arraylist的大小,然后迭代该向量以将单词散列到arraylist中。

我的相邻列表的类型:

    ArrayList<LinkedList<String>> adj_list;

这是我的用法:

    public void adda(Vector<String> v){
    M = v.size();
    adj_list = new ArrayList<LinkedList<String>>(M);
    for (int i = 0; i < M; i++){
        add(v.get(i));
    }

    void add (String word){
    int z = hash(word);
    for (int i = z; i < M; i++){
        if(adj_list.get(i)== null){
            z=i;
            adj_list.add(new LinkedList<String>());
            break;

哈希函数:

   public static int hash(String key) {
        int i;
        int v = 0;
        for (i = 0; i < key.length(); i++) {
            v += key.charAt(i);
        }
        return v % M;

我有一种强烈的感觉,就是添加一个向量以从中获取元素并将其添加到arraylist的想法足够愚蠢。但是,我无法提出任何更好的,可行的想法(而我现在拥有的也没有任何想法)。我是否应该使用邻接表?散列单词是个好主意还是有更好的方法?有谁了解我正在尝试创建哪种类型的程序,并且有任何想法可能会有所帮助?

0 个答案:

没有答案