//Constructeur public Sommet(List <double[]> valeur, int variable, double variableValeur, Sommet filsGauche, Sommet filsDroit, Sommet parent) { this.valeur = valeur; this.variableDivisee = variable; this.variableDiviseeValeur = variableValeur; this.filsGauche = filsGauche; this.filsDroit = filsDroit; this.parent = parent; }
//Exo6 //cette fonction permet de créer l'arbre, elle a en parametre une variable de type sommet et une liste de double et renvoi rien private void CreationArbre(Sommet arbre, List <double[]> val) { if (arbre == null) { return; //AffichagePrefixe(arbre); } else { double pourcentage = PourcentageIndividus(y, val) * 100; if (tailleMax > HauteurArbre(racine) && val.Count > ((min * tailledepart) / 100) && (pourcentage > seuil1 && pourcentage < seuil2)) // test ok { double[] x1 = new double[val.Count]; double[] x2 = new double[val.Count]; double[] x3 = new double[val.Count]; double[] x4 = new double[val.Count]; int i = 0; foreach (var el in val) { RemplirTableau(el, x1, x2, x3, x4, i); i++; } double mediane_x1 = MedianeCorrigee(x1); double mediane_x2 = MedianeCorrigee(x2); double mediane_x3 = MedianeCorrigee(x3); double mediane_x4 = MedianeCorrigee(x4); List <double[]> gauche1 = NouveauEchantillon(val, 1, mediane_x1, false); List <double[]> droite1 = NouveauEchantillon(val, 1, mediane_x1, true); List <double[]> gauche2 = NouveauEchantillon(val, 2, mediane_x2, false); List <double[]> droite2 = NouveauEchantillon(val, 2, mediane_x2, true); List <double[]> gauche3 = NouveauEchantillon(val, 3, mediane_x3, false); List <double[]> droite3 = NouveauEchantillon(val, 3, mediane_x3, true); List <double[]> gauche4 = NouveauEchantillon(val, 4, mediane_x4, false); List <double[]> droite4 = NouveauEchantillon(val, 4, mediane_x4, true); double prec1_1 = PourcentageIndividus(y, gauche1) * 100; double prec1_2 = PourcentageIndividus(y, droite1) * 100; int a = Math.Max((int)prec1_1, (int)prec1_2); double prec2_1 = PourcentageIndividus(y, gauche2) * 100; double prec2_2 = PourcentageIndividus(y, droite2) * 100; int b = Math.Max((int)prec2_1, (int)prec2_2); double prec3_1 = PourcentageIndividus(y, gauche3) * 100; double prec3_2 = PourcentageIndividus(y, droite3) * 100; int c = Math.Max((int)prec3_1, (int)prec3_2); double prec4_1 = PourcentageIndividus(y, gauche4) * 100; double prec4_2 = PourcentageIndividus(y, droite4) * 100; int d = Math.Max((int)prec4_1, (int)prec4_2); if (mediane_x1 == -1) { a = -1; } if (mediane_x2 == -1) { b = -1; } if (mediane_x3 == -1) { c = -1; } if (mediane_x4 == -1) { d = -1; } int max = MeilleureDivision(a, b, c, d); double mediane = 0; if (max == 1) { mediane = mediane_x1; } else if (max == 2) { mediane = mediane_x2; } else if (max == 3) { mediane = mediane_x3; } else if (max == 4) { mediane = mediane_x4; } List <double[]> gauche = NouveauEchantillon(val, max, mediane, false); List <double[]> droite = NouveauEchantillon(val, max, mediane, true); if (mediane_x1 == -1 && mediane_x2 == -1 && mediane_x3 == -1 && mediane_x4 == -1) { return; } arbre.FilsGauche = new Sommet(gauche, max, mediane, null, null, arbre); arbre.FilsDroit = new Sommet(droite, max, mediane, null, null, arbre); // AffichageListe(gauche); //AffichageListe(droite); CreationArbre(arbre.FilsGauche, gauche); CreationArbre(arbre.FilsDroit, droite); } } }