python底层算法,DGIM算法及其Python实现

引言前两个月学习DGIM算法的时候,实现了一下。最近整理代码时发现还有些问题,于是重新写一份,顺带将相关内容整理成blog。在许多数据挖掘场景中,在分析挖掘的时候我们通常都已掌握了所需的全部数据集。数据流(Data Stream)跟数据集(Dataset)所不同的是,数据流是非静态的,它的分布随时间而变化,它可以是无限长度的,有些场景下数据流入速度十分快。一般来说,对于数据流的处理有如下两种方式对...
摘要由CSDN通过智能技术生成

引言

前两个月学习DGIM算法的时候,实现了一下。最近整理代码时发现还有些问题,于是重新写一份,顺带将相关内容整理成blog。

在许多数据挖掘场景中,在分析挖掘的时候我们通常都已掌握了所需的全部数据集。数据流(Data Stream)跟数据集(Dataset)所不同的是,数据流是非静态的,它的分布随时间而变化,它可以是无限长度的,有些场景下数据流入速度十分快。一般来说,对于数据流的处理有如下两种方式

对数据流进行采样

通过滑动窗口进行处理

假如我们要计算比特流最近的N位中有多少为1的位,N(滑动窗口的大小)非常大,我们无法存储这最近的N位数据,在这种情况下我们是无法得知准确的答案的。但是,对于一个差不多的答案,我们是可以接受的。DGIM算法可以给我们一个近似的答案,对于一个数据流只需使用O(log N)的空间,结果误差不超过50%。

DGIM算法

DGIM算法的主要思想是用bucket来记录数据流中的1的个数,它保存一个范围内1的个数(记作size以方便说明)以及该范围的结束位的时间戳,它记录的1的个数必须是2的指数大小。

对于任意某一个size,系统运行时的某一时刻都只会存在要么1个要么2个该size的bucket,如果有3个size的bucket,则将其中时间戳最早的两个bucket合并为大小为两倍size的bucket。这里可以联系2048小游戏的规则来理解一下。

所有的bucket的时间戳都不会重叠。bucket按照size排序,所以时间戳早的bucket的size大小是不小于时间戳比较晚的bucket的size。

当一个新的比特位进来之后,那些超出滑动窗口大小的bucket需要删除掉。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值