【问题标题】:Creating dictionary with binary search tree and hashing使用二叉搜索树和散列创建字典
【发布时间】:2010-09-28 15:44:03
【问题描述】:

我即将创建一个“智能”字典,如果用户的单词不在字典中,它可以生成相似的单词。

字典从读取包含单词的文件开始,单词应该添加到二叉树和哈希表中。哈希表用于判断词或相似词是否在字典中,哈希表会产生布尔效应,因此我们可以快速查看二叉搜索树是否包含该词。哈希表必须是我们字典长度的十倍左右,因为我们还包括与哈希表相似的单词。 作为 Java 的新手,我想了解如何制作适合我情况的哈希函数的提示和建议。

public String [] similarOne(String word) {

    char [] word_array = word.toCharArray();
    char [] tmp;

    String [] words = new String[word_array.length-1];

    for(int i = 0; i < word_array.length - 1; i++) {
        tmp = word_array.clone();
        words[i] = swap(i, i+1, tmp);
    }
    return words;
}

public String swap(int a, int b, char [] word) {
    char tmp = word[a];
    word[a] = word[b];
    word[b] = tmp;

    return new String(word);
}

【问题讨论】:

  • 这在很大程度上取决于您是要尝试匹配具有共同开头的单词还是处理拼写错误等。首先,您所说的“用户的工作不在字典中”是什么意思“?单词拼错了吗?这个词是否拼写正确但复数形式?你的意思是美式英语和英式英语之间的映射吗?
  • “相似词”是什么意思?你的意思是一个听起来相似的词吗?那有类似的定义吗?这里的一个关键问题是相似性是否具有传递性。也就是说,如果 A 与 B 相似,B 与 C 相似,那是否意味着 A 必须与 C 相似?如果是这样,那么将所有相似词映射到一个通用标记的东西对你有用。如果不是,假设“quick”与“fast”相似,“fast”与“tight”相似,但“quick”与“tight”不同,那么数据结构一定更复杂。
  • “哈希表将具有布尔效应,因此我们可以快速查找二叉搜索树”是什么意思?我不确定你是否认为哈希表使用树——它没有——或者你是否打算让哈希表和二叉树以某种方式相互关联。
  • 这是一个学校作业。我用来生成相似词的方法。该算法应该是这样工作的:读取文件时,将单词插入二叉树和哈希表。当用户给出字符串输入(应该是用户想要关注的词)时,应该在哈希表中关注该词,如果该词在哈希表中,则算法应该开始在二进制中查找该词树。如果在二叉树或 hasttable 中没有找到该单词,则应该生成相似的单词并以相同的方式对其进行测试,如果有人找到,则打印出建议。

标签: java hash binary-search-tree


【解决方案1】:

谷歌搜索“java metaphone”和“java soundex”。

例如,您可以尝试使用Metaphone 编码的结果作为哈希键。

【讨论】:

    【解决方案2】:

    我建议你应该使用Triepatricia-trie。我不知道你所说的相似词是什么意思。但我猜它就像谷歌建议一样。我写了一个小program以前会自动完成。它与 patricia-trie 有依赖关系,因此必须包含它。您可以将其用作参考。

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多