全0数组判定问题
整理自《大数据算法》(王志宏 哈尔滨工业大学)24页
问题描述
给定一个由0、1构成的数组,在不遍历整个数组的情况下,判断它是否为全0数组。
算法描述
从数组中随机抽取s个元素,如果样本全是0,就认为它是全0数组。
算法分析
对于全0数组来说,无论抽取多少个元素看到的都是0,不会发生误判;
对于含有1的数组来说,仅当这s个元素都为0时才会引起误判,那么误判的概率就等于抽取的s个元素都是0的概率。
假设共有n个数组元素,其中1有ɛn个,0有(1-ɛ)n个。任意抽取一个元素,它是0的概率为(1-ɛ),抽取s个元素全是0的概率为:
可见在抽样数s固定的情况下,1的个数比例ɛ趋于1时,误判率δ就会趋于0。
这里可以把ɛ视为判断误差。当ɛ=0时,数组中没有1,算法不可能失误,此时误判率为0。当ɛ>0时,如果算法误判为全0数组,即认为数组中1的比例为0,则ɛ的值越大,误判的程度越离谱,但也正如上面所述,这种情况发生的概率会更低。
所以这里可用(ɛ,δ)衡量算法的质量,即误差超过ɛ的概率小于δ时,就认为算法是合格的。为此我们需要选取一个合适的抽样数s,令
由此就可以通过(ɛ,δ)计算出能满足要求的最小s值。
相似问题