本文目錄一覽:
- 1、如何用Python構造hash表解決DNA k-mer問題
- 2、將DNA序列在Python問題,怎麼解決
- 3、用c語言編寫一個程序,產生所有可能的長度為10bp的DNA序列
- 4、python這個代碼啥意思?求具體的。
- 5、已有一個文件DNA.txt。寫一個Python程序
- 6、python 遺傳算法問題
如何用Python構造hash表解決DNA k-mer問題
思路:
1、首先採用命A=0,C=1,G=2,T=3. 就相當於4進制數字,然後採用karp-Rabin算法轉換成唯一十進制數字。由於用此算法的哈希函數為:hash(value)=value*(4^(k-q-1));
value是該字符對應的值,k是kmer長度,q是此字符在字符串的位置範圍在[0-(q-1)]。然後把一個kmer裏面所有字符的hash值求和就行了。
2、那麼很容易看出來,對於連續的下害常憤端蒞得縫全俯戶一個Kmer,就有推理公式了 hashNew=addValue+(hashOld-deleteValue*(4^(k-1)))*4; hashNew就是往右平移一個字符的kmer hash值,hashOld就是平移之前的值,addValue就是平移後右邊多的一個字符,deleteValue就是平移後左邊少的一個字符。這樣整個hash表建立的時間複雜度約為O(m+k),m是整個文本長度。
3、由於kmer長度如果過長,其hash值過大,會造成內存不夠溢出的現象,所以kmer內部定死為10 。那麼問題就來了,如何應對不同的kmer值。分三種情況。
第一種:q10
這種可以將kmer以10為單位,將hash表中對應值取出,然後對結果進行分析,這邊分析方法為建立兩個數組一個二維數組unionName儲存位置關係,一個一維數組unionScore,計數用。 思路就是首先第一輪初始化unionName[Name][Pos]全部賦值Pos 並初始化unionScore,然後再第二輪匹配如果unionName[Name][Pos-cycle]=Pos-1則將其賦值為當前Pos,cycle為當前循環次數。並將當前循環數存入unionScore[NAME]中。最後當unionScore[NAME]值也就是循環數為k-1,即我們需要的交集了。
第二種:q=10
直接求出hash值,取出相應的值即可。
第三種:q10
可以用前綴種子+後綴種子交集產生。
前綴種子:在字符串後面補字符直到長度等於K,這個很容易看出來 最小是全補A,最大是全補T,然後將最小值到最大值之間的hash值即為所求。
後綴種子:後綴種子和前綴種子不同就是在字符串左邊補齊字符。所以此時需要進行變換。只要對前置種子產生的值變化下就行了。(preValue-minValue)*(4^(K-q))+hash(p) 。其中preValue就是對應的前置種子的hash值,minValue就是前置種子中最小值也就是全補A的情況,hash(p)就是字符串長度為p時候的hash值。
交集就是先求後綴種子所有的值,再加上 前綴種子中起始位置在[0-(k-1)]中的值。
將DNA序列在Python問題,怎麼解決
1#!/usr/bin/python
2 #-*- coding:utf-8 -*-
3 “將DNA序列轉換為RNA序列,即將T轉換為U即可,利用字符串的replace方法”
5 f=open(‘./test.txt’, ‘r’)
6 line=f.read()
7 dna2rnaline=line.replace(‘T’, ‘U’)
8 f.close()
9 f=open(‘./test.txt’, ‘w’)
10 line=f.write(dna2rnaline)
11 f.close()#了解DNA序列和RNA序列的鹼基差別
用c語言編寫一個程序,產生所有可能的長度為10bp的DNA序列
沒用C寫,用python寫的,道理都一樣。
def generate(n): //n為長度
for i in range(4**n):
a=[0 for i in range(n)] //a為長度為n的一個序列
num = i
z = 0
while(num!=0):
a[z]=num%4
z = z+1
num = int(num/4)
for j in a:
if j==0:
print(‘A’,end=””)
elif j==1:
print(‘T’,end=””)
elif j==2:
print(‘G’,end=””)
else:
print(‘C’,end=””)
print()
原理就是四進制轉換。
當調用函數generate(2),產生結果AA,TA,GA,CA,AT,TT,GT,CT,AG,TG,GG,CG,AC,TC,GC,CC
python這個代碼啥意思?求具體的。
import string
str_c=’dna’
str_letter=string.ascii_letters # 生成所有小寫字母列表
dict_letter={} # 新建空字典
for letter in str_letter: # 遍歷字母列表
dict_letter[letter]=[] # 以每個小寫字母為key,以空列表為 value,為字典創建新成員
for i in str_c: # 遍歷字符串
dict_letter[i].append(i) # 查找字典中以 i 為鍵key的值value,並在其(列表)中添加 i
for count in str_letter:
if len(dict_letter[count])!=0: # 若字典中以 count 為鍵的值不是空列表
print(‘%s:%d’%(count,len(dict_letter[count]))) #輸出此列表的長度
print() # 輸出一個換行符
已有一個文件DNA.txt。寫一個Python程序
def readfromfile(filename):
with open(filename, ‘rt’) as handle:
return handle.read()
def appendtofile(filename, lines):
with open(filename, ‘at’) as handle:
handle.writelines(lines)
def itercui():
while 1:
content = raw_input()
if content in (‘exit’, ‘quit’):
break
yield content
if __name__ == “__main__”:
filename = “record.log”
print readfromfile(filename)
appendtofile(
filename,
[ln+’\n’ for ln in itercui()]
)
python 遺傳算法問題
遺傳算法(GA)是最早由美國Holland教授提出的一種基於自然界的「適者生存,優勝劣汰」基本法則的智能搜索算法。
遺傳算法也是借鑒該基本法則,通過基於種群的思想,將問題的解通過編碼的方式轉化為種群中的個體,並讓這些個體不斷地通過選擇、交叉和變異算子模擬生物的進化過程,然後利用「優勝劣汰」法則選擇種群中適應性較強的個體構成子種群,然後讓子種群重複類似的進化過程,直到找到問題的最優解或者到達一定的進化(運算)時間。
原創文章,作者:HBGJC,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329371.html