【ROSALIND】【練Python,學(xué)生信】59 染色體的獨立分離

如果第一次閱讀本系列文檔請先移步閱讀【ROSALIND】【練Python,學(xué)生信】00 寫在前面 ?謝謝配合~

題目:
染色體的獨立分離(Independent Segregation of Chromosomes)
?
Given: A positive integer n≤50.
所給:一個不大于50的正整數(shù)n。
Return: An array A of length 2n in which A[k] represents the common logarithm of the probability that two diploid siblings share at least k of their 2n chromosomes (we do not consider recombination for now).
需得:一個長度為2n的數(shù)組A,A[k]是兩個二倍體同胞兄弟共享2n條染色體中至少k條染色體的概率,用常用對數(shù)表示。(不考慮染色體重組)
?
測試數(shù)據(jù)
5
測試輸出
0.000 -0.004 -0.024 -0.082 -0.206 -0.424 -0.765 -1.262 -1.969 -3.010
?
生物學(xué)背景
? ? ? ? 二倍體生物的生殖細(xì)胞是單倍體,一個配子只含有兩條同源染色體中的一條;雌雄配子結(jié)合時,合子的基因組再次恢復(fù)為二倍體。
? ? ? ??孟德爾第一定律和第二定律分別解釋了同源染色體的分離和非同源染色體的自由組合。
?
數(shù)學(xué)背景
? ? ? ??要理解二項分布,我們可以從拋硬幣開始??紤]下面的場景:如果我們把一枚硬幣拋92次,得到51次、27次、92次正面向上的概率各是多少呢?我們可以用一個隨機(jī)變量表示每次拋硬幣的結(jié)果,其中“正面向上”和“反面向上”的概率各是0.5。假設(shè)每個隨機(jī)變量相互獨立(即兩次拋硬幣的結(jié)果不會互相影響),這樣連續(xù)拋下去,每次“成功”的概率分布就遵從二項分布。
? ? ? ??一般地,如果隨機(jī)變量X服從參數(shù)為n和p的二項分布,我們記為X∈B(n,p)。n次試驗中正好得到k次成功的概率由概率質(zhì)量函數(shù)給出:

? ? ? ??二項式系數(shù)的計算方法為:

思路
? ? ? ??本題中同胞兄弟染色體相同的概率本質(zhì)上與拋硬幣是相同的,可以將本題分為兩部分,根據(jù)公式求解,并不復(fù)雜。
? ? ? ??第一部分:根據(jù)二項分布的特點得到正好有k條染色體相同的概率。這里用概率質(zhì)量函數(shù)就可求出。
? ? ? ??第二部分:求解累積分布函數(shù)(CDF)??梢钥吹?,題目中要求的是至少k條染色體相同的概率,說明所求的是累積值,因此將概率分別相加即可。
? ? ? ??多說兩句:用我的代碼得到的結(jié)果與題目中給的答案并不完全一致,似乎有小數(shù)保留精度的問題,這一塊于我一直是筆糊涂賬。既然答案通過,我也就沒有深究,感興趣的可以研究一下Python的數(shù)位精度機(jī)制。
?
代碼