#! /usr/bin/env python # numBasePairsQuasiRandom.py # P.Clote # Program computes expected number of base pairs in # quasi-random saturated structures. # For rnaSize = 1000, with 5000 repetitions, # expected number of base pairs is 377.884 with # stdev 8.18158879254 import sys,math,random from stats import getSampleStats THRESHOLD = 1 def f(i,j): if j-i>THRESHOLD: k = random.choice(range(i,j+1)) if k-1-(i+1)>THRESHOLD: if j-(k+1)>THRESHOLD: return 1+f(i+1,k-1)+f(k+1,j) else: return 1+f(i+1,k-1) elif j-(k+1)>THRESHOLD: return 1+f(k+1,j) else: return 1 return 0 def main(n,numTimes): L = [] for i in range(numTimes): L.append(f(1,n)) mean,stdev,max,min = getSampleStats(L) print mean,stdev if __name__ == '__main__': if len(sys.argv)< 2: print "Usage: %s rnaSize [numTimes]" % sys.argv[0] sys.exit(1) rnaSize = int(sys.argv[1]) if len(sys.argv)>2: numTimes = int(sys.argv[2]) else: numTimes = 10 main(rnaSize,numTimes)