史莱姆自爆问题
Posted weiyinfu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了史莱姆自爆问题相关的知识,希望对你有一定的参考价值。
草丛里蹦出一只史莱姆,它每天会做以下一件事(等概率):自爆;什么也不做;分裂成两只;分裂成三只
问题:史莱姆最终全部自爆完的概率是多少?
编程复杂度太大,因为史莱姆的个数是指数上升的。
import numpy as np
N = 10 # 天数
M = 4 # 每天的分裂情况数
C = (M - 1) ** N + 1 # 最多多少只
def go(a, ind, cnt, n, left):
if ind == M - 1:
cnt[ind] = n - sum(cnt[:M - 1])
c = int(np.sum(cnt * np.arange(M)))
if c < C:
a[c] += (1 / M) ** n
return
for i in range(left + 1):
cnt[ind] = i
go(a, ind + 1, cnt, n, left - i)
cnt[ind] = 0
def get(n):
# n只变多的概率
a = np.zeros(C)
cnt = np.zeros(M)
go(a, 0, cnt, n, n)
return a
def main():
a = np.zeros(C)
a[1] = 1
for i in range(N):
b = np.zeros(C)
for j in range(C):
if a[j] > 0:
b += get(j) * a[j]
a = b
print('day', i, a[0])
main()
这道题其实应该用方程思想:设一只史莱姆爆炸的概率是p,$p=frac{1}{4}+frac{p}{4}+frac{p^2}{4}+frac{p^3}{4}$,p=sqrt(2)-1或者1或者-sqrt(2)-1(舍)
当每次等概率做2件事,保持现状和爆炸时,一定会灭亡。
当每次等概率做3件事,爆炸、保持现状、分裂繁殖时,一定会灭亡。
只有当每次等概率做4件事,爆炸、保持现状、一个变两个、一个变三个时,才有可能避免灭亡。
以上是关于史莱姆自爆问题的主要内容,如果未能解决你的问题,请参考以下文章