其實問題可以轉化為[公式]方程有多少組整數解。


-------------------------------------------5.21-------------------------------------------

其實問題並不能轉化為[公式],因為C(365+56-1,56-1)不能整除365^56。問題出在,[公式]只對應365情況,而[公式]可以對應365*56!情況。所以,下面的答案並不能回答原題= =-------------------------------------------5.19-------------------------------------------

我們考慮一些簡單的情況,從一年有8天開始考慮= =,然後每次遞增21。直到365天:

8天:[公式]29天:[公式]。。。按照這個思路,可以得到遞推公式:[公式][公式][公式]

[公式]

[公式]其中 dividing 表示n的分劃,就是說我要在選幾個數,減去總共21n的方法的數目。例如f(1)表示在一個數上減去21,有C(56,1)=56種方法,f(1,1)表示在兩個數上減去21,有C(56,2)=56*(56-1)/2種方法, f(1,2) 表示在一個數上減21,一個數上減42,有A(56,2)=56*(56-1) 種方法,f(1,2,2,3)表示在一個數上減21,兩個數個數上減42,一個數上減63,有C(56,1)C(56-1,2)C(56-3,1)種方法。例如:dividing number of 4=f(1,1,1,1)+f(1,1,2)+f(1,3)+f(2,2)+f(4)=C(56,4)+3C(56,3)+2C(56,2)+C(56,2)

然後回過神來我發現 dividing number of n 和求[公式]是等價的= =

就是[公式]

那麼得到遞推公式:

[公式]

[公式]

A18就是我們所求= =

讓我跑個程序算一下= =

A[18]=74030513570272582787073375166488629192387402312031330768717985249152占所有可能性的0.019999369715那麼原題目的答案是1-0.019999369715=0.980000630285

p.s.話說這個和另一個題目有沒有關係啊,就是一根繩子切n刀,最小值的期望是1/(1+n)^2,那麼這道題就是近似於於一根繩子切56刀,最大值的小於20/365的期望。


咋一看覺得很簡單,連續的20天有365種,每種里有345天中給大家用來過生日。

但後來意識到重複的例子還蠻多啊……

先佔個坑,等下嚴肅點認真作答。

——————————————————————

最近太忙,始終沒坐下來認真求解。

受陽林岑的回復(假設一年365天,某班56人,每個人過生日是獨立事件,那麼,「存在連續20天沒人過生日」的概率是? - 陽林岑的回答)啟發,決定暴力地用計算機求近似值:

Code如下。剛剛一邊吃著晚飯用MATLAB寫著,輕噴:

% Define variables:
nday = 365;
nstudent = 56;
ngap = 20;

% Define samples sizes to test:
%nsample = 1000;
maxpower = 18;
SAMPLE = zeros(1,maxpower);
PROBS = zeros(1,maxpower);

for ipower = 1:maxpower
nsample = 100*(2^ipower);
SAMPLE(ipower) = log10(nsample);

nyes = 0; % Count this through sampling, and then divide by nsample for result

for isample = 1:nsample
% Generate pool of birthdays:
BDAY = zeros(1,nstudent);
for istudent = 1:nstudent
BDAY(istudent) = ceil(rand*nday); % Will be between 1 to 365
end

% Place them in order:
SBDAY = sort(BDAY);

% Process gap between all students:
GAP = zeros(1,nstudent);
GAP(1) = SBDAY(1)-SBDAY(nstudent)+nday;
for igap = 2:nstudent;
GAP(igap) = SBDAY(igap)-SBDAY(igap-1);
end

% Find the maximum gap in this sample:
maxgap = max(GAP);
if maxgap &> ngap % i.e. maxgap is no less than (ngap+1)
nyes = nyes + 1;
end
end

prob = nyes/nsample;
PROBS(ipower) = prob;
end

figure
hold on
grid on
plot(SAMPLE,PROBS,o,MarkerSize,12);
xlabel(log_{10}(N),Fontsize,12)
ylabel(Probability,Fontsize,12)
set(gca,FontSize,11)
ylim([0.955 0.97])
xlim([2 8])

希望有空還是可以解出analytical solution吧??真箇問題還是蠻有趣的,儘管最後的數值結果略高 -_-


這重要嗎


都是大神 開始編碼計算


(364/365)^56??(363/364)^56??(362/363)^56……??(318/319)^56=

等於多少不會計算~前幾天看了點概率論,好像就是這麼計算不複雜的吧……

企圖用純概率的方法來計算失敗以後用R語言寫了代碼來模擬了一下,求輕噴, 過程如下

如果將任意學生的生日日期記為0,其它55個學生的生日用「比第一個學生生日晚多少天「的天數來表示,可以知道,忽略生日的年份,那剩下55個學生的生日數應該在0到364之間。

因此基本思路為生成10000組55個0到364的服從均勻分布(uniform distribution)的隨機數,然後將這10000組隨機數排序,然後數出這10000組裡 存在兩個相鄰數之間的差大於20的 有多少組, 得到一個頻率。。然後將上述過程重複100遍,並求出頻率的均值。

下圖是上述一百次重複得到的頻數,均值大約為449.25,因此頻率約為4.49%。如果將模擬的數據量放大應該會得到更為準確的結果。同時,需要注意的是,我每次生成10000組隨機數並重複100次,而不直接生成1,000,000組隨機數的主要是想看看100次的variance,不過事實上,直接生成1,000,000組隨機數可以有效避免出現小概率的數據情況。

附上R的code:(style什麼的不要介意= =)

count = rep(0, 100)for(l in 1 : 100){ n = 10000; x = rep(0, 55 * n); x = matrix(x, nrow = 55, ncol = n); for(j in 1 : n){ x[,j] = runif(55, 0, 364); } for(j in 1: n){

y = x[,j]

for(k in 1: 55){ x1 = max(y) x2 = x[-match(max(y), y), j] x2 = max(x2) if(x1 - x2 &> 20){ count[l] = count[l] + 1; break } y = x[-match(max(y), y),j]

}

}}plot(count, type = "b", ylim = c(0,1000))mean(count)
大約4.261%------------------------(345^56)/(365^56)
先從365天里選出連續的 20天,有365-20+1種,然後假設每個人都不在這20天里,有345的56次方種,和前面的種類相乘為分子。分母為365的56次方。剩下自己算吧,匿了,答錯了沒臉見高中老師。修改版都在一天的,加都在兩天減都在一天的,加都在三天的減在兩天的和一天的,以此類推到都在345天的。分母不變。祝你成功。


推薦閱讀:
相关文章