求上亿个8字节整数计数算法

一见 2009-03-10 09:16:32
约有上万个实体,需要统计不同用户访问的次数,每个用户使用一个8字节随机整数表示(可叫作用户号),对不同实体,访问的用户个数不等,且差异很大,高的达到几千万,小的只有几十万、几万、甚至更低。需要一种高效的算法来支撑记录访问这些实体的用户数,一个用户访问N个实体时,算N次,但一个用户访问同一个实体M次时,只次一次。最终目的是记录用户数,所以只要能达到目标,可以不用记录具体的用户号。

测试发现,采用stl中的hash_set,当数量达到百万级别的时候就已经不行了。一直在思考一种更强的算法,感觉应当使用类似位图的作法,这样占用的空间也小,但还没有想出来如何实现。CU高手如云,希望可以得到一点指点。
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbaby 2009-03-11
  • 打赏
  • 举报
回复
CU的,跑这里来了
cunsh 2009-03-11
  • 打赏
  • 举报
回复
对时间和空间的要求分别到多少。
最好给一个测试代码的大概样子。 测试数据是怎么来的。 等等。。
elmnd 2009-03-10
  • 打赏
  • 举报
回复
俺就想到大数运算而已。。。
Luc_If_Err 2009-03-10
  • 打赏
  • 举报
回复
分组就是了嘛, 将不同类别的实体放在不同的分组中.
stl很好啊.
如果hash_set不够用, 那就vector<hash_set>.

如果一定要将数据平铺着, 那也不需要考虑什么具体的算法.
可以尝试一下berkeley db, 它对于大量的数据组合也支持的比较好.
newflypig 2009-03-10
  • 打赏
  • 举报
回复
看看线段树的算法,如果用暴力计算很可能超时
  • 打赏
  • 举报
回复
感觉应当使用类似位图的作法,这样占用的空间也小,但还没有想出来如何实现
。。大哥,位图貌似是空间换时间吧。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