我的家庭任务是根据已知的有限词典解读一个句子。
实施例: Dict - 显示,打击,而
然后代码12345 8291作为输入。 如果我们将检查可能性,唯一的选择是“while show”。
有些人可以给我一个方向或一个已知的算法来处理这个问题。 伪代码或java会很棒。
感谢
答案 0 :(得分:0)
您需要实现某种回溯或其他搜索技术。我建议采用以下方法:
编辑:在步骤2中,困难的部分是确定可以将哪些字母(如果有的话)分配给下一个密码数字。假设我们正在跟踪解码的当前字,并且我们想要处理字中的下一个密码数字。我们已经制作了密码数字分配的全球地图。逻辑可能是这样的(在Java-ish伪代码中):
Set assignableLetters(String wordSoFar, int nextCipher) {
Character assignment = map.get(nextCipher);
Set set = new Set();
if (assignment != null) {
// The next cipher is already assigned. Add the assignment to the
// return set only if it is compatible with the dictionary contents
if (dictionary.hasWordsWithPrefix(wordSoFar + assignment)) {
set.add(assignment);
}
} else {
// The next cipher is not assigned. We will return a set of all
// compatible characters that can be assigned to it.
for (Character c : unassignedCharacters()) {
if (dictionary.hasWordsWithPrefix(wordSoFar + c)) {
set.add(c);
}
}
}
return set;
}
如果返回空集,则当前分配(在调用方法之前)与字典不兼容,搜索必须回溯。否则,搜索应该从集合中一次选择一个作业并继续,根据需要进行回溯。
不是尝试每个未分配的字符并询问字典是否兼容,而是直接查询字典以查找兼容的下一个字符列表并将其与未分配的字符集相交,这可能更有效(但在逻辑上等效)。 / p>