Bonjour,
j'ai mis en place un algo utilisant notamment l'algo de parcours en profondeur.
le but de mon algo est de partir de la racine d'un arbre et de trouver un noeud.
Les noeuds sont des mots.
Exemple : maMéthode(motDepart,motArrivee);
-> retourne True ou False
Le seul problème c'est que l'arbre possède une volumétrie très grande.
Voici la méthode récursive que j'appelle :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42 private static List<String> listeMotParcouru = new ArrayList<String>(); private static ResultatWordnet existe(ResultatAlgo resultat){ Arbre arbre = new Arbre(null); // on incrémente le compteur resultat.setCompteur(resultat.getCompteur()+1); // on parcoure tous les mots résultats for (String unMot : resultat.getListeMot()){ // si on trouve le mot final on arrete if (unMot.equals(resultat.getMotFin())){ return resultat; }else{ // si le mot n'a pas déjà été parcouru if (!listeMotParcouru.contains(unMot)){ // on ajoute le mot parcouru listeMotParcouru.add(unMot); resultat.setListeMot(arbre.getAllChild(unMot)); // si la liste n'est pas nulle if (resultat.getListeMot()!=null){ // on appelle de manière récursive la méthode resultat = existe(resultat); } } } } return resultat; }
et voici la classe ResultatAlgo :
Pour ce qui est de la classe arbre, je n'ai pas accès au code mais c'est une classe contenant des mots. A partir d'un mot on peut obtenir la liste de ses fils.
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
29
30
31
32 public class ResultatWordnet { private String[] ListeMot; private int compteur; private String motDebut; private String motFin; public String[] getListeMot() { return ListeMot; } public void setListeMot(String[] listeMot) { ListeMot = listeMot; } public int getCompteur() { return compteur; } public void setCompteur(int compteur) { this.compteur = compteur; } public String getMotDebut() { return motDebut; } public void setMotDebut(String motDebut) { this.motDebut = motDebut; } public String getMotFin() { return motFin; } public void setMotFin(String motFin) { this.motFin = motFin; } }
Auriez vous une idée pour éviter l'erreur java Heap Space. En effet, j'arrive à parcourir en gros 500 noeuds, il serait bien que j'arrive à en parcourir plus.
Merci pour votre aide.
Partager