返回信息流学弟的大二程序设计选的是中文分词,扩展部分是成语搜索,怎么只给一个字搜索词库里包含这个字的所有词呢,只有遍历的方法么?求学长指点下思路啊
这是一条镜像帖。来源:北邮人论坛 / cpp / #87278同步于 2015/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
成语搜索程序有些不理解啊
w153409018
2015/5/29镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
这章的主要任务是用的散列表,结果拓展程序还得用遍历。。。没理解编书老师的逻辑
【 在 nuanyangyang 的大作中提到: 】
: 关键是汉语一共也只有那么几千个成语,遍历太快了,感觉不值得用“高效”的方法。
学弟愚昧,学长可否详细说下,标权重后怎么搜索?
【 在 iFadeToBlack 的大作中提到: 】
: 只给一个字你也只能硬搜了吧
: 不过也许还真有别的办法,比如先对词库每个词标注出权重然后根据权重搜+排序
: 你觉得呢
【 在 w153409018 的大作中提到: 】
: 这章的主要任务是用的散列表,结果拓展程序还得用遍历。。。没理解编书老师的逻辑
如果真的要用散列表的话,这样:
制作一个散列表,键是所有成语里出现的每一个字,值是一个列表,所有包含该字的成语。比如:
{"狗":["鸡飞狗跳", "鸡鸣狗盗", "狗仗人势", "狗屁不通", ...], "鸡":["闻鸡起舞", "鸡飞蛋打", "鸡犬不宁", ...]}
这是搜索引擎常用的倒排索引结构。查找的时候很容易根据单字找到包含该单字的所有词。当然,一个成语会在多个字的列表里出现(比如同时含有鸡和狗的),注意查重。
【 在 nuanyangyang 的大作中提到: 】
:
: 如果真的要用散列表的话,这样:
: 制作一个散列表,键是所有成语里出现的每一个字,值是一个列表,所有包含该字的成语。比如:
: ...................
value存成语编号是不是好一点,节省内存,而且当输入两个字的时候,分别对两个字的hash结果求并就可以得到最终结果了
【 在 inaadversity 的大作中提到: 】
: value存成语编号是不是好一点,节省内存,而且当输入两个字的时候,分别对两个字的hash结果求并就可以得到最终结果了
可以。如果用有垃圾回收的语言,反正都是引用。C++的话,反正标准库里的string类型是真的存值的。