Pour "mon algo", je propose qu'on l'appelle "algo par combinaisons" si ça te va ?
Je vais relire attentivement tout ton post (pour le moment, j'ai fait une lecture rapide).
Mais pour l'algo par combinaison, il existe des outils simples et performants pour mettre ensemble des chemins qui ont les mêmes mines (ça peut nous simplifier la vie).
Voilà le principe :
- Effectivement, on attribut à chacune des n mines un indice de 1 à n (ou zéro à n-1, peu importe). On obtient l'indice de Mi par indice(Mi).
- Un chemin E de longueur k est à un moment donné représenté par :
- C ses k mines dans l'ordre (ce que tu appelles aussi C)
- V un vecteur de bits de taille n (même rôle que ce que tu appelles L)
(un vecteur de bit, c'est simplement un vecteur de valeurs 0/1)
- Au départ, V est composé de 0. On parcourt les Mi de C et on affecte V[indice(Mi)] = 1
- V représente donc une valeur N (équivalent à un entier < 2^n)
- On utilise ensuite une table de hashage H : c'est un outil qui permet de stocker et récupérer des éléments en vis à vis d'une clé en o(1)
- De là, à une étape x du calcul, on dispose de m chemins Ei, donc de m Vi, donc de m Ni
- On boucle donc sur les Ei et on affecte chaque Ei dans une liste dans H en vis à vis de son Ni
- A l'issue on a donc dans H k clés avec en vis à vis de chacune les Ei partageant les mêmes éléments.
> ça peut paraitre compliqué (?), mais ce sont des outils courants et très efficaces.
Dans la pratique, partant d'un Ei de taille k, on va générer x nouveaux E'i de taille k+1.
Ca nécessite de faire une copie E'i de Ei et ajouter une mine M. Voici les opérations après la copie :
- L( E'i ) = L( E'i ) + M
- V( E'i )[indice(M)] = 1
Donc le traitement du vecteur coute peu (la copie de n/8 octets pour n mines, essentiellement).
Pour ce qui est de la table de hash, à titre d'info, les machines actuelles (sans être des bêtes de course) peuvent y stocker environ 1 million d'éléments par seconde.
Bon sinon, je relis attentivement tout ton post dans la journée...