Mercurial > public > think_complexity
view ch4ex4.py @ 48:98eb01502cf5 tip
Follow up to last commit. Re-orient the r-pentomino. Added progress display.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 31 Jul 2013 20:37:12 -0500 |
parents | 15ff31ecec7a |
children |
line wrap: on
line source
"""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 matplotlib.pyplot as pyplot from Graph import Vertex from SmallWorldGraph import SmallWorldGraph # Use Dijkstra or Floyd-Warshall to compute L DIJKSTRA = True # 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() l0 = g.big_l3() if DIJKSTRA else g.big_l2() print 'c0 =', c0, 'l0 =', l0 # compute data p_vals = [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 = [] l_vals = [] for p in p_vals: g = SmallWorldGraph(vs, k, p) c_vals.append(g.clustering_coefficient() / c0) l = g.big_l3() if DIJKSTRA else g.big_l2() l_vals.append(l / l0) p_vals.insert(0, 0.0) c_vals.insert(0, 1.0) l_vals.insert(0, 1.0) # plot graph pyplot.clf() pyplot.xscale('log') pyplot.yscale('linear') pyplot.title('') pyplot.xlabel('p') pyplot.ylabel('C(p)/C(0)') pyplot.plot(p_vals, c_vals, label='C(p)/C(0)', color='green', linewidth=3) pyplot.plot(p_vals, l_vals, label='L(p)/L(0)', color='blue', linewidth=3) pyplot.legend(loc='lower left') pyplot.show()