import random #def nakljucni_sprehod_en2(matrika, k, l): #vrne seznam prvega prihoda do vozlišča l iz vozlišča k; sprehod je naključen # koraki = 0 # d = matrika.nrows() # rd = range(0,d) # if k == l: # sez3 = [] # for j in rd: # if matrika[k,j] != 0: #naredimo seznam sosednjih vozlišč # sez3.append(j) # else: # pass # c = random.choice(sez3) #naključno izbere v kako vozlišče se premaknemo # k = c #k označuje trenutno vozlišče # koraki += 1 # while k != l: # sez3 = [] # for j in rd: # if matrika[k,j] != 0: #naredimo seznam sosednjih vozlišč # sez3.append(j) # else: # pass # c = random.choice(sez3) #naključno izbere v kako vozlišče se premaknemo # k = c #k označuje trenutno vozlišče # sez3 = [] # koraki += 1 # else: # while k != l: # sez3 = [] # for j in rd: # if matrika[k,j] != 0: #naredimo seznam sosednjih vozlišč # sez3.append(j) # else: # pass # c = random.choice(sez3) #naključno izbere v kako vozlišče se premaknemo # k = c #k označuje trenutno vozlišče # sez3 = [] # koraki += 1 # return koraki #def nakljucni_sprehod_med_k_in_ostalimi(matrika, k): #naredi nakjučni sprehod iz vozlišča k do vsakega; 1x # sez = [] # d = matrika.nrows() # rd = range(0, d) # for i in rd: # sez.append(nakljucni_sprehod_en(matrika, k, i)) # return sez #def n_nakljucnih_sprehodov2(matrika, n): #n-krat poženemo naključni sprehod iz vsakega vozlišča; # d = matrika.nrows() # sez = [0]*d # rd = range(0, d) # while n > 0: # for i in rd: # c = en_nsbc(matrika, i) # for i in rd: # sez[i] += c[i] # n -= 1 # return sez def nakljucni_sprehod_en(matrika, k, l,koraki=0): #vrne seznam prvega prihoda do vozlišča l iz vozlišča k; sprehod je naključen d = matrika.nrows() rd = range(0,d) if k == l: sez3 = [] for j in rd: if matrika[k,j] != 0: #naredimo seznam sosednjih vozlišč sez3.append(j) c = random.choice(sez3) #naključno izbere v kako vozlišče se premaknemo k = c #k označuje trenutno vozlišče return nakljucni_sprehod_en(matrika,k,l,1) else: while k != l: sez3 = [] for j in rd: if matrika[k,j] != 0: #naredimo seznam sosednjih vozlišč sez3.append(j) c = random.choice(sez3) #naključno izbere v kako vozlišče se premaknemo k = c #k označuje trenutno vozlišče koraki += 1 return koraki def en_nsbc(matrika, k): #naredi nakjučni sprehod iz vsakega vozlišča do vozlišča k ; 1x sez = [] d = matrika.nrows() for i in range(0, d): sez.append(nakljucni_sprehod_en(matrika, i, k)) return sez def n_nakljucnih_sprehodov(matrika, k, n): #iz vsakega vozlišča n-krat poženemo naključni sprehod, ki se konča v k; d = matrika.nrows() sez = [0]*d rd = range(0, d) for j in range(0, n): c = en_nsbc(matrika, k) for i in rd: sez[i] += c[i] return sez def nsbc_koncna(matrika, k, n): d = matrika.nrows() a = n * d s = n_nakljucnih_sprehodov(matrika, k, n) vsota = sum(s) return a/vsota