avatar
P*b
1
实时显示前一个小时,前一天,前一星期的总点击量,有什么比较efficient的方法?
谢谢
avatar
M*5
2
做这种的系统本身应该就会有一个保存浏览量的container(比如vector),比如说它
的保存单位是1min,那么用sliding window,过一分钟,淘汰最老的,进来最新的,可
以吗?
avatar
p*2
3

貌似就是这样。

【在 M********5 的大作中提到】
: 做这种的系统本身应该就会有一个保存浏览量的container(比如vector),比如说它
: 的保存单位是1min,那么用sliding window,过一分钟,淘汰最老的,进来最新的,可
: 以吗?

avatar
f*m
5
滑动这个窗口,每次只报告落入窗口内的点击次数,对吗?
上次看到有人用Interval tree.

【在 M********5 的大作中提到】
: 做这种的系统本身应该就会有一个保存浏览量的container(比如vector),比如说它
: 的保存单位是1min,那么用sliding window,过一分钟,淘汰最老的,进来最新的,可
: 以吗?

avatar
M*5
6
我是这么想的,没有看过interval tree,所以没法做比较。只是觉得sliding window
这个方法,没隔一分钟更新一次都是O(1)的效率,并且不需要额外的存储空间(假设系
统原来本身就有一个container)
你们都知道很多数据结构,怪不得我就面挂了。。。

【在 f*********m 的大作中提到】
: 滑动这个窗口,每次只报告落入窗口内的点击次数,对吗?
: 上次看到有人用Interval tree.

avatar
f*m
7
每隔一分钟就把落入(一分钟)窗口的click次数加起来吗?或者等要数据的时候再加。
要是这样的话,那计算每一天的click数(窗口大小为一天),其计算量不小啊。

window

【在 M********5 的大作中提到】
: 我是这么想的,没有看过interval tree,所以没法做比较。只是觉得sliding window
: 这个方法,没隔一分钟更新一次都是O(1)的效率,并且不需要额外的存储空间(假设系
: 统原来本身就有一个container)
: 你们都知道很多数据结构,怪不得我就面挂了。。。

avatar
M*5
8
你没有明白我说的意思,
std::vector num_time; //这个num_time每隔一分钟都会被push进一个新的值,
我们假设这是个系统的container,它里面已经有超过一个week的数据量
//initialization,
{
long sum_one_hour=0;
long sum_one_day=0;
long sum_one_week=0;
size_t len = num_time.size();
for(size_t i=1; i<=60; i++)
sum_one_hour += num_time[len-i];
for(size_t i=1; i<=1440; i++)
sum_one_day += num_time[len-i];
for(size_t i=1; i<=10080; i++)
sum_one_week += num_time[len-i];
}
// 每一分钟call一次
void onTimer(){
size_t len = num_time.size();
sum_one_hour = sum_one_hour - num_time[len-61] + num_time[len-1];
sum_one_day = sum_one_day - num_time[len-1441] + num_time[len-1];
sum_one_week = sum_one_week - num_time[len-10081] + num_time[len-1];
}
没有具体的写class的结构,只是个大概的idea,你可以自己组织这些结构在class里面
该怎么安排,应该不难写

加。

【在 f*********m 的大作中提到】
: 每隔一分钟就把落入(一分钟)窗口的click次数加起来吗?或者等要数据的时候再加。
: 要是这样的话,那计算每一天的click数(窗口大小为一天),其计算量不小啊。
:
: window

avatar
f*m
9
哦,了解,我也想着用一个计数器什么的,不过没有楼主这么具体。
这个方法看样子挺有效的,若是container存在这个假设成立的话(应该总有一个东西
存储不同时刻的点击量)。

【在 M********5 的大作中提到】
: 你没有明白我说的意思,
: std::vector num_time; //这个num_time每隔一分钟都会被push进一个新的值,
: 我们假设这是个系统的container,它里面已经有超过一个week的数据量
: //initialization,
: {
: long sum_one_hour=0;
: long sum_one_day=0;
: long sum_one_week=0;
: size_t len = num_time.size();
: for(size_t i=1; i<=60; i++)

avatar
s*0
10
skip list应该可以

【在 P*******b 的大作中提到】
: 实时显示前一个小时,前一天,前一星期的总点击量,有什么比较efficient的方法?
: 谢谢

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。