關於n對鹼基的DNA種類數問題

2022-06-02 02:48:12 字數 3493 閱讀 2246

2020-2-29

經過一些同學的疑問後,我對此條目也發生了一些懷疑。

這種演算法是基於,「 兩條鏈只是互相反向,但是不能區分 」 這個觀點來算的。

但是實際情況往往有很多可以區分的方法,比如有義鏈,著絲點等等,所以近似 \(4^n\) ,與高中生物無太大差別。但是也不乏各種特殊情況, \(dna\) 的奧秘還沒有乙個定論。

所以此文僅當作理論化的特殊情況看就好了x。

此外,正文中開篇提出的題沒有給出正確答案。

在此給出 「理論」 上的解:

首先考慮一條鏈的所有情況,一共有

\[4\times 2\times 4\times 2+4\times 2\times 2\times 2=96

\]明顯這條鏈只有四個。

我們有 \(atcg\) 每個鹼基 \(2\) 個可以選。

第乙個位置有四種性質,但是第二個時,如果選和第乙個位置一類的鹼基(比如都選了 \(a\) 或 \(t\) ,之後就只有 2種情況;反之有四種。這就是+號的意義

我們知道除了一種類似 『回文』 一樣的串只計了一次,我們要先找這種鏈的個數,等同於找長度為 \(2\) 個鹼基的鏈的個數,是 \(4\times 4=16\) 。

最後在除二之前將這部分再多加乙份就行了:

\[ans=\frac=56

\](最後修正了些筆誤

某天在冊子上做到了這麼個問題:

我最初想是 \(c^_\times 2^4\div 2\) ,和選項不符,也沒多想就過了。

上面那個式子的解釋:

然後之後又做了關於 「 \(n\) 對鹼基的 \(dna\) 可能有多少種可能 」 這樣的題,答案竟然給了個 \(4^n\) !

\(dna\) 的種類其實是和上面的解釋一樣的:

然而還有另外一種理解,可能對下面的思考更有用:

剛好有幾位同學也有此疑問,於是我們開始思考其原因。

首先,有乙個理論,由於 \(dna\) 是有方向的,兩端並不一樣,一端的磷酸連的是脫氧核醣上的 \(5\) 號碳,所以將其命名為 \(5`\) 端,另一端的羥基連的是 \(3\) 號碳,所以稱為 \(3`\) 端。這個理論可能會造成兩種可能間的微小的不同。

之後,我們思考了下其多算的原因:

然後,列舉了 \(n=2\) 的所有情況

\[\begin

3 & 5\\

a & t\\

a & t\\

5 & 3

\end

\equiv

\begin

3 & 5\\

t & a\\

t & a\\

5 & 3

\end\\

(1)\\

\begin

3 & 5\\

g & c\\

g & c\\

5 & 3

\end

\equiv

\begin

3 & 5\\

c & g\\

c & g\\

5 & 3

\end\\

(2)\\

\begin

3 & 5\\

a & g\\

c & t\\

5 & 3

\end

\equiv

\begin

3 & 5\\

g & c\\

t & a\\

5 & 3

\end\\

(3)\\

\begin

3 & 5\\

c & g\\

a & t\\

5 & 3

\end

\equiv

\begin

3 & 5\\

t & a\\

g & c\\

5 & 3

\end\\

(4)\\

\begin

3 & 5\\

g & c\\

a & t\\

5 & 3

\end

\equiv

\begin

3 & 5\\

t & a\\

c & g\\

5 & 3

\end\\

(5)\\

\begin

3 & 5\\

a & t\\

g & c\\

5 & 3

\end

\equiv

\begin

3 & 5\\

c & g\\

t & a\\

5 & 3

\end\\

(6)\\

\begin

3 & 5\\

g & c\\

c & g\\

5 & 3

\end\\

(7)\\

\begin

3 & 5\\

c & g\\

g & c\\

5 & 3

\end\\

(8)\\

\begin

3 & 5\\

t & a\\

a & t\\

5 & 3

\end\\

(9)\\

\begin

3 & 5\\

a & t\\

t & a\\

5 & 3

\end\\

(10)

\]可以發現,除了最後四種,都重複了兩次,這是由於鹼基配對的重複。而最後四種乍一看有重複,但是 \(3`\) 和 \(5`\) 是反的。

那麼我們的重點就是如何找到只算一次的項。

可以發現,只要是按鹼基配對變換後再倒過來和原來一樣的鏈,都只會計一次。

例如:\[\begin

3 & 5\\

\color & \color\\

\color & \color\\

\color & \color\\

\color & \color\\

\color & \color\\

\color & \color\\

5 & 3

\end\\

\]而如何一樣呢,只需要對半分開,然後計算一半長鏈的排列,另一半按配對填上就行了。即為 \(4^\) 。而只有偶數長度會有這種情況,奇數是不行的。

最後我們只要在除之前將這部分再加乙份,求可以不多除了!

\[ans(n)=\begin

\frac & \text\\

\frac\times(4^n+4^}) & n=2k

\end

\]這就是結論的式子啦!

經過打表檢驗正確。

至於 \(4^n\) 的**,我們可以這麼想,一般 \(dna\) 分子是憑依在蛋白質載體上,所以按具體情況有辦法區分兩條排列一樣的鏈,所以所謂對稱就不存在了,但是若是單獨討論 \(dna\) 答案即為而上述結論。

感謝兩位朋友 \(yyy\) 和 \(zyl\) 的指點。(@opethrax @beyondlimits

-eof-

N數之和的問題

leetcode n個數之和問題 三數之和 給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合...

尋找n以內的親密數對

題目內容 對於兩個不同的整數a和b,如果整數a的全部因子 包括1,不包括a本身 之和等於b 且整數b的全部因子 包括1,不包括b本身 之和等於a,則將a和b稱為親密數。自定義函式fac x 計算x包括1但不包括本身的所有因子和並返回。從鍵盤輸入整數n,呼叫fac 函式尋找n以內的親密數並輸出。注意每...

關於大整數n!的問題!

對於乙個整數n,當n超過30之後,n!將會是乙個比較大的數,而longlong型別將不能儲存下這麼大的數 這是你只能用到高精度的知識,運用陣列來存放這些數,呵呵!看看下面的例子吧!這是一道求1000!的例子,希望能對你有幫助!include using namespace std int main ...