首页 > 其他分享 >闲话:随机 Hash

闲话:随机 Hash

时间:2024-07-14 15:52:04浏览次数:8  
标签:10 Hash 错误率 闲话 检验 随机 权值

随机 Hash:堆叠必要条件

如果我们有一种方法来检验某个对象的某个性质,当对象满足这个性质的时候,这个方法必然能使该对象通过检验;否则这个方法会使该对象以 \(p\) 的概率通过检验。那么我们将得到一个极可能正确的检验方法:连续使用前述方法检验该对象足够多次。误通过检验的概率 \(x\) 将随检验次数 \(m\) 的提升而迅速降低,因此我们的方法是极可能正确的。

当然,我们不能无限制地提升检验次数,这会让我们的检验速度变低。那么,我们应该怎样选择检验次数,才能使 错误率 \(x = p^{m}\) 被控制到一个可以接受的范围内?

怎样的错误率是可以被接受的?

不难发现,可以被接受的错误率与实验次数 \(n\) 有关。在具体的题目中,我们几乎要在每一次实验中都不误判,除此之外的结果都难以接受。因此,\(n\) 越大,可以被接受的错误率就越小。

下面是当错误率 \(x\) 和实验次数 \(n\) 在某个量级的时候,通过所有实验的正确率表格。(即通过所有实验不报错的概率)

单次错误率 (\(x\)) / 实验次数 (\(n\)) \(10^5\) \(10^6\) \(10^7\) \(10^8\)
\(10^{-5}\) \(0.3679\) \(0\) \(0\) \(0\)
\(10^{-6}\) \(0.9048\) \(0.368\) \(0\) \(0\)
\(10^{-7}\) \(0.9900\) \(0.9048\) \(0.3679\) \(0.0000\)
\(10^{-8}\) \(0.9990\) \(0.9900\) \(0.9048\) \(0.3678\)
\(10^{-9}\) \(0.9999\) \(0.9990\) \(0.9900\) \(0.9048\)

这里的实验次数一般要考虑到数据组数或者测试点数量(毕竟我们不想在 CF 中 WA 哪怕一个点对吧?)。

如果对单次正确率有自信,可以直接使用伯努利不等式:

\[(1-x)^{n} \geq 1 - nx \ \ \ (x > -1,n \geq 1) \]

该不等式表明当我们足够悲观(直接认为错误率为单次错误率乘实验次数)时,正确率也是有保障的。

当单次错误率在 \(10^{-9}\)(\(10^{-8}\) 看上去不错,但是接近 \(10\%\) 的错误率不够小)的时候,我们的总体正确率都是非常乐观的,因为几乎没有题目会实验 \(10^{8}\) 次。

当单次错误率较高的时候,我们有几乎没有代价的降低错误率方法:重复随机。选取合适的重复随机次数,将单次错误率维持在 \(10^{-9}\) 级别,我们就可以认为这是可以接受的错误概率。

具体的错误率分析

Sum Hash 一例:QOJ 5254 Differences

考虑答案串,其它每个字符串都和它有 \(m - k\) 个相同的字符。必要条件呼之欲出:和该字符串相同的位恰有 \((n-1)(m-k)\) 个。

进一步地,给每个字符串随机赋权 \(w_i\)。枚举答案串的每一位,统计这一位和答案串相同的串的权值和。那么,仅当权值和为 \(sum(m - k)\) 时,答案串合法。

考虑分析错误率。当某一种权值 \(w_i\) 并非出现了 \((m-k)\) 次时,考虑固定其余的 \(w_j\) 不变,值域内至多只有 \(1\) 种 \(w_i\) 会使得它和 \(sum(m-k)\) 相等,因此错误率可以近似看作 \(1/V\)。

Sum Hash 一例:CF 1746F Kazaee

给每种数赋随机权值然后检验区间和是否是 \(k\) 的倍数。此处值域可看作 \([0,k)\),那么当随机权值取遍 \([0,k)\) 的时候,固定其余的随机权值不变,类似的分析可以分析出:错误率至多 \(1/2\)(当 \(k = 2\) 的时候达到最高)。

此时需要将随机次数提升到 \(25\) 次左右(\(2 \times 10^{-8}\) 左右的错误率)。

Xor Hash 一例:CSP 2022 星战

前面的部分略去。

首先不难分析出按位独立。然后,每一位非法时错误率约 \(1/2\)(套用 Sum Hash 时的分析方法:固定其余不变,改变钦定的关键元素的权值),因此错误率为 \((0.5)^{L}\),其中 \(L\) 为向量长度。

Xor Hash 另一例:Dzy loves Chinese

这里我们需要把随机权值当成 \(2^i\) 使用并插入进线性基里。这要求我们每次取样的大小必须远小于向量位长。我们认为一次错误是误把线性无关组判断为线性相关组,即插进线性基失败了。

