def random(n, p): a = stdarray.create2D(n, n, False) for i in range(n): for j in range(n): a[i][j] = stdrandom.bernoulli(p) return a
def flow(isOpen): n = len(isOpen) isFull = stdarray.create2D(n, n, False) #以下为脚手架基础上,新增的部分 for j in range(n): isFull[0][j] = isOpen[0][j] for i in range(1, n): for j in range(n): if isOpen[i - 1][j] and isOpen[i][j]: isFull[i][j] = True return isFull
def generate_transition_matrix(weblist): print('enter generate_transition_matrix()') transition_matrix = stdarray.create2D(3, 3, 0) wbnamelist = [weblist[i].url for i in range(len(weblist))] print(wbnamelist) for wb in weblist: i = wbnamelist.index(wb.url) for link in wb.link: j = wbnamelist.index(link[0]) transition_matrix[i][j] = link[1] print('return transition_matrix:', transition_matrix) return transition_matrix
def lifegame(life): ''' recursive return the adjacent part block :param x: :param y: :return: ''' stddraw.clear() draw(life) stddraw.show(500) for line in life: print(line) life2 = stdarray.create2D(10, 10, 0) for x in range(10): for y in range(10): print('x is {0},y is {1}'.format(x, y)) a = 0 for i in range(x - 1, x + 2): # print('i is {0}'.format(i)) for j in range(y - 1, y + 2): # print('j is {0}'.format(j)) if i < 0 or i > 9 or j < 0 or j > 9: pass else: a += life[i][j] print( 'i is {0},j is {1},life[{0}][{1}] is {3},a is{2}'. format(i, j, a, life[i][j])) if a == 0: print(x, y, 'no alive in 9') pass else: life2[x][y] = isalive(life, x, y) lifegame(life2)
接受命令行参数 moves,从标准输入读取一个转换矩阵(浮点数),通过moves次向量-矩阵乘法计算,计算 一个随机冲浪者经过moves步跳转到达各页面的概率。 最后在标准输出中输出页面排名 命令行模式: python3 tansition.py<tiny.txt|python3 markov.py 20 ''' from stdpackage import stdio,stdarray import sys moves = int(sys.argv[1]) n = stdio.readInt() stdio.readInt() p = stdarray.create2D(n,n,0.0) for i in range(n): for j in range(n): p[i][j] = stdio.readFloat() ranks = stdarray.create1D(n,0.0) ranks[0] = 1.0 for i in range(moves): new_ranks = stdarray.create1D(n,0.0) for k in range(n): for j in range(n): new_ranks[j] += ranks[k]*p[k][j] ranks = new_ranks for i in range(n):
#计算输出转换矩阵,矩阵上第i行第j列的数字,代表从i页跳转到 j页的概率 from stdpackage import stdarray, stdio n = stdio.readInt() linkCounts = stdarray.create2D(n, n, 0) outDegress = stdarray.create1D(n, 0) while not stdio.isEmpty(): i = stdio.readInt() j = stdio.readInt() outDegress[i] += 1 linkCounts[i][j] += 1 stdio.writeln(str(n) + ' ' + str(n)) for i in range(n): for j in range(n): p = (0.8 * linkCounts[i][j] / outDegress[i]) + (0.2 / n) stdio.writef('%8.5f', p) stdio.writeln()
1.输入跳转总次数n 2. 从页面0开始 3. 随机生成概率 sp,根据sp跳转到下一个页面,对于被跳转到的页面计数 4。重复3,直到总次数耗尽 5。输出每个页面被跳转到的比例(次数/n) ''' from stdpackage import stdio, stdarray, stddraw import random import sys moves = int(sys.argv[1]) n = stdio.readInt() stdio.readInt() P = stdarray.create2D(n, n, 0.0) P_accumulated = stdarray.create2D(n, n, 0.0) SP = stdarray.create1D(n, 0.0) for i in range(n): for j in range(n): P[i][j] = stdio.readFloat() for i in range(n): for j in range(n): for h in range(j + 1): P_accumulated[i][j] += P[i][h] def find_page(i, p): j = 0 while j < n:
def main(n): life = stdarray.create2D(10, 10, 0) stddraw.setXscale(-1, 10) stddraw.setYscale(-1, 10) life = initiate(life, n) lifegame(life)