def __init__(self, motListe, algo): self.listeNoeud = FastTable() self.solution = None mot = algo.heur(motListe, None) motListe.remove(mot) for el in mot.getValueDomaine(): t = (el[1], Noeud(None, motListe[:], mot, el)) self.listeNoeud.insert(t) self.algo = algo
class Arbre: def __init__(self, motListe, algo): self.listeNoeud = FastTable() self.solution = None mot = algo.heur(motListe, None) motListe.remove(mot) for el in mot.getValueDomaine(): t = (el[1], Noeud(None, motListe[:], mot, el)) self.listeNoeud.insert(t) self.algo = algo # Fonction qui retourne la feuille possédant la valeur maximum # En cas d'égalité, on prend le noeuds le plus profond def get_Noeud_Max(self): global NBMANMAX maxtuple = self.listeNoeud.tail() maxval = maxtuple[0] # S'il ne reste plus qu'une varible à instanncier on la retourne if len(self.listeNoeud) == 0: return maxtuple # Sinon on récupère tout les noeuds de la liste qui ont la valeur max tmp = self.listeNoeud.tail() tableMax = [maxtuple] while tmp[0] == maxval and len(self.listeNoeud)>0: tableMax += [tmp] tmp = self.listeNoeud.tail() self.listeNoeud.insert(tmp) # Parmi les noeuds récupérés, on récupère le plus profond elmax = max(tableMax,key=lambda x:x[1].prof) tableMax.remove(elmax) # On remet les autres noeuds dans la liste for el in tableMax: self.listeNoeud.insert(el) # On renvoi le noeud choisi return elmax # Fonction de mise à jour de l'arbre def update(self): # Récupère le noeud max parmis les feuilles et crée ses fils puis les ajoutes à la liste de feuilles if len(self.listeNoeud) > 0: n = self.get_Noeud_Max() else: return "Pas de solution" l = n[1].create_Fils(self.algo, self.listeNoeud) if isinstance(l, Noeud): # Si l est un Noeud et non une liste alors c'est la solution optimale self.solution = l return l