JAVA 多线程解决复杂度较高的算法问题

来源:互联网 发布:知乎的人生赢家标准 编辑:程序博客网 时间:2024/05/23 16:17

//再求基于GOTerm的基因相似度算法的时候 使用JAVA多线程开启20个线程

package com.txt;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Vector;import java.util.concurrent.CopyOnWriteArrayList;import java.util.regex.*;public class genesSimilarityF {public static double genePairSimilarity(String gene1, String gene2,List<String> allgene, List<String> allgo,List<String> GO,List<String> GOTime) throws IOException {List<String> term1 = findgenesGo(gene1, allgene, allgo);List<String> term2 = findgenesGo(gene2, allgene, allgo);List<String> goterm = findSame(term1, term2);double result = genesSimilarity(goterm,allgene,allgo,GO,GOTime);return result;}public static List<String> findSame(List<String> term1, List<String> term2) {List<String> same = new ArrayList<String>();for (String s1 : term1) {for (String s2 : term2) {if (s1.equals(s2) || s1 == s2) {same.add(s2);}}}return same;}public static List<String> findgenesGo(String gene, List<String> allgene,List<String> allgo) {List<String> term1 = new ArrayList<String>();for (int i = 0; i < allgene.size(); i++) {String s = allgene.get(i);if (gene.equals(s) || gene == s) {term1.add(allgo.get(i));}}return term1;}public static int Count(String in, List<String> Go,List<String> GoTime) {int count = 0;for (int i =0;i<Go.size();i++) {if (in.equals(Go.get(i)) || in == Go.get(i)) {count = Integer.parseInt(GoTime.get(i)); }}return count;}public static double genesSimilarity(List<String>Go, List<String> allgene,List<String> allgo,List<String> GO,List<String> GOTime) throws IOException {if (Go.size() == 0) {return 0.0;}int[] count = new int[Go.size()];int i = 0;for (String go : Go) {count[i++] = Count(go,GO,GOTime);}int min = count[0];for (int j = 1; j < count.length; j++) {if (count[j] < min) {min = count[j];}}double result = 0.0;DecimalFormat df = new DecimalFormat();df.setMaximumFractionDigits(5);result = 2.0 / (double) min;return result;}public static String[] cutString(String in) {return in.split("");}public static HashSet<String> getAllGenes(String disease) {String realFile = "GeneSet\\" + disease;HashSet<String> genes = new HashSet<String>();try {BufferedReader br = new BufferedReader(new FileReader(new File(realFile)));String line = br.readLine();while (line != null) {genes.add(line.trim());line = br.readLine();}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return genes;}public static void diseaseSimilarity(String s1, String s2,HashSet<String> genes1, HashSet<String> genes2,List<String> ALLGene, List<String> AllGo,List<String> GO,List<String> GOTime) throws IOException {double simsum = 0.0;for (String g1 : genes1) {for (String g2 : genes2) {simsum += genePairSimilarity(g1, g2, ALLGene, AllGo,GO,GOTime);}}System.out.println("Similarity:"+ s1+ ","+ s2+ ":"+ String.format("%1$.6f",simsum / (genes1.size() * genes2.size())));try {FileWriter writer = new FileWriter("D://genesSimilarityFFF1//"+s1+"--"+s2+".txt", true);writer.write(s1+ ""+ s2+ ""+ String.format("%1$.6f",simsum / (genes1.size() * genes2.size()))+"\n");writer.close();} catch (IOException e) {e.printStackTrace();}}public static List<String> readAllGene(File f) throws IOException {List<String> r = new ArrayList<String>();if (f.isFile() && f.exists()) {InputStreamReader reader = new InputStreamReader(new FileInputStream(f));BufferedReader bufferR = new BufferedReader(reader);String lineTxt = "";while ((lineTxt = bufferR.readLine()) != null) {String[] out = cutString(lineTxt);String in = out[0];r.add(in);}}return r;}public static List<String> readAllGo(File f) throws IOException {List<String> r = new ArrayList<String>();if (f.isFile() && f.exists()) {InputStreamReader reader = new InputStreamReader(new FileInputStream(f));BufferedReader bufferR = new BufferedReader(reader);// String GoTermId = null;String lineTxt = "";while ((lineTxt = bufferR.readLine()) != null) {String[] out = cutString(lineTxt);String in = out[1];r.add(in);}}return r;}public static LinkedList<String> Disease1() throws IOException {LinkedList<String> r = new LinkedList<String>();File f = new File("GeneSet//HPOName.txt");if (f.isFile() && f.exists()) {InputStreamReader reader = new InputStreamReader(new FileInputStream(f));BufferedReader bufferR = new BufferedReader(reader);// String GoTermId = null;String lineTxt = "";while ((lineTxt = bufferR.readLine()) != null) {String[] out = cutString(lineTxt);String in = out[0];r.add(in);}}return r;}public static LinkedList<String> Disease2() throws IOException {LinkedList<String> r = new LinkedList<String>();File f = new File("GeneSet//HPOName.txt");if (f.isFile() && f.exists()) {InputStreamReader reader = new InputStreamReader(new FileInputStream(f));BufferedReader bufferR = new BufferedReader(reader);// String GoTermId = null;String lineTxt = "";while ((lineTxt = bufferR.readLine()) != null) {String[] out = cutString(lineTxt);String in = out[1];r.add(in);}}return r;}public static void main(String[] args) throws Exception{File file = new File("E:\\开题\\gene_association.goa_human\\FFF.txt");File file2 = new File("E:\\开题\\gene_association.goa_human\\fgo.txt");List<String> AllGene = readAllGene(file);List<String> AllGo = readAllGo(file);List<String> GO = readAllGene(file2);List<String> GOTime = readAllGo(file2);LinkedList<String> disease1 = Disease1();LinkedList<String> disease2 = Disease2();//List<String> dis1 = Collections.synchronizedList(disease1);//List<String> dis2 = Collections.synchronizedList(disease2);//for (int i = 0; i < disease1.size(); i++) {//HashSet<String> genes1 = getAllGenes(disease1.get(i) + ".txt");//HashSet<String> genes2 = getAllGenes(disease2.get(i) + ".txt");//diseaseSimilarity(disease1.get(i), disease2.get(i), genes1, genes2,//AllGene, AllGo,GO,GOTime);//}//for(int i =0;i<disease2.size();i++)//System.out.println(i+"###"+disease2.get(i)); for(int i =0;i<20;i++){ new Thread(new MultiThread(disease1,disease2, AllGene, AllGo, GO, GOTime)).start(); }}}


0 0
原创粉丝点击