GOOGLE的一道题

ace00 2008-04-02 12:04:38
给定一个字符串例如“appleuwebananasdf”,和一个词典库(里面有apple ,banana ……),将其分词。结果应该为 “apple uwe banana sdf ”。
注意考虑词典库的大小。

请给出实现代码,并描述其时间复杂度。

大家讨论一下。

扫描字符串需要O(n^2),然后查字典用HASH表?内存占用太高了。有什么好办法?
...全文
764 点赞 收藏 31
写回复
31 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cllr 2008-05-29
你可以去找一下double-array trie,这个对于静态字符串查找效率比较高
回复
trie树
回复
xiang37 2008-05-27
[Quote=引用 25 楼 fuqd273 的回复:]
xuexi
[/Quote]
回复
梦无痕123 2008-05-26
up
回复
huangyongcheng 2008-05-25
觉得字典可以用键树存储,然后再查找匹配。
回复
Dancing_Sea 2008-05-24
字典树比较有效
hash方法数据量中等规模的时候比较不错

10万词汇,hash就慢了,字典树查询不比hash慢

另外实际使用中,字典都是存好的,并不是随用随建立

他没有提最大最小分词,那么就都采纳。无非就是栈
搜索要的是全面
回复
fuqd273 2008-05-14
xuexi
回复
quanwuling 2008-05-14
扫描字符串的时侯发现A字符,则在内存中迅速建立A索引(以a开头)的词典HASH,这样词典在内存中就不会太大,而且也可以完整的将以a开头的单词配置完。
a匹配完后匹配剩下的,以u开头的,这样在内存中迅速再建立u索引词典HASH。

这样几乎只需要一次小的扫描,不需要扫描整个字符串。而且扫描后的单词不需要再次处理。关键点应该是处理词典库。我觉得词典库还是应该以一种优化的索引方式存储,这样加载以a或者其它字符开头的词典时效率是最快的。
回复
shu_yoyo 2008-05-11
想想
回复
wwb198686 2008-05-11
就是有点难度啊,要好好的想一下的。
回复
baiyizhujian 2008-05-10
实质上有些难度的
回复
meiZiNick 2008-05-01
以后需再关注,现在先帮你顶一下
回复
UltraBejing 2008-04-30
都是很好的建议! 值得学习
回复
shshsh_0510 2008-04-08
这个感觉用hash不好,用b树之类,一般字典库在整个空间很稀疏,对于查找的否定结果应该效率更高
回复
ace00 2008-04-07
面试题目有机会吧代码写出来吗?
回复
azhen 2008-04-04
基本上对于这个问题,是很少用hash的,因为一般情况下,字典都是非常庞大,很可能在内存里面都存储不了....
比较通用的方法是建立一颗多路树,每个节点下面26个节点,a,b,c,d.....

然后使用反向减字最大匹配法进行切割匹配,这个是天网目前使用的中文切词方法.

如果字典中单词有n个,带切割的句子长度为m
那么时间复杂度是. mlgn

回复
ace00 2008-04-03
关注的人不多呀
回复
fire_woods 2008-04-03
[Quote=引用 10 楼 linyai 的回复:]
最少分词法,从后向前切,可以考虑一下,时间复杂O(n)* o(1)(HASH无冲突)
[/Quote]

能说一下具体实现吗?
回复
cyzhang811 2008-04-03
看来我还是菜鸟啊
回复
matchboy 2008-04-02
mark
回复
加载更多回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-02 12:04
社区公告
暂无公告