我正在实施基于电话键盘的字母搜索,例如电话键盘 1
当用户输入时,比方说2,我在组合中得到{A,B,C}。当用户键入23时,我在组合中得到{AD,AE,AF,BD,BE,BF,CD,CE,CF},依此类推。如果我继续打字并进行组合,我会得到数以千计的组合,这使得搜索过程非常缓慢。所以现在我想实现一个删除像CF BD CD这样的不合逻辑组合的算法,我的意思是逻辑上没有人的名字从这些组合开始,也许两个辅音没有元音。所以这种方式我想缩小我的搜索范围。知道这种状态机的人,用C实现吗?
答案 0 :(得分:4)
您可以根据您要搜索的数据集构建trie个有效前缀。匹配部分输入应该非常容易。
答案 1 :(得分:1)
请记住,当谈到语言数据时,“不合逻辑”并不是“不太可能”的良好代理。在名称方面尤其如此。例如,根据英语中“辅音”的标准定义,我的姓氏以四个辅音开头。如果它是以德国时装之后写的,它将从五开始。在考虑这些问题时,请记住:
m
扮演音节核的角色,就像元音一般用英语做的那样。因此柏柏尔人的名字可能看起来像CCmC
(其中C代表辅音)并且在那种语言中是完美的。一个柏柏尔血统的人当然不会使用英语中的类似拼写法,这是一个天真的系统会排除“不合逻辑”的sh
代表一种声音,见第1点),但在转录外来词时尤其如此。因此,除非您非常了解您所期望的名称的拼写规则,否则您可能会使用天真系统排除合法名称。