salut,
j'ai developper un programme en java qui permet de determiner toute les chemins possibles sans cycle entre les elements d'une matrice n*n avec est le nombre des elements a traiter.
l'algorithme qui j'ai developper est tres complexe mais pour moi au debut la complexite ne m'intersse pas mais j'ai essayer de travailler seulement sur la partie triangulaire superieur de la matrice.
mon algorithme a l'aspect suivant : pour chaque couple (di,dj) de la matrice je calcule toutes les chemins possibles (chemin de longeur 1 puis de longeur2,.....j'usqu'a chemin de longeur n-1) cette etape et repeter j'usqu'a toutes les elements sont traiteés: on peut cet algorithme par la notion de la fermeture transitive dans un graphe mais dans un graphe en utilise la matrice d'adjacence qui, cet derniere peut contenir les valuer 0 si pas de connection entre deux noeuds et 1 si oui. pour moi je travaille sur un graphe complet dans laquelle un noeud est connecter avec N-1 autres du graphe(N nombre de noeuds du graphe).
je traite la matrice ligne par ligne et je determine pour chaque couple de noeuds tous les chemins possibles: je stocke ses chemins pour chaque ligne dans vecteur globale(car ma fonction et recursive sur le vecteur de chemins a chaque niveau
le probleme recontre : java.lang.OutOfMemoryError
j'ai essayer de resoudre cette probleme avec ses trucs:
1- j'ai changer le type de mes elements de double en float
2- j'ai augmenter la taille de lancement de la JVM avec la commande Msdos suivante : java -ms300m -mx300m
avec ses truc la meme exception qui me gene:
j'ai remarque que lorsque la taille du vecteur depasse se 3000000 l'exception se lance
j'ai essayer de stocker mes elements dans un Hashtable : avant de reecrire mon prog j'ai un code de test pour la taille du Hashtable: Il signale la meme exception que le vecteur
Est ce que vous pouvez m'aider pour ce probleme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void test() { Hashtable tableHa = new Hashtable(); for(int i=0; i<3000000;i++) tableHa.put(i+"", "23"); System.out.println(tableHa.toString()); }
Exemple de la sortie de mon algorithme:
apres cette etape je prends chaque chemin et je calcule son score selon les valeurs de la matrice formes par ses elements et je remplie une matrice de sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Entre: a b c d e : Sortie: Chemin=1 ab ac ad ae bc bd be cd ce de Chemin=2 abc abd abe acb acd ace adb adc ade aeb aec aed bca bcd bce bda bdc bde bea bec bed cda cdb cde cea ceb ced dea deb dec Chemin=3 abcd abce abdc abde abec abed acbd acbe acdb acde aceb aced adbc adbe adcb adce adeb adec aebc aebd aecb aecd aedb aedc bcad bcae bcda bcde bcea bced bdac bdae bdca bdce bdea bdec beac bead beca becd beda bedc cdab cdae cdba cdbe cdea cdeb ceab cead ceba cebd ceda cedb deab deac deba debc deca decb Chemin=4 abcde abced abdce abdec abecd abedc acbde acbed acdbe acdeb acebd acedb adbce adbec adcbe adceb adebc adecb aebcd aebdc aecbd aecdb aedbc aedcb bcade bcaed bcdae bcdea bcead bceda bdace bdaec bdcae bdcea bdeac bdeca beacd beadc becad becda bedac bedca cdabe cdaeb cdbae cdbea cdeab cdeba ceabd ceadb cebad cebda cedab cedba deabc deacb debac debca decab decba
Partager