合并石子问题(2)
《合并石子问题(1)》已经是10年前的坟贴了:https://bbs.emath.ac.cn/thread-3978-1-1.html本贴是《合并石子问题(2)》,对合并规则作了一些改动:
有N颗体积为1的石子。
我们每次随机抽取2颗石子,合并成1颗石子。
每颗石子被抽到的概率均等。
假设要合并的$2$颗石子的体积分别为$a$和$b$。
如果$a=b$,那么可以无损合并,合并后的体积为$(a+b)$;
否则大石子会把小石子吸收掉,合并后的体积为$\max\{a,b\}$。
一共合并$(N-1)$次,最后剩下$1$颗石子。
记这颗石子的体积的期望值为$E(N)$。
(1)对于较小的$N$,$E(N)$的精确值是多少?
(2)对于较大的$N$,$E(N)$大约等于$N$的多少次方? 这个结果只能取2的幂。每种合并过程可以看成一棵二叉树,只是不同的树的权重应该是不一样的 根据链接内容,假设最后一步两个石子的合并过程,这两个石子分别是从h和N-h棵石子合并过来的概率为1/(N-1)
所以得出$p_k(N)=\frac1{N-1}\sum_{h=1}^{N-1}(2p_k(h)s_{k-1}(N-h)+p_{k-1}(h)p_{k-1}(N-h))$
好像总是倒数第三和第四大的两个非零数出现的概率最高,两者概率加起来通常超过90%
2:2
3:2
4:2.666667
5:3.333333
10:4.519929
100:19.381907
1000:82.584912
10000:352.778718
100000:1506.949790
可以看出石子数目每增加10倍,E(N)大概增加4.27倍。所以大概$N^0.63$ 我没有精确计算,直接抽样模拟,结果如下:
3 2.000000
9 4.231674
27 8.502773
81 16.931536
243 33.662674
729 66.887726
2187 132.846680
6561 264.103027
19683 525.009766
59049 1043.968750
177147 2078.093750
531441 4132.750000
1594323 8197.000000
4782969 16348.000000
14348907 32600.000000
43046721 64384.000000
$3^n$颗石子合并后,好像是$n$较小的时候,合并后的体积比$2^n$大,$n$较大的时候,合并后的体积比$2^n$小
h=3 w=2.000000
m=1
h=9 w=4.231746
m=0.0031746
m=0.937302
m=0.0595238
h=27 w=8.502055
m=8.32014e-20
m=0.00991275
m=0.922374
m=0.0677133
h=81 w=16.932300
m=8.44582e-96
m=3.45346e-15
m=0.0142225
m=0.920398
m=0.06538
m=1.95842e-13
h=243 w=33.658228
m=1.24972e-68
m=5.17132e-14
m=0.0173106
m=0.922215
m=0.0604749
m=9.90855e-13
h=729 w=66.881955
m=1.38857e-269
m=1.03378e-62
m=1.78279e-13
m=0.0200685
m=0.924867
m=0.0550648
m=9.18693e-13
m=1.65113e-88
h=2187 w=132.907027
m=2.537e-244
m=3.02525e-60
m=4.05497e-13
m=0.0228738
m=0.927353
m=0.049773
m=5.47905e-13
m=8.77733e-86
h=6561 w=264.153414
m=1.96039e-234
m=1.00005e-58
m=8.05039e-13
m=0.0258793
m=0.929332
m=0.0447889
m=2.80495e-13
m=1.92705e-86
h=19683 w=525.100205
m=1.17788e-228
m=1.6475e-57
m=1.51856e-12
m=0.0291525
m=0.930685
m=0.0401626
m=1.34692e-13
m=4.46662e-88
h=59049 w=1044.002650
m=3.59913e-224
m=2.11411e-56
m=2.79574e-12
m=0.0327297
m=0.931372
m=0.0358987
m=6.24828e-14
m=4.59493e-90
根据前面Fans的观察,由于$\log_3 2\approx 0.63$, 所以结果可能会近似$N^{\log_3 2}$,
我们可以猜测$p_k(N)$会以$k-1-\log_3 N$为中心,而且对于充分大的N,这个图像会基本不发生变化。
我们猜测$ p_k(N) \to f(k-\log_3 N)$, 由此,可以对$33334\le N \le100000$范围内描出$ k-\log_3 N \to p_k(N)$的图像
如果我们再对p_k(N)取自然对数,可以描出图像$ k-\log_3 N \to \ln(p_k(N))$
我前面的计算结果太粗糙了
我后来精确计算了一下,发现“石头数3倍、合并后2倍”是错觉
精确的结果应该是“石头数3.04383倍、合并后2倍”
或者是“石头数3倍、合并后1.98202倍”
总之N个石头合并后的体积应该是N的0.62271次方,不是N的0.63次方
因为当石头数增加至原来的3.04383倍时,合并后的体积分布与原来的分布是一样的,只是多了一个系数2
mathe你可以翻出你的原始数据看看,是不是这个结果 #include <math.h>
#include <time.h>
#include <stdio.h>
#define MAX(a,b) ((a)>(b))?(a):(b)
#define N 1000000
#define MD 3
#define LN (2*MD+1)
int base;
double matrix;
double sum;
int main()
{
int h,s,a,b;
time_t start;
start=time(NULL);
matrix=1.0;
for(h=MD;h<LN;h++)sum=1.0;
base=1;base=2;
matrix=1.0;
for(h=MD;h<LN;h++)sum=1.0;
for(h=3;h<=N;h++){
base=round(log(h)/log(3))+1;
for(a=0;a<LN;a++){
int hind = a+base-MD;
double r=0.0;
for(s=1;s<=h-1;s++){
int ua = hind+MD-base;
if(ua<0||ua>=LN)continue;
int ind2=h-hind;
int b=hind-base+MD-1;
if(b<0)continue;
double s2=0;
if(b>=LN)s2=1.0;else s2=sum;
r+=2.0*matrix*s2/(h-1);
if(ua>0&&b<LN){
r+=matrix*matrix/(h-1);
}
}
matrix=r;
if(a==0)sum=r;
else sum=sum+r;
}
if(h%128==0){
fprintf(stderr,"h=%d time %ds\n",h,(int)(time(NULL)-start));
}
}
for(h=2;h<=N;h++){
printf("h=%d\n",h);
double p=0;
double m=1.0;
for(s=0;s<LN;s++){
int a=base+s-MD;
if(matrix==0)continue;
printf("\tm[%d]=%g\n",a,matrix);
}
}
return 0;
}
这个比较乱的代码应该能够在一天以内运行到1000000,不知道误差有多大,你们有空可以试验一下 8# mathe 点评:
我不知道你是怎么判断出来的,我觉得我的数据量不够评估,结果就是用3#的公式推算的就是运行一下上面的代码,看一下前后两个峰值对应的N,差了多少倍啊
例如:
当n=1时,合并后的体积等于1的概率达到最大值,为1.00000000000000000
当n=2,3时,合并后的体积等于2的概率达到最大值,为1.00000000000000000
当n=8时,合并后的体积等于4的概率达到最大值,为0.97142857142857142
当n=24时,合并后的体积等于8的概率达到最大值,为0.94474148406846015
当n=74时,合并后的体积等于16的概率达到最大值,为0.93570797290841390
当n=224时,合并后的体积等于32的概率达到最大值,为0.93287352346257579
当n=683时,合并后的体积等于64的概率达到最大值,为0.93192170797609386
当n=2078时,合并后的体积等于128的概率达到最大值,为0.93160994038313749
当n=6326时,合并后的体积等于256的概率达到最大值,为0.93150737895583391
当n=19255时,合并后的体积等于512的概率达到最大值,为0.93147368686003040
当n=58610时,合并后的体积等于1024的概率达到最大值,为0.93146261826311938
当n=178399时,合并后的体积等于2048的概率达到最大值,为0.93145898182323894
当n=543016时,合并后的体积等于4096的概率达到最大值,为0.93145778712761851
……
由此可知当n=0.858558*3.043829^k时,合并后的体积等于2^k的概率达到最大值,为0.93145720258744+0.31741467/n
因此n个体积为1的石子合并后的体积大约是n的0.622709次方
页:
[1]
2