如果我们的向量长度为 \(L\),每一位均匀取 \(0/1\),那么我们可以近似估计错误率:第 \(i\) 个向量插入时已经有 \((i-1)\) 位有主元,从而有 \(\frac{1}{2^{L-{i-1}}}\) 的概率被前 \(i\) 个向量线性表出(考虑将有主元的位消成 \(0\),此时只有 \(\frac{1}{2^{L-i-1}}\) 的概率满足整个数就是 \(0\);其它情况下可以找到一位作为主元)。

因此,正确率为 \((1-\frac{1}{2^L})(1-\frac{1}{2^{L-1}})(1-\frac{1}{2^{L-2}}) \cdots (1 - \frac{1}{2^{L- n + 1}})\),其中 \(n\) 是取样大小。这也和蒙特卡洛方法得出的结果大致吻合。

标签:10,Hash,错误率,闲话,检验,随机,权值
From: https://www.cnblogs.com/Meatherm/p/18301654

相关文章

  • LinkedHashMap
    HashMap是无序的,LinkedHashMap是可以维持插入顺序的LinkedHashMap继承了HashMap,内部追加了双向链表,来维护元素的插入顺序//LinkedHashMap.Entry继承了HashMap.NodestaticclassEntry<K,V>extendsHashMap.Node<K,V>{//并追加了连个字段before和after,用来......
  • HashMap
    HashMap的实现原理是基于哈希表的,它的底层是一个数组,数组的每个位置可能是一个链表或红黑树,也可能只是一个键值对。当添加一个键值对时,HashMap会根据键的哈希值计算出该键对应的数组下标(索引),然后将键值对插入到对应的位置。当通过键查找值时,HashMap也会根据键的哈希值计算......
  • 闲话 713
    今天好热,并且才考完试,脑袋有点宕机,因此本文可能有误,如果你发现错误,请告诉我。证明:\[\sum_{d\midn}\frac{\mu(d)}{d}\sum_{k\midd,2\nmidk}\varphi(k)2^{n/k}=\frac{\varphi(n)}n\sum_{d\midn,2\nmidd}2^{n/d}\mu(d)\]我们先证明一个引理。如果\(a\perpb\),\(f(a+b)=f(a)......
  • simhash&hamming distince
    simhash&hammingdistincesimhash是一种长文本的查重算法SimHash本身属于一种局部敏感hash,其主要思想是降维,将高维的特征向量转化(加权)成低位的hash,通过算出两个海明距离来确定两篇文章的相似度,海明距离越小,相似度越低,一般海明距离为3就代表两篇文章相同。simhash的算法具体分......
  • Hash表(C++)
        本篇将会开始介绍有关于unordered_map和unordered_set的底层原理,其中底层实现其实就是我们的Hash表,本篇将会讲解两种Hash表,其中一种为开放定址法,另一种为hash桶,在unordered_map和unordered_set的底层实现中主要是使用的是hash桶。    本......
  • HashCode方法
    HashCode方法总结publicinthashcode()提高具有哈希结构的容器的效率;两个引用,如果指向的是同一个对象,则哈希值肯定是一样的;两个引用,如果指向的是不同对象,则哈希值是不一样的;哈希值主要根据地址号来的,不能完全将哈希值等价于地址;例子:Aobj1=newA();Aobj2=newA()......
  • 10-Hashtable底层结构和源码分析
    10-Hashtable底层结构和源码分析介绍汇总:Hashtable的基本介绍Hashtable底层机制说明Hashtable和HashMap对比1-Hashtable的基本介绍存放的元素是键值对:即K-VHashtable的键和值都不能为null,不然后抛出NullPointerException异常Hashtable使用方法基本上和Hash......
  • 闲话 7.12 - 斐波拉契拆分
    贺自论文《FIBONACCIPARTITIONS》,这个证明略去了一些繁而不难的分类讨论,感兴趣的(?)可以前往原论文查看。根据欧拉五边形数定理,有:\[\prod_{i\ge1}(1-x^i)=1+\sum_{k\ge1}(-1)^kx^{k(3k\pm1)}\]这也是在\(S=\N\)集合的拆分中,奇数互异的拆分和偶数互异拆分的差值。这样的差......
  • 7-LinkedHashSet底层结构和源码分析
    7-LinkedHashSet底层结构和源码分析介绍汇总:LinkedHashSet全面说明LinkedHashSet底层机制说明1-LinkedHashSet全面说明LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表。由于LinkedHashMap是继承HashMap的所有特性的,其双向链表是在原本的数......
  • 闲话 24.7.12
    闲话????这luogu编译器怎么回事在本地和at上都能过编,在luogu上就过不了?xdm有遇到过这种事情的吗推歌:朝死暮生by北山薇etal.feat.洛天依AI补题P10324对一棵\(2n+1\)个点的有标号树,称它是好的,当且仅当树上每个点具有一个\(\{0,1,2\}\)中的权值,其中恰有\(1\)个......