view ch2ex6.py @ 27:78116556b491

Exercise 1 in chapter 5.1 (Zipf's law).
author Brian Neal <bgneal@gmail.com>
date Sat, 05 Jan 2013 16:38:24 -0600
parents 9f1fccc13991
children
line wrap: on
line source
"""ch2ex6.py - Program for Chapter 2.5, exercise 6.

This program generates random graphs with parameters n and p and computes the
fraction of them that are connected.

"""
import string

from Graph import Vertex
from RandomGraph import RandomGraph


LABELS = string.letters + string.punctuation

def test_graph(n, p):
    """Generate a RandomGraph with parameters n & p and return True if the
    graph is connected, False otherwise.

    """
    vs = [Vertex(c) for c in LABELS[:n]]
    g = RandomGraph(vs)
    g.add_random_edges(p)
    return g.is_connected()


def test_p(n, p, num):
    """Generate num RandomGraphs with parameters n & p and return the number
    of graphs that are connected.

    """
    count = 0
    for i in range(num):
        if test_graph(n, p):
            count += 1

    return count


def main(script_name, n=26, p=0.1, num=1, *args):
    """Generate num RandomGraphs with parameters n & p and print out the number
    of graphs that are connected.

    """

    n = int(n)
    p = float(p)
    num = int(num)

    count = test_p(n, p, num)
    print count


if __name__ == '__main__':
    import sys
    main(*sys.argv)