Matrice pour comparaison entre deux algorithmes

hela85 - 10 nov. 2012 à 22:23
 hela85 - 14 nov. 2012 à 15:18
Salut
j'ai implémenté deux algorithmes, et je dois faire une comparaison entre eux.. ces deux algorithmes font appel à une classe matrice.. j'ai implémenté aussi cette dernière classe.
Je dois utiliser la meme matrice pour la comparaison entre les deux algorithmes. le problème c'est que lors de l'execution de chaque algorithme, chacun fait appel à la classe matrice indépendamment de l'autre, et donc genere une matrice differente.

Afin de résoudre ce probleme, j'ai inséré une matrice dans un fichier pour que les deux algo utilisent la meme matrice, , ca résout le problème oui. Mais cette solution n'est pas pratique dans mon cas..

Svp qui peut me proposer une solution ?..Merci d'avance

23 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 08:54
Salut,

Je ne comprend absolument pas pourquoi tu utilises un fichier, tu pourrais enregistrer cette matrice en dur dans ton code non ?
0
Bonjour
oui bien sur.. mais mon prebleme c'est avec les matrices de grandes tailles (10000 lignes et colonnes).. ca sera impossible de copier une telle matrice dans mon code
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 09:59
Dans ce cas, je ne vois pas pourquoi le fichier texte te pose problème et ce que tu pourrais faire d'autre...
0
j'utilise une classe mtarice pour generer la matrice voulue et puis je la fais copier dans le fichier.. dans le cas de 10000000 lignes et colonnes, la generation d'une matrice en utilisant la classe matrice est une trooop longue operation ..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 10:44
10000000 de lignes et colonnes, ça fait 100000000000000 à générer, normal que ce soit long !
0
comment traiter ce cas donc, ya pas de solutions svp ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 11:24
Peux tu me donner ton code qui génère cette matrice, je te dirai comment optimiser ça.
0
Tout d'abord, les conditions suivantes dans la matrice doivent être verifiées:
1/ chaque noeud est lié au moins à un autre..2/ la valeur d'un noeud à lui meme est :M[i][i]=0 .. 3/ s'il y a pas un lien entre les deux noeuds i et je alors M[i][j]=999999.
Voila le code de la matrice:


public class Matrice {
public static int[][] GenerateMatrice (int n, int narc)
{      int M[][];

        Random R = new Random();
        int i , j ,cpt=0 ;
        M = new int[n][n];
        for (i=0; i<n; i++)
            M[i]=new int[n];

     for(i=0; i<n;i++)
        {   for(j=0;j<n; j++)

            { if (i==j)
                  M[i][j]=0;
              else
                  M[i][j]=999999;
            }}

 for(i=0;i<n;i++)  // pour s'assurer que chaque noeud est connecté à au moins un autre noeud
         {do{
         j=Math.abs(R.nextInt(n));

         }while((i==j)|| M[i][j]!=999999 );

        M[i][j]= Math.abs(R.nextInt(99))+1;
            }

 for(cpt=0; cpt<(narc-n); cpt++)  // remplir les arcs restants
        {do{
          i=Math.abs(R.nextInt(n));
         j=Math.abs(R.nextInt(n));

         }while((i==j)|| M[i][j]!=999999 );

        M[i][j]= Math.abs(R.nextInt(99)+1);
            }


    for(int k=0;k<n;k++)
        {
            for(int l=0;l<n;l++)
            {
       System.out.print(M[k][l]+"," + "\t");}

          System.out.println();
      }
  return M  ;

}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 11:44
Et l'écriture dans le fichier texte, où est elle ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 11:44
Je ne suis pas certain d'avoir compris, tu as bien en OutOfMemoryError ?
0
franchement j'ai pas compri votre question
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 14:24
Tu me dis que tu enregistres ta matrice dans un fichier texte, et je ne vois pas à quel endroit dans ce code tu enregistres cette matrice dans un fichier.

Je pense qu'on ne se comprend pas, quel est ton problème précisément ?
0
ah non, cette classe nommée matrice je l'utilise juste pour créer la matrice que je vais l'inserer plus tard dans un fichier.. Puis les deux autres algorithmes que je veux les comparer vont utiliser ce fichier pour lire cette matrice
Le probleme lorsque je dois comparer les 2 algo pour une matrice de grande taille... il sera trop lent d'attendre que la classe matrice la genere pour l'inserer plus tard dans le fichier
J'espere que c'est claire maintenant
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 nov. 2012 à 15:43
Et tu souhaiterais faire quoi ?
0
je souhaite avoir une méthode qui me permet de faire cette comparaison entre les 2 algos sans avoir besoin d'afficher la matrice, juste l'entrer comme parametre dans les deux algo et je veux etre sure qu'elle est la meme pour les deux .. c est possible ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 nov. 2012 à 08:50
Ca dépend des algorithme mais, a priori, je dirais non.
0
est ce que je peux augmenter la taille de stockage dans les fichiers documents texte.; je cherche à stocker des énormes données mais la taille de stockage est limitée.. des proposition svp?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 nov. 2012 à 08:52
Ce n'est pas la taille de stockage qui est limitée, mais c'est la valeur des variables, tu utilises des int qui vont de -2^31 à 2^31

Utiliser des double te permettra déjà d'augmenter la taille des entiers que tu manipules.

Ensuite, tu as le problème de la saturation de l'espace mémoire, pour cela, tu peux commencer par enregistrer une partie de la matrice que tu souhaites créér dans un fichier texte avant d'avoir complètement terminé le calcul de toutes les valeurs.
0
C'est pas claire comment je peux enregistrer une partie de la matrice, alors que l'algorithme doit necessairement travailler sur toute la matrice.. Mon probleme maintenant est comment inserer une matrice de 10000 lignes et colonnes par exp dans un fichier pour que mon algorithme la traite plus tard..
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
14 nov. 2012 à 10:26
Tu n'as pas de solution dans ce cas.

Essayes déjà de travailler avec des doubles mais tu vas saturer ton espace mémoire obligatoirement.
0
Rejoignez-nous