Advertisement
Advertisement

新足迹

 找回密码
 注册
新足迹 门户 IT专业论坛 查看内容

无聊想动脑筋的进来

2010-12-9 14:22| 发布者: righttang | 查看: 3706| 原文链接

其实这也是我昨天碰到的一个问题。。

手头有几十万条记录,为了便于叙述,这个记录就当作是“Family Name”吧,长度也就是英语单词。数据样本是随机的,并不能预先排序或者索引.(数据是XML格式,并没有放在数据库里,纯粹JAVA处理这些数据)

我现在的需求就是,统计出,最常用的15个姓氏,并且给出具体数字。比如说,姓Smith的,有2000个人,姓Wong的,有20个人。

于是,我也就随便写了个算法,遍历一遍,然后读一个判断一个,要是有了就加1,要是没有的话,就新增

全部读完,最后排序一下。

结果呢,就是150%CPU占用率(双核),30多秒的运行时间。。。

这个服务使用率非常高,大概一天会被点击上万下,每次的样本都不一样,样本小的,速度还行,1,2秒可以处理几千个记录。但是碰上大样本,直接服务器报警。所以呢我就想改进一下。

1.用模糊算法,由于这个要求并不是100%精确的数据,几十万个记录里,取一部分,能大概表示一下,赵钱孙里大概有多少。不过我也只是耳闻,没有实际用过。谁要了解的指点一下
2.改进算法,我也想了半天,到底用什么样的算法好呢?

贴一下数据XML样本
贴一下XML的样本,需要统计的,就是XML里面的的value,以逗号分隔。当前算法,已经在遍历的时候,就做了分类了,还是慢。。。。

<group value="ENDORSED,Interactive,Digilearn,Focus groups,Furnishings,Furniture,Houses,Learning Federation,Locations,Pinyin,Positioning,Prepositional phrases,Prepositions,Questions,Rooms,Scootle,TL,Chinese languages">
<count>1</count>
</group>
<group value="ENDORSED,Interactive,Digilearn,German language,Illustration,Learning Federation,Scootle,Simple sentences,Sound effects,TLF,Adjectives">
<count>1</count>
</group>

[ 本帖最后由 righttang 于 2010-12-9 17:15 编辑 ]
Advertisement
Advertisement


Advertisement
Advertisement
返回顶部