Mercurial > public > think_complexity
diff ch4ex4.py @ 23:74c9d126bd05
Working on the SmallWorldGraph exercises.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 02 Jan 2013 16:50:55 -0600 |
parents | |
children | 5c2c4ce095ef |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ch4ex4.py Wed Jan 02 16:50:55 2013 -0600 @@ -0,0 +1,47 @@ +"""This program performs item 4 in 4.4 exercise 4. + +"Make a graph that replicates the line marked C(p)/C(0) in Figure 2 of the +paper. In other words, confirm that the clustering coefficient drops off slowly +for small values of p." + +""" +import random +import matplotlib.pyplot as pyplot + +from Graph import Vertex +from SmallWorldGraph import SmallWorldGraph + + +title = 'C(p)/C(0)' + +# compute C(0) +n = 1000 +k = 10 +vs = [Vertex(str(i)) for i in range(n)] +g = SmallWorldGraph(vs, k, 0.0) +c0 = g.clustering_coefficient() +print 'c0 =', c0 + +# compute data +p_vals = [0, + 0.0001, 0.0002, 0.0004, 0.0006, 0.0008, + 0.001, 0.002, 0.004, 0.006, 0.008, + 0.01, 0.02, 0.04, 0.06, 0.08, + 0.1, 0.2, 0.4, 0.6, 0.8, + 1.0] + +c_vals = [] +for p in p_vals: + g = SmallWorldGraph(vs, k, p) + c_vals.append(g.clustering_coefficient() / c0) + +# plot graph +pyplot.clf() +pyplot.xscale('log') +pyplot.yscale('log') +pyplot.title('') +pyplot.xlabel('p') +pyplot.ylabel('C(p)/C(0)') +pyplot.plot(p_vals, c_vals, label=title, color='green', linewidth=3) +pyplot.legend(loc=4) +pyplot.show()