我目前正在研究分析偏斜差異的腳本。不幸的是,我的問題是,當字符串的長度增加時,運行時間變得太長,我似乎無法計算出我的答案。運行時間太長,對於GC偏斜
def SkewGC(file):
countG = 0
countC = 0
diffGtoC = ""
# first, we need to find number of G's.
# the idea is, if G appears, we add it to the count.
# We'll just do the same to each one.
for pos in range(0,len(file)):
if file[pos] == "G":
countG = countG+1
if file[pos] == "C":
countC = countC+1
diffGtoC = diffGtoC + str(countG-countC) + ","
return diffGtoC.split(",")
SkewGCArray = SkewGC(data)
# This because I included extra "," at the end...
SkewGCArray = [int(i) for i in SkewGCArray[:len(SkewGCArray)-1]]
def min_locator(file):
min_indices = ""
for pos in range(0,len(file)):
if file[pos] == min(file):
min_indices = min_indices + str(pos) + " "
return min_indices
print min_locator(SkewGCArray)
本質上,這個腳本計算G和C(對應於DNA核苷酸)的數目,獲得在每個位置的差異,然後我試圖找到最小的索引。它適用於低文件長度(這是輸入字符串),但是當長度變得很大時 - 即使像90000+,然後我的腳本運行但無法在合理的時間內解析爲答案(〜4-5分鐘)。
任何人都可以指出我能做些什麼來使它更快嗎?我想過是否更好說,獲得差異(diffGtoC),將其設置爲最小值,然後重新計算每個差值,直到它看到不同的期間,我也將取代最小值。
但我對這種方法的擔心是找到並保留最小指數。如果我說,曾與值的數組:
[-4,-2,-5,-6,-5,-6]
我可以看到如何改變的最小值(-4至 - 5,然後到-6)在算法運行時方面會更快,但我將如何能夠保持-6的位置?不知道這是否完全有道理。