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 ...