您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關java如何實現基因序列比較,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
設計算法,計算兩給定基因序列的相似程度。
人類基因由4種核苷酸,分別用字母ACTG表示。要求編寫一個程序,按以下規則比較兩個基因序列并確定它們的相似程度。即給出兩個基因序列AGTGATG和GTTAG,它們有多相似呢?測量兩個基因相似度的一種方法稱為對齊。使用對齊方法可以在基因的適當位置加入空格,讓兩個基因的長度相等,然后根據基因的分值矩陣計算分數。
看了很多代碼基本上都是用c++或者c寫的,但是習慣性寫java就用java實現一下
基本的思路就是,和背包問題差不多,實現還是模仿填表的形式去實現的
表達式:
s1 = result[i-1][j-1] + getScore(X[i], Y[j]) 這個是x,y序列使用坐標匹配
s2 = result[i-1][j] + getScore(X[i], ‘-') 這個是x序列匹配y的 ‘-'
s3 = result[i][j-1] + getScore('-', Y[j]) 這個是y序列匹配x的 ‘-'
result[i][j] = max(s1,s2,s3) 找出三個中最大的就是所求的值
package algorithmClassSet.three; import java.util.HashMap; import java.util.Map; /** * s1 = result[i-1][j-1] + getScore(X[i], Y[j]) 這個是x,y序列使用坐標匹配 * s2 = result[i-1][j] + getScore(X[i], '-') 這個是x序列匹配y的 ‘-' * s3 = result[i][j-1] + getScore('-', Y[j]) 這個是y序列匹配x的 ‘-' * result[i][j] = max(s1,s2,s3) 找出三個中最大的就是所求的值 * m*n */ public class GeneSequenceComparison { public static void main(String[] args) { dealIt(); } private static void dealIt() { String[] X = {"A", "G", "T", "G", "A", "T", "G"}; String[] Y = {"G", "T", "T", "A", "G"}; int m = X.length + 1; int n = Y.length + 1; int[][] result = new int[m][n]; for (int i = 1; i < m; i++) { result[i][0] = result[i - 1][0] + getScore(X[i - 1], "-"); } for (int j = 1; j < n; j++) { result[0][j] = result[0][j - 1] + getScore("-", Y[j - 1]); } for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { int s1 = result[i - 1][j - 1] + getScore(X[i - 1], Y[j - 1]); int s2 = result[i - 1][j] + getScore(X[i - 1], "-"); int s3 = result[i][j - 1] + getScore("-", Y[j - 1]); int maxs = getMax(s1, s2, s3); result[i][j] = maxs; } } System.out.println("結果為:" + result[m - 1][n - 1]); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { System.out.print(result[i][j] + " "); } System.out.println(); } } private static int getMax(int s1, int s2, int s3) { int flag = s1; if (flag < s2) { flag = s2; } if (flag < s3) { flag = s3; } return flag; } //傳入值獲取分數 private static int getScore(String x, String y) { //x和y必須屬于 ACGT- Map<String, Integer> map = new HashMap<>(); map.put("A", 0); map.put("C", 1); map.put("G", 2); map.put("T", 3); map.put("-", 4); int[][] score = { {5, -1, -2, -1, -3}, {-1, 5, -3, -2, -4}, {-2, -3, 5, -2, -2}, {-1, -2, -2, 5, -1}, {-3, -4, -2, -1, -10000000}}; return score[map.get(x)][map.get(y)]; } }
關于“java如何實現基因序列比較”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。