111

问题:
现在有若干个蜂巢,每个蜂巢每年有一定概率扩散 blabla,问能否预测黄蜂随时间的传播。
模型:
将华盛顿的地形离散化,变成一个二维点阵。其中,有若干个点是起始源点,每个源点每年有一定概率向周围扩散,并形成新的源点。现在,要求出每个点被覆盖的最小时间的期望。

约定:
假设资源充足,无其他人为因素干扰。
设 R R R 为扩散半径, P P P 为每年的扩散概率。
由给定的资料显示,黄蜂的扩散范围不超过30。
设 R = 30 , P = 0.6 R = 30, P = 0.6 R=30,P=0.6。
设时间阈值为 T T T,概率阈值为 P ′ P' P′。
设 P i P_i Pi​ 表示第 i i i 个点。
设 s u m t , P i = ∑ t ′ = 0 t P r o t ′ , P i sum_{t,P_i}=\sum\limits_{t'=0}^{t}Pro_{t',P_i} sumt,Pi​​=t′=0∑t​Prot′,Pi​​
如果 s u m T , P i sum_{T,P_i} sumT,Pi​​ 小于 P ′ P' P′,可认为该点 P i P_i Pi​ 在 T T T 年内无法被覆盖,期望时间为 ∞ \infty ∞。
第一问的简要思路:

  1. 将华盛顿州的图片找出,染色,用二维点阵来表示华盛顿州,其中 m p i , j = 1 mp_{i,j}=1 mpi,j​=1 表示点 ( i , j ) (i,j) (i,j) 属于华盛顿州, m p i , j = 0 mp_{i,j}=0 mpi,j​=0 表示点不在华盛顿州。

  2. 通过动态规划来求点阵中每一个点 P i P_i Pi​ 恰好在第 t 年被覆盖的概率 P r o t , P i Pro_{t,P_i} Prot,Pi​​。

  3. 每个点被覆盖的最小时间的期望为 E ( P i ) = ∑ t = 0 ∞ P r o t , P i × t E(P_i) = \sum\limits_{t=0}^{\infty}Pro_{t,P_i}\times t E(Pi​)=t=0∑∞​Prot,Pi​​×t

  4. 根据每个点被覆盖的期望时间来画热力图。

首先考虑一个简单的模型:
有 n + 1 n + 1 n+1 个点,其中前 n n n 个点已经被覆盖,现在要覆盖第 n + 1 n+1 n+1 个点。其中,第 i i i 个点覆盖 n + 1 n+1 n+1 号点的概率为 p i p_i pi​。那么求 n + 1 n+1 n+1 号点被覆盖的概率 P P P。
设被覆盖的概率为 P P P,没被覆盖的概率为 P ′ P' P′,那么:
P = 1 − P ′ P=1-P' P=1−P′
根据乘法原理:
P ′ = ∏ i = 1 n ( 1 − p i ) P'=\prod\limits_{i=1}^{n}(1-p_i) P′=i=1∏n​(1−pi​)
因此, P = 1 − ∏ i = 1 n ( 1 − p i ) P = 1-\prod\limits_{i=1}^{n}(1-p_i) P=1−i=1∏n​(1−pi​)。

具体计算方面:
考虑计算 P r o t , i , j Pro_{t,i,j} Prot,i,j​。可以通过动态规划来求出。
设 F ( P 1 , P 2 ) F(P_1,P_2) F(P1​,P2​) 表示一般情况下 P 1 ( x 1 , y 1 ) P_1(x_1,y_1) P1​(x1​,y1​) 扩散到 P 2 ( x 2 , y 2 ) P_2(x_2,y_2) P2​(x2​,y2​) 的概率。
因此,在第 t t t 年, P 1 P_1 P1​ 扩散到 P 2 P_2 P2​ 的概率为 F ( t , P 1 , P 2 ) = P r o t − 1 , x 1 , y 1 × F ( P 1 , P 2 ) F(t,P_1,P_2)=Pro_{t-1,x_1,y_1}\times F(P_1,P_2) F(t,P1​,P2​)=Prot−1,x1​,y1​​×F(P1​,P2​)
因为 P i P_i Pi​ 恰好第 t t t 年被覆盖,意味着 [ 1 , t − 1 ] [1,t-1] [1,t−1] 年都没被覆盖,这部分概率为 1 − s u m t − 1 , P i 1-sum_{t-1,P_i} 1−sumt−1,Pi​​。
那么,根据上面的简单模型可得: P r o t , P 1 = ( 1 − s u m t − 1 , P 1 ) × ( 1 − ∏ ( x , y ) ( 1 − F ( t , P 1 , P 2 ) ) ) Pro_{t,P_1} = (1-sum_{t-1,P_1})\times(1 - \prod\limits_{(x,y)}(1-F(t,P_1,P_2))) Prot,P1​​=(1−sumt−1,P1​​)×(1−(x,y)∏​(1−F(t,P1​,P2​)))

因此,我们可以得到这个算法的具体实现。

  1. 从 [ 1 , T ] [1,T] [1,T] 枚举 t t t
  2. 枚举 P 1 ( x 1 , y 1 ) P_1(x_1,y_1) P1​(x1​,y1​)
  3. 枚举和 P 1 P_1 P1​ 距离小于 R R R 的点 P 2 P_2 P2​。
  4. 求出 P r o t , P 1 Pro_{t,P_1} Prot,P1​​ 和 s u m t , P 1 sum_{t,P_1} sumt,P1​​
  5. 求出每个点被覆盖的期望时间。

1 − 4 1-4 1−4 可浓缩为:从 [ 1 , T ] [1,T] [1,T] 按顺序枚举 t t t,求出 { P r o x , i , j ∣ x ∈ [ 1 , T ] , i ∈ [ 1 , w i d t h ] , j ∈ [ 1 , h e i g h t ] } \{Pro_{x,i,j}| x\in[1,T], i \in [1,width], j\in [1,height]\} {Prox,i,j​∣x∈[1,T],i∈[1,width],j∈[1,height]}。

上一篇:API-内存操作


下一篇:mmap( )