Beispiel #1
0
void tri_rapide(int *t, int deb, int fin)
{
    if (deb < fin) {
        int milieu = partition(t,deb,fin);
        tri_rapide(t,deb,milieu);
        tri_rapide(t,milieu+1,fin);
    }
}
Beispiel #2
0
structSondes tri_rapide(int *t, int gauche, int droite) {
  structSondes sonde = { 0, 0, 0 };

  sonde.nb_comparaisons++;
  if (gauche < droite) {
    int pivot = partitionner(t, gauche, droite, &sonde);
    tri_rapide(t, gauche, pivot - 1);
    tri_rapide(t, pivot + 1, droite);
  }

  return sonde;
}
Beispiel #3
0
int main() {
    int t[N] = {10,2,4,5,6,3,1,9,7,8};
    //tri_bulle(t);
    //tri_insertion(t);
    //tri_selection(t);
    tri_fusion(t,0,N);
    affiche(t);
    tri_rapide(t,0,N-1);
    affiche(t);
    return 0;
}
Beispiel #4
0
int test_GRAPHPC(int nb_individus,int nb_dimensions,groupe_t *groupe_pere,groupe_t *groupe1,
		 groupe_t *groupe2)
{
  /*declaration de variables*/
  int i,j,compteur,on_divise;
  double *probabilites_transition_1vers2,*probabilites_transition_2vers1;
  double somme,moyenne_changement_classe1,moyenne_changement_classe2,pourcentage;
  double probabilite_attendue_changement_classe1,probabilite_attendue_changement_classe2;
  /*fin declaration de variables*/
  
  pourcentage=0.5;

  /*allocation memoire*/
  probabilites_transition_1vers2=(double *)malloc(sizeof(double)*groupe1->nb_individus);
  probabilites_transition_2vers1=(double *)malloc(sizeof(double)*groupe2->nb_individus);
  /*fin allocation memoire*/

  compteur=0;
  on_divise=NON;

  /*on commence par les transitions partant de sommets du groupe1*/
  for(i=0;i<groupe1->nb_individus;i++)
    {
      somme=0;
      for(j=0;j<groupe1->nb_individus;j++)
	{
	  if(j!=i)
	    {
	      somme+=groupe1->individus[i]->valeurs_traitees[groupe1->individus[j]->id];
	    }
	}
      probabilites_transition_1vers2[i]=0;
      for(j=0;j<groupe2->nb_individus;j++)
	{
	  probabilites_transition_1vers2[i]+=
	    groupe1->individus[i]->valeurs_traitees[groupe2->individus[j]->id];
	  somme+=groupe1->individus[i]->valeurs_traitees[groupe2->individus[j]->id];
	}

      if(somme<ZERO_LIMIT)
	{
	  on_divise=OUI;
	  break;
	}
      probabilites_transition_1vers2[i]/=somme;
    }
  if(on_divise==NON)
    {
      /*on continue par les transitions partant de sommets du groupe2*/
      for(i=0;i<groupe2->nb_individus;i++)
	{
	  somme=0;
	  for(j=0;j<groupe2->nb_individus;j++)
	    {
	      if(j!=i)
		{
		  somme+=groupe2->individus[i]->valeurs_traitees[groupe2->individus[j]->id];
		}
	    }
	  probabilites_transition_2vers1[i]=0;
	  for(j=0;j<groupe1->nb_individus;j++)
	    {
	      probabilites_transition_2vers1[i]+=
		groupe2->individus[i]->valeurs_traitees[groupe1->individus[j]->id];
	      somme+=groupe2->individus[i]->valeurs_traitees[groupe1->individus[j]->id];
	    } 

	  if(somme<ZERO_LIMIT)
	    {
	      on_divise=OUI;
	      break;
	    }
	  probabilites_transition_2vers1[i]/=somme;
	}
    }
  
  if(on_divise==NON)
    {
      /*on trie les probabilites de changement de groupe par ordre decroissant*/
      tri_rapide(probabilites_transition_1vers2,0,groupe1->nb_individus-1);
      moyenne_changement_classe1=0;
      for(i=0;i<groupe1->nb_individus;i++)
	{
	  printf("%.3f\n",probabilites_transition_1vers2[i]);
	  moyenne_changement_classe1+=probabilites_transition_1vers2[i];
	}
      moyenne_changement_classe1/=(double)groupe1->nb_individus;
      
      printf("\n**********************************\n");
      
      tri_rapide(probabilites_transition_2vers1,0,groupe2->nb_individus-1);
      moyenne_changement_classe2=0;
      for(i=0;i<groupe2->nb_individus;i++)
	{
	  printf("%.3f\n",probabilites_transition_2vers1[i]);
	  moyenne_changement_classe2+=probabilites_transition_2vers1[i];
	}
      moyenne_changement_classe2/=(double)groupe2->nb_individus;
      
      probabilite_attendue_changement_classe1=
	(double)groupe2->nb_individus/(double)(groupe_pere->nb_individus-1);
      probabilite_attendue_changement_classe2=
	(double)groupe1->nb_individus/(double)(groupe_pere->nb_individus-1);
      
      printf("moyenne1 : %f ; attendue : %f\n",moyenne_changement_classe1,
	     probabilite_attendue_changement_classe1);
      printf("moyenne2 : %f ; attendue : %f\n",moyenne_changement_classe2,
	     probabilite_attendue_changement_classe2);
      
      if((probabilite_attendue_changement_classe1-moyenne_changement_classe1>0.1)||
	 (probabilite_attendue_changement_classe2-moyenne_changement_classe2>0.1))
	{
	  on_divise=OUI;
	  printf("ON DIVISE\n");
	}
      else
	{
	  on_divise=NON;  
	  printf("ON NE DIVISE PAS\n");
	}
    }

  /*desallocation memoire*/
  free(probabilites_transition_1vers2);
  free(probabilites_transition_2vers1);
  /*fin desallocation memoire*/

  return on_divise;
}
Beispiel #5
0
   int main(int argn, char *argv[])
   {
      int type_data;
      int type_tri;
      int sauvegarde_tableau_initial;
      int sauvegarde_tableau_final;
      int affichage_tableaux;
      int n = 0;
      char *fichier_lecture_tableau_initial, *fichier_sauvegarde_tableau_initial, *fichier_sauvegarde_tableau_final;
      int *tab;
      int i;
   
   
      structSondes sondes = {0, 0, 0};
   
      if (argn == 1) 
      {
         aide(argv[0]);
         exit(1);
      }
   
      type_data = UNKNOWN;
      type_tri = UNKNOWN;
      sauvegarde_tableau_initial = FALSE;
      sauvegarde_tableau_final = FALSE;
      affichage_tableaux = FALSE;
   
      for ( i = 1; i < argn; i+=2 )
      {
      	// choix des données à trier et des sauvegardes éventuelles du tableau initial et final
         if (strcmp("-f", argv[i]) == 0)
         {
            fichier_lecture_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
            strcpy(fichier_lecture_tableau_initial, argv[i+1]);
            type_data = FICHIER;
            continue;
         }
      
         if (strcmp("-si", argv[i]) == 0)
         {
            fichier_sauvegarde_tableau_initial = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
            strcpy(fichier_sauvegarde_tableau_initial, argv[i+1]);
            sauvegarde_tableau_initial = TRUE;
            continue;
         }
      
         if (strcmp("-sf", argv[i]) == 0)
         {
            fichier_sauvegarde_tableau_final = (char *) malloc(1 + strlen(argv[i+1]) * sizeof(char));
            strcpy(fichier_sauvegarde_tableau_final, argv[i+1]);
            sauvegarde_tableau_final = TRUE;
            continue;
         }
      
         if (strcmp("-a", argv[i]) == 0)
         {
            n = atoi(argv[i+1]);
            type_data = RANDOM;
            continue;
         }
      
         if (strcmp("-mc", argv[i]) == 0)
         {
            n = atoi(argv[i+1]);
            type_data = TRIE;
            continue;
         }
      
         if (strcmp("-pc", argv[i]) == 0)
         {
            n = atoi(argv[i+1]);
            type_data = TRIE_INVERSE;
            continue;
         }

      
       	// choix de l'algorithme de tri
         if (strcmp("-t", argv[i]) == 0)
         {
            if (strcmp("bulle_naif", argv[i+1]) == 0)
               type_tri = BULLE_NAIF;
            
            else if (strcmp("bulle_bool", argv[i+1]) == 0)
               type_tri = BULLE_BOOL;
            
            else if (strcmp("bulle_opt", argv[i+1]) == 0)
               type_tri = BULLE_OPT;
            
            else if (strcmp("selection", argv[i+1]) == 0)
               type_tri = SELECTION;
            
            else if (strcmp("insertion", argv[i+1]) == 0)
               type_tri = INSERTION;
            
            else if (strcmp("rapide", argv[i+1]) == 0)
               type_tri = TRIRAPIDE;
            	
            else 
            {
					printf("\n le tri demandé < %s >  n'existe pas \n", argv[i+1]);
               aide(argv[0]);
               exit(1);
            }
            continue;
         }

      
       	// choix de la visualisation (affichage) du tableau initial et final
         if (strcmp("-v", argv[i]) == 0)
         {
            affichage_tableaux = TRUE;
            i--;
            continue;
         }
      	
			printf("\n l'option demandée < %s >  n'existe pas \n", argv[i]);
         aide(argv[0]);	
			exit(1);
      }
   
   	if (n < 1) {
			printf("\n le nombre d'éléments à trier est incorrect : %d \n", n);
         aide(argv[0]);	
			exit(1);
		}
   
   
      switch(type_data)
      {
         case TRIE:
            {
               tab = data_triee(n);
               printf("Tableau initial trié (meilleur des cas)");
               break;
            }
         
         case TRIE_INVERSE:
            {
               tab = data_triee_inverse(n);
               printf("Tableau intial trié en ordre inverse (pire des cas)");
               break;
            }
         case FICHIER:
            {
               tab = f_lire_data(fichier_lecture_tableau_initial, &n);
               printf("Tableau initial lu dans %s", fichier_lecture_tableau_initial);
               break;
            }
         case RANDOM:
            {
               tab = random_data(n);
               printf("Tableau initial aléatoire");
               break;
            }
         case UNKNOWN:
            aide(argv[0]);
            exit(1);
      }
   
      if (sauvegarde_tableau_initial == TRUE)
         f_ecrire_data(fichier_sauvegarde_tableau_initial, tab, n);
   
   
      if (affichage_tableaux == TRUE) {
         printf("\n");
         ecrire_data(tab,  n);
      }
   
      switch(type_tri)
      {
         case BULLE_NAIF: 
            sondes = tri_bulle_naif(tab, n);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (bulle naïf)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "bulle naïf", n);
            break;
         case BULLE_BOOL: 
            sondes = tri_bulle_bool(tab, n);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (bulle bool)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "bulle bool", n);
            break;
         case BULLE_OPT: 
            sondes = tri_bulle_opt(tab, n);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (bulle opt)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "bulle opt", n);
            break;
         case SELECTION:
            sondes = tri_selection(tab, n);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (selection)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "selection", n);
            break;
         case INSERTION:
            sondes = tri_insertion(tab, n);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (insertion)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "insertion", n);
            break;
         case TRIRAPIDE:
            sondes = tri_rapide(tab, 0, n-1);
            if (affichage_tableaux == TRUE) {
               printf("Tableau trié (rapide)\n");
               ecrire_data(tab,  n);
            }
            analyse_complexite(sondes, "rapide", n);
            break;
         case UNKNOWN:
            aide(argv[0]);
            exit(1);
      }
   
   
      if (sauvegarde_tableau_final == TRUE)
         f_ecrire_data(fichier_sauvegarde_tableau_final, tab, n);
   
      printf("\n");
      return 0;
   }