search用字符串列表输入数字(类似于t9字典)

search Input number with string list(similar to t9 dictionary)

本文关键字:类似于 t9 字典 数字 字符串 列表 输入 search      更新时间:2023-10-16

T9字典是如何工作的?它背后的数据结构是什么。例如:有一个16个单词的列表/字典(全部大写)。您将以数字形式输入,相应的输出应该是与dictionary中的数字匹配的单词。如何在C/C++/JAVA中实现这一点。[如果有任何单词添加到列表中,它也应该支持]

2:A/B/C
3:D/E/F
4:G/H/I
5:J/K/L
6:M/N/O
7:P/Q/R/S
8:T/U/V
9:W/X/Y/Z
LIST{DRAWING,PAINTING,DANCE.....}

输出窗口示例:

Input : 3729464
output : DRAWING

如果简单直接查找完整单词就足够了,最好编写一个函数,用单词的相应数字替换单词的字符:

A,B,C  -> 2
D,E,F  -> 3

等等。

然后将该函数应用于所有字典条目,并将结果存储为关键字,但将原始形式存储为哈希表(或类似的数据结构)的值。由于每个数字可以表示多个不同的字符,因此同一个键可能必须映射到多个值。您可以使用字符串列表作为值类型:

entries(3829464)  = [DRAWING]
entries(72468464) = [PAINTING]
entries(843)      = [THE,TIE]

等等

然后,您可以直接根据哈希的键搜索给定的输入数字序列,并轻松地将所有候选项检索为现成的列表。

实际的T9函数也支持延续:输入一个数字序列,并检索所有可能是输入序列延续的字符串。为此,搜索trie是一个很好的数据结构。同样,字符转换产生的数字最好用作trie的转换标签,字符串的原始形式最好存储在接受状态。您可能希望在内部节点中存储其他信息,例如在给定节点下方的子树中找到的可接受状态的总数;这将帮助您在O(1)时间内决定是开始遍历子树以检索所有的连续候选项,还是更好地等待用户给出更多的输入。

这不是问题的答案:

T9不是也有猜单词的功能吗?我假设里面有一棵有重量的树,猜测到目前为止输入的数字序列中最可能的(三个左右)单词。那将比O(1)大得多。

这似乎不是真的需要,但我只是好奇。