在有些情况下,数据以一个或者多个流的方式到来,如果不对数据进行及时的存储和处理,数据将永远丢失。这就是我们所说的数据流问题。
既然说是数据流,说明我们只能以流的方式一个一个按顺序访问数据。也就是说没法像访问访问数组一样随机访问数据流中任意位置的元素。我们只能对数据进行少数次的整体扫描,最好情况只扫描数据一次。
一、有关结论
在数据流算法里面,有2个一般化结论为值得牢记:
1.通常情况下,获得问题的近似解比精确解要高效得多。
2.为了产生与精确解相当接近的近似解,与哈希相关的技术被证明十分有用。
二、相关定义
我们假设数据流 = (其中m为数据流的长度),任意元素从(n为可能出现的元素总数)中选择。一般情况下,m和n的值都非常大。所以我们需要空间亚线性算法来处理数据流问题。
如果我们对数据流处理想要求的函数为,通常为一个实数。很多基本函数被证明在空间亚线性的情况下无法得到精确解,所以我们需要找到的估计或近似。那我们如何对算法结果的质量进行判断呢?假设我们算法的输出为。如果算法满足下面的不等式,我们将算法称为-近似的。
如果为0或者非常接近0,则满足下面不等式即可。
对于数据流的定义,有不同的方式。一般只涉及数据到来(vanilla streaming model)。另外一种变种(turnstile streaming model)是某些元素不仅可以到来,而且还可以离开。
在接下来的几个博客里,我将讲述基础的数据流算法,包括采样问题,频繁元素问题,独立元素个数问题,k阶矩问题。后续可能会添加高阶内容。
原文地址:http://blog.csdn.net/dm_ustc/article/details/45875263