Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Use randomized simulation to estimate the expected length of the longest run of consecutive heads in a series of n coin flips. For example, in

Use randomized simulation to estimate the expected length of the longest run of consecutive heads in a series of n coin flips. For example, in this series of 10 flips:

T, T, H, T, H, T, H, H, H, T 

the length of the longest run of heads is 3. Start with code in lec35coins.py. First, modify doNCoinFlips function to return (instead of the numbers of heads and tails) the length of the longest run of consecutive heads found in a sequence of n flips. Next, modify doCoinFlipTrials to collect and process the results of multiple trials of coin flipping, calculating the average longest run of heads for the set of trials. Third, modify doCoinFlipExperiment to calculate and print the expected longest heads run length for a wide range of numbers of flipped coins.

import random import math

def stdDev(values): mean = float(sum(values))/len(values) diffsum = 0.0 for item in values: diff = item - mean diffsum = diffsum + diff*diff return math.sqrt(diffsum/len(values))

# simulate flipping a coin numFlips times. # return tuple (number of heads, number of tails) # def doNCoinFlips(numFlips): numHeads = 0 numTails = 0 flipNum = 0 while flipNum < numFlips: value = random.randint(1,2) if value == 1: numHeads = numHeads + 1 flipNum = flipNum + 1 return len(flipNum)

# Do numTrials coin flip simulations with numCoins each time. # For each trial compute ratio of number of heads to number of trials. # Compute average and standard deviation of the ratios over all trials. # Print summary and # return tuple (average heads/tails ratio, standard devation of ratio) # def doCoinFlipTrials(numTrials, numCoins): headTailRatios = [] headTailDiffs = [] for trial in range(numTrials): nHeads, nTails = doNCoinFlips(numCoins) #print("Trial #{}: numHeads = {}, numTails = {}".format(trial, nHeads, nTails)) # NOTE: This code *can* crash - it's unlikely but nTails can, of course, be 0 headTailRatios.append(float(nHeads)/nTails) ratiosAvg = sum(headTailRatios)/len(headTailRatios) ratiosStdDev = stdDev(headTailRatios) print("# of flips = {}: avg head/tail ratio: {} (SD: {})".format(numCoins, ratiosAvg, ratiosStdDev)) return (numCoins, ratiosAvg, ratiosStdDev) # Execute doCoinFlipTrials for different numbers of coins (and given number of trials), # starting with minCoins and increasing by factor until number exceeds maxCoins. # Return list of results returned by the calls to doCoinFlipTrials. # Thus, results will be of form [(minCoins, ..ratio.., ...std...), (factor*minCoins, ..ratio.., ...std..), ...] # def doCoinFlipExperiment(minCoins, maxCoins, factor, numTrials=20): numCoins = minCoins results = [] while numCoins <= maxCoins: results.append(doCoinFlipTrials(numTrials, numCoins )) numCoins = numCoins * factor return results

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Modern Database Management

Authors: Jeffrey A. Hoffer Fred R. McFadden

4th Edition

0805360476, 978-0805360479

More Books

Students also viewed these Databases questions