J'ai écrit les procédures suivantes en SageMath (c'est presque du python, mais j'ai eu la flemme de tout écrire en python) :
# Inverse le dernier caractère d'une chaîne de P et F
- Code: Tout sélectionner
def changeder(S) :
if S[-1]=="P" : return S[:-1]+"F"
else : return S[:-1]+"P"
# Calcule la longueur du plus grand segment final de
# la chaîne S qui matche avec le début de la chaîne T
- Code: Tout sélectionner
def nbmatch(S,T) :
n=len(S)
i=0
while S[i:]!=T[:n-i] : i+=1
return n-i
# Calcule l'espérance du nb de tirages pour
# voir apparaître la chaîne S
- Code: Tout sélectionner
def EspApp(S) :
N=len(S)
M=matrix(QQ,N,N)
for i in range(N-1) : M[i,i+1]=1/2
for i in range(N) :
j=nbmatch(changeder(S[:i+1]),S)
M[i,j]=1/2
Un=vector(QQ,N)
for i in range(N) :
Un[i]=1
E=(identity_matrix(QQ,N)-M)^(-1)*Un
return E[0]
# Produit la liste des chaînes de P ou F de longueur N
- Code: Tout sélectionner
def ltiragesPF(N) :
if N==0 : return [""]
else :
prec=ltiragesPF(N-1)
L=["F"+t for t in prec]+["P"+t for t in prec]
return L
Voila ce que ça donne pour les chaînes de longueur 7 : à côté de chaque chaîne, l'espérance du nombre de tirages pour la voir apparaître.
[('FFFFFFF', 254),
('FFFFFFP', 128),
('FFFFFPF', 130),
('FFFFFPP', 128),
('FFFFPFF', 134),
('FFFFPFP', 128),
('FFFFPPF', 130),
('FFFFPPP', 128),
('FFFPFFF', 142),
('FFFPFFP', 128),
('FFFPFPF', 130),
('FFFPFPP', 128),
('FFFPPFF', 134),
('FFFPPFP', 128),
('FFFPPPF', 130),
('FFFPPPP', 128),
('FFPFFFF', 134),
('FFPFFFP', 136),
('FFPFFPF', 146),
('FFPFFPP', 128),
('FFPFPFF', 134),
('FFPFPFP', 128),
('FFPFPPF', 130),
('FFPFPPP', 128),
('FFPPFFF', 134),
('FFPPFFP', 136),
('FFPPFPF', 130),
('FFPPFPP', 128),
('FFPPPFF', 134),
('FFPPPFP', 128),
('FFPPPPF', 130),
('FFPPPPP', 128),
('FPFFFFF', 130),
('FPFFFFP', 132),
('FPFFFPF', 138),
('FPFFFPP', 128),
('FPFFPFF', 146),
('FPFFPFP', 132),
('FPFFPPF', 130),
('FPFFPPP', 128),
('FPFPFFF', 130),
('FPFPFFP', 132),
('FPFPFPF', 170),
('FPFPFPP', 128),
('FPFPPFF', 130),
('FPFPPFP', 132),
('FPFPPPF', 130),
('FPFPPPP', 128),
('FPPFFFF', 130),
('FPPFFFP', 132),
('FPPFFPF', 130),
('FPPFFPP', 136),
('FPPFPFF', 130),
('FPPFPFP', 132),
('FPPFPPF', 146),
('FPPFPPP', 128),
('FPPPFFF', 130),
('FPPPFFP', 132),
('FPPPFPF', 130),
('FPPPFPP', 136),
('FPPPPFF', 130),
('FPPPPFP', 132),
('FPPPPPF', 130),
('FPPPPPP', 128),
('PFFFFFF', 128),
('PFFFFFP', 130),
('PFFFFPF', 132),
('PFFFFPP', 130),
('PFFFPFF', 136),
('PFFFPFP', 130),
('PFFFPPF', 132),
('PFFFPPP', 130),
('PFFPFFF', 128),
('PFFPFFP', 146),
('PFFPFPF', 132),
('PFFPFPP', 130),
('PFFPPFF', 136),
('PFFPPFP', 130),
('PFFPPPF', 132),
('PFFPPPP', 130),
('PFPFFFF', 128),
('PFPFFFP', 130),
('PFPFFPF', 132),
('PFPFFPP', 130),
('PFPFPFF', 128),
('PFPFPFP', 170),
('PFPFPPF', 132),
('PFPFPPP', 130),
('PFPPFFF', 128),
('PFPPFFP', 130),
('PFPPFPF', 132),
('PFPPFPP', 146),
('PFPPPFF', 128),
('PFPPPFP', 138),
('PFPPPPF', 132),
('PFPPPPP', 130),
('PPFFFFF', 128),
('PPFFFFP', 130),
('PPFFFPF', 128),
('PPFFFPP', 134),
('PPFFPFF', 128),
('PPFFPFP', 130),
('PPFFPPF', 136),
('PPFFPPP', 134),
('PPFPFFF', 128),
('PPFPFFP', 130),
('PPFPFPF', 128),
('PPFPFPP', 134),
('PPFPPFF', 128),
('PPFPPFP', 146),
('PPFPPPF', 136),
('PPFPPPP', 134),
('PPPFFFF', 128),
('PPPFFFP', 130),
('PPPFFPF', 128),
('PPPFFPP', 134),
('PPPFPFF', 128),
('PPPFPFP', 130),
('PPPFPPF', 128),
('PPPFPPP', 142),
('PPPPFFF', 128),
('PPPPFFP', 130),
('PPPPFPF', 128),
('PPPPFPP', 134),
('PPPPPFF', 128),
('PPPPPFP', 130),
('PPPPPPF', 128),
('PPPPPPP', 254)]
On peut faire un certain nombre de conjectures en voyant cette liste.
Déjà, on constate qu'il faut en moyenne nettement plus de temps pour voir apparaître 7 P (ou 7 F) consécutifs que toute autre chaîne. Ça n'a rien de surprenant.