随机化以及和概率相关的东西(长期更新)

Hash

一点小感受:Hash就是去找问题的必要条件(这一般是很好满足的),然后发现在满足必要条件的情况下有很大概率是充分的

字符串Hash

等着补。

Xor Hashing and Sum Hashing

奇妙的东西。

可以快速找一个组合是否出现/某个数是否出现k次这种与具体的顺序无关的问题。

找排列

来一道题P10833 [COTS 2023] 下 Niz

找到所有区间[l,r]使得alar1,2rl+1的一个排列。

朴素的枚举就不提了。

我们发现原问题的一个必要条件是i=lrai=i=1rl+1i

然而这并不是充分的,如12=56

这是因为异或的结果集不超过2n,而不同的区间有n(n1)2,发生冲突的概率很大,于是启示我们扩大异或的结果集

我们将每个数映射到[0,264]中的一个整数,于是结果集扩大到264,冲突的概率很小了。

以上是xor hash的想法,对于这道题,我们继续优化。我们发现对于一段区间想要合法,那么必要条件是其中有1,且最大值等于区间长度。

那么我们对于最大值在1的左侧和右侧分开做。显然序列中的1将序列分成了几段。考虑只记录每个1右侧的最大值,枚举右端点,每次检查当前是否有1且是否最大值(即区间长度)可以覆盖到1。当遇到新的一个1时,由于之前已经有1,于是不可能构成排列,所以扔掉前一个1的信息,重新开始。

于是做完了,O(n)

模拟退火

其它随机化技术

posted @   RandomShuffle  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示