File: ProbShared3.java

package info (click to toggle)
bbmap 39.20%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,024 kB
  • sloc: java: 312,743; sh: 18,099; python: 5,247; ansic: 2,074; perl: 96; makefile: 39; xml: 38
file content (48 lines) | stat: -rwxr-xr-x 1,271 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package fun;

import java.util.HashSet;
import java.util.Random;

public class ProbShared3 {

	public static void main(String args[]){
		int k=Integer.parseInt(args[0]);
		int len1=Integer.parseInt(args[1]);
		int len2=Integer.parseInt(args[2]);
		int rounds=Integer.parseInt(args[3]);
		
		System.out.println("Probability:   "+simulate(k, len1, len2, rounds));
	}
	
	static double simulate(int k, int len1, int len2, int rounds){
		int successes=0;
		final HashSet<Long> set=new HashSet<Long>();
		for(int i=0; i<rounds; i++){
			successes+=simulateOnePair(k, len1, len2, set);
		}
		return successes/(double)rounds;
	}
	
	static int simulateOnePair(int k, int len1, int len2, HashSet<Long> set){
		fillRandomSet(k, len2, set);
		final long space=(long)Math.pow(4, k);
		final int kmers=len1-k+1;
		for(int i=0; i<kmers; i++){
			long kmer=(randy.nextLong()&Long.MAX_VALUE)%space;
			if(set.contains(kmer)){return 1;}
		}
		return 0;
	}
	
	static void fillRandomSet(int k, int len, HashSet<Long> set){
		set.clear();
		final long space=(long)Math.pow(4, k);
		final int kmers=len-k+1;
		for(int i=0; i<kmers; i++){
			set.add((randy.nextLong()&Long.MAX_VALUE)%space);
		}
	}
	
	static final Random randy=new Random();
	
}