游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4841|回复: 7

关于实时动态排名的算法?

[复制链接]

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-16 22:04:00 | 显示全部楼层 |阅读模式
比如像卖书的网站,怎么算出最受欢迎的top100?
怎样算保证最快最简便?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-16 22:45:00 | 显示全部楼层

Re:关于实时动态排名的算法?

如果是数据库:
select top 100 from book order by visted desc
如果不是数据库,最简单的,用stl,定义一个带comparetor的容器,能自动按你指定的要求排列对象。

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-17 11:33:00 | 显示全部楼层

Re:关于实时动态排名的算法?

没讲到点子上啊,如果记录数有几亿也这么去算?能不能拿个具体点设计方案,计算量要求最小,然后能比较动态。

17

主题

166

帖子

174

积分

注册会员

Rank: 2

积分
174
发表于 2008-5-17 16:39:00 | 显示全部楼层

Re:关于实时动态排名的算法?

比如按点击数来算
1.数据的实时更新
万数量级的放一个map中(ISBN到点击数的映射表,以下同)
千数量级的放一个map中
百数量级的放一个map中
等等
2.查找
从万数量级开始,递归划分,9万的,8万的,7万的,等等
只要100个满了就退出

开始排序的间隔设多大可以参考从网站以往的数据

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-17 17:15:00 | 显示全部楼层

Re:关于实时动态排名的算法?

楼上的想法和空间划分的算法类似,可以减少计算量,但是计数量统计怎么优化?比如我要算出近2小时的计数量。然后每隔5分钟或10分钟更新一次。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-17 20:24:00 | 显示全部楼层

Re:关于实时动态排名的算法?

如果涉及到几亿的数据量的排序,那基本上可以说是设计思路本身就有问题的。这样的数据排序难道不能避免吗?你可以设置几个数据区域,范围分区来存放数据,类似于orale的分区表结构

另外实在不能避免,建议你借鉴一下数据库的分区+索引机制,其存储结构本身就是按顺序的 ,我提到的stl里面的compare接口也是起这个作用的,你想的问题stl其实早就实现了

15

主题

56

帖子

56

积分

注册会员

Rank: 2

积分
56
发表于 2008-5-17 21:46:00 | 显示全部楼层

Re:关于实时动态排名的算法?

分区能理解,但是分区和compare有什么关系?

现在的问题是收集信息,总不能每个时间段弄个字段,然后更新的时候把这些字段相加再去比较,即使有个累加字段计算量还是挺大的。你说算几亿的设计思路有问题,当然有问题了,我不正在问怎么设计吗。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2008-5-18 00:08:00 | 显示全部楼层

Re:关于实时动态排名的算法?

stl的compare能实现自动排序,有点类似于索引
你把你的数据分为一些大的范围区域,一个区域建立一个容器
分区+自动排序 还不明白吗?这其中还要用到序列化的策略,不可能实时加载所有的数据,最多一次加载某一个页或区的数据

要我怎么说呢,还是你自己好好想想吧,也许可以有更好的办法
建议你用纯数据库内部来解决你的问题(索引+范围分区就搞定)效率高,非数据库可以用上面的做法,复杂的事情都要由你自己来做了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 12:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表