示例#1
0
 //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;
 }
示例#2
0
        //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);
                }
            }
        }