import random
voisins = [[1, 2, 3, 4, 5],
[0, 2, 3],
[0, 1, 5],
[0, 1],
[0],
[0, 2]]
def voisin_alea(voisins, s):
return voisins[s][random.randrange(len(voisins[s]))]
def marche_alea(voisins, i, n):
if n == 0:
return i
return marche_alea(voisins, voisin_alea(voisins, i), n - 1)
def simule(voisins, i, n_tests, n_pas):
results = [0] * len(voisins)
for _ in range(n_tests):
j = marche_alea(voisins, i, n_pas)
results[j] += 1
return [total / n_tests for total in results]
frequences = simule(voisins, 3, 1000, 10)
print(f"Fréquences obtenues : {frequences}")
print(f"L'ordinateur 0 a la fréquence la plus élevée avec {frequences[0] * 100:.1f}% de chances.")
def temps_propagation(voisins, s):
infectes = [0] * len(voisins)
infectes[s] = 1
pas = 0
tous_infectes = [1] * len(voisins)
print(infectes)
while infectes != tous_infectes:
nouveau_infectes = [0] * len(voisins)
for infecte in infectes:
sommet_aleatoire = marche_alea(voisins, infecte, 2) # Marche aléatoire
nouveau_infectes[sommet_aleatoire] = 1
for i in range(len(voisins)):
if nouveau_infectes[i]==1 and infectes[i]==0:
infectes[i]=1
print(infectes)
pas += 1
return pas
print(f"Temps de propagation depuis le sommet 3 : {temps_propagation(voisins, 3)} étapes")
Fréquences obtenues : [0.322, 0.171, 0.194, 0.123, 0.057, 0.133]
L'ordinateur 0 a la fréquence la plus élevée avec 32.2% de chances.
[0, 0, 0, 1, 0, 0]
[1, 1, 0, 1, 1, 0]
[1, 1, 1, 1, 1, 1]
Temps de propagation depuis le sommet 3 : 2 étapes