数据流基本问题--独立元素计数(二)

该篇文章中问题的定义和上一篇文章《数据流基本问题--独立元素计数(一)》点击打开链接中一样。不过该篇文章里能给出-近似的算法。

一、算法的基本思想

该篇文章中的算法是上一篇文章中算法的改进。这里不再记录流中元素zeros(h(j))的最大值,而是将满足所有的元素放入到B中。如果流中有d个独立元素,那么平均会有个元素满足。所以应该是d的一个比较好的估计(|B|指的是B中元素总数目)。

二、算法的具体过程

算法的伪代码如下图所示。将一个元素j添加到B中时,是以g(j)和zeros(h(j))组成一对加进去的。没有直接存元素而是存元素哈希后的结果是为了节省空间的考虑。而且也存放zeros(h(j))是为了当B需要删除元素时需要用到它。

三、算法的评估

为算法结束后|B|的大小,t为算法结束后z的取值。则对d的估计为:

可以证明,的期望和方差如下:

如果t=0,说明算法运行过程中并没有对z进行加一的操作。这时候计算的结果也就是|B|为d的精确解。

如果t>1,假设Fail事件为不是d的-近似。即:

可以证明

假设哈希函数g(i)可能有冲突造成的影响,上述算法结果是对d的-近似。

通过使用median trick,我们可以将算法提高到对d的近似(对所有)。

时间: 2024-10-05 02:51:05

数据流基本问题--独立元素计数(二)的相关文章

数据流基本问题--矩估计

在前面我们谈到了独立元素计数的问题.在本文中,我们将独立元素计数问题推广到更一般的问题,也就是矩估计问题.我们将先介绍矩的定义,然后介绍一个无偏的估计方法,最后介绍如何改进结果.这里还是讨论内存容量不够的情况. 一.矩估计 如果一个数据流,其中m为数据流的大小,.我们可以定义每个元素 出现的次数为,其中为第i个元素出现的次数.则流的k阶矩(k-th moment)是所有出现次数取k次方的和. 下面我们看看k的一些特殊取值. 1.如果k=0时,,所以0阶矩就是数据流中独立元素数目,我们可以使用前面

数据流基本问题--确定频繁元素(二)

我们之前在数据流基本问题--确定频繁元素(一)中提到了频繁元素的一个计算问题(找出出现次数超过m/k的元素),里面的算法返回的结果里肯定包含出现次数超过m/k的元素,但是也可能包含不超过m/k的元素(false positive).对于这个缺点,必须得进行额外一次的重新扫描,以确定最终答案.我们只允许进行一次的扫描,那么该怎么去做呢?这里我们简单讨论下lossy counting算法. 其实问题是一样的,这里换个说法来叙述.我们定义两个参数,一个是支持度阈值s,一个是允许错误范围参数().如果我

数据流基本问题---采样问题

在数据流处理中的一个常见问题就是数据采样问题.我们希望从流中选择一个子集,以便能够对它进行查询并给出统计性上对整个流具有代表性的结果. 一.蓄水池采样 具体问题是我们要从数据流中随机抽取k个元素.如果数据流长度m事先已经知道,那这个问题就非常简单,每个元素以k/m的概率选取即可.但这个问题要求m未知,那就不太好搞了.这个问题的解法是保存一个k大小的窗口.数据流的前k个元素依次加入到窗口.对于数据流第i个元素(i>k),以k/i的概率替换窗口中的某个元素.最终窗口的元素出现概率均为k/m. 下面使

已知一个数组,将所有元素乘二存储到原数组

/** * */package Student_System;import java.util.*;/**Homework11 * *ArrayDemo05 * 已知一个数组,将所有元素乘二存储到原数组 * @author 读你一世* * QQ: 1816274408 *2017年4月13日下午10:05:22 * */public class ArrayDemo05 { public static void main(String[] args){// 确定数组元素,便于赋值 Scanner

JS-002-JavaScript 操作常见 web 元素之二-修改元素属性(以按钮示例)

此文以修改 button 元素属性(例如:添加属性.修改属性.修改颜色样式.边框样式等)为简单示例,演示 js 修改 HTML 元素属性的基本方法,敬请参阅.若有不足之处敬请指正,不胜感激! 多不闲述,就此上码. HTML 源码如下所示: 1 <html> 2 <head> 3 <meta charset='utf-8'> 4 5 <title>JS-002-JavaScript 操作常见 web 元素之二-修改元素属性(以按钮示例)</title&g

数据流基本问题--确定频繁元素

下面可以谈论下如何求频繁元素的一个问题. 一.问题定义 如果一个数据流,其中m为数据流的大小,.我们可以定义每个元素出现的次数为,其中为第i个元素出现的次数.容易得出:. 如果给定参数k,我们想求出所有出现次数超过m/k的元素.也就是输出集合:.下面我们先从一个简单特例入手,对这个问题进行分析和解决. 二.简单情况 有个经典的过半元素查找问题,在编程之美里面也有分析(寻找发帖水王).就是说给定一个数组,找出出现次数超过一半的元素.对于这个问题一个比较好的做法就是不断删除两个不同的元素,最终剩下的

jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组、对象、Dom元素、二维数组、双层循坏、类json数据等等

jQuery 遍历函数包括了用于筛选.查找和串联元素的方法. 函数 描述 .add() 将元素添加到匹配元素的集合中. .andSelf() 把堆栈中之前的元素集添加到当前集合中. .children() 获得匹配元素集合中每个元素的所有子元素. .closest() 从元素本身开始,逐级向上级元素匹配,并返回最先匹配的祖先元素. .contents() 获得匹配元素集合中每个元素的子元素,包括文本和注释节点. .each() 对 jQuery 对象进行迭代,为每个匹配元素执行函数. .end(

Jquery学习笔记:操作form表单元素之二(复选框和单选框)

在上面文章的基础上,我们介绍如何操作表单元素中的 复选框和单选框. 一.复选框 <label> <input type="checkbox" id="item" checked> 全选</label> 注意,input标签要放在label标签内,这样点击文字时也会有反映. 如果选中了,调用  $("#item").prop("checked")返回true,否则返回false 同样利用pro

元素操作(二)

一. windows弹出框的处理 1. 真实案例 有时候,我们会在页面中遇到windows弹出框,和页面弹出框不同,windows弹出框不能用F12查看html源码来定位元素,对于这种弹出框应该作何处理呢? 例如:博客园中点击退出按钮,会弹出一个确认是否退出的弹出框,此时按F12是没有作用的 2. 解决办法 1) 确认浏览器弹出框存在 2) 使用switch_to方法切换到windows弹出框,driver.switch_to.alert 3) Alert类提供了一系列的操作方法.利用Alert