从若干多个 无序 的汉字中选择出其中的 成语 ,有什么高效地方法吗?

python玩微信的成语猜猜看,要从24个汉字中选择出其中的成语

先说一下我的方案:将24个汉字的所有4字组合暴力穷举,分词(jieba),结果中存在4个字的,push到结果中,再一个一个试。

但是暴力穷举复杂度呈指数上升,另一个游戏叫成语连连看还是什么的,五十多个汉字,穷举不了了。。。

所以大家有什么好办法吗?

ps:jieba分词有时(比较频繁)会出现分不出来成语的情况,爬了个成语词典作为自定义词典,效果立竿见影,但仍然偶尔会出现 明明词典中有、但就是分不出来 的情况,诸位能告诉我是什么原因吗?(我的自定义词典没有词频和词性)

阅读 4.1k
2 个回答

本问题已解决,解决方法是找了一个比较大的词库,取代之前的基于jieba分词的成语搜索。感谢大家的帮助。

新手上路,请多包涵

基本思路:
假设你已经有了一个成语词典。
对于24个汉字,从第一个开始
{
找出该汉字开头的所有成语,对符合条件的所有成语,
判断第二个汉字是否包含在24个汉字中,对符合条件的依次判断第三个第四个,
找到则跳出循环。
}
这个最坏需要遍历24遍词典。
优化:
对于成语词典,假设是按拼音顺序排列的。
首先对于你的24个汉字,按拼音顺序排列一遍
从第一个开始,查找该汉字开头对应的成语,依次判断成语的第二三四个汉字。
如果找到则跳出,否则到下一个汉字,继续向下查找词典。
这个最坏只需要1遍。
其中有个问题,假如有一个汉字没有对应的成语怎么办,所以词典可能也要包含该汉字来做标记(低效率),或者对拼音比大小来判断该汉字是否已经掠过了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题