Problème de gestion des matrices en java
Résolu
nidhalos
Messages postés
13
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
je trouve une difficulté pour créer un algorithme java qui permet de faire la suite :

il faut connaitre que la matrice est de taille n*2 de chaine de caractaire et la nombre de redandance des chaines de caractaire dans la matrice d'entre est max 2
quelqu'un m'aidé ! et merci
je trouve une difficulté pour créer un algorithme java qui permet de faire la suite :
il faut connaitre que la matrice est de taille n*2 de chaine de caractaire et la nombre de redandance des chaines de caractaire dans la matrice d'entre est max 2
quelqu'un m'aidé ! et merci
A voir également:
- Problème de gestion des matrices en java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
Bonjour,
Voici une idée :
Tu gères un "dictionnaire de synonymes" basé sur une Map<String, Set<String>> où tu pourras ajouter des couples de "mots égaux" qui s'accumuleront par transitivité.
Ce sera plus simple à gérer de le faire au fur et à mesure (ligne par ligne dans ton tableau) que globalement en une seule fois sur l'intégralité du tableau.
Exemple :
Ton résultat sera alors les différents Set<String> présents dans la Map, dans l'exemple ce serait donc
Voici une idée :
Tu gères un "dictionnaire de synonymes" basé sur une Map<String, Set<String>> où tu pourras ajouter des couples de "mots égaux" qui s'accumuleront par transitivité.
Ce sera plus simple à gérer de le faire au fur et à mesure (ligne par ligne dans ton tableau) que globalement en une seule fois sur l'intégralité du tableau.
Exemple :
new → {}
add(Help, ABC) → {Help=[Help, ABC], ABC=[Help, ABC]}
add(Hello, Bonsoir) → {Help=[Help, ABC], ABC=[Help, ABC], Hello=[Bonsoir, Hello], Bonsoir=[Bonsoir, Hello]}
add(Help, Jour) → {Help=[Help, ABC, Jour], ABC=[Help, ABC, Jour], Jour=[Help, ABC, Jour], Hello=[Bonsoir, Hello], Bonsoir=[Bonsoir, Hello]}
Ton résultat sera alors les différents Set<String> présents dans la Map, dans l'exemple ce serait donc
[Help, ABC, Jour]et
[Bonsoir, Hello]comme dans ton illustration.
Les Map et les Set sont exactement fait pour traiter ce genre de données :
En les combinant, on a un Map<String, Set<String>> qui à chaque mot associe plusieurs autres mots.
Au final ça donne un code plutôt simple, la vraie question étant : est-ce que le résultat est correct ?
import java.util.*; public class SynonymDico { private final Map<String, Set<String>> datas = new TreeMap<>(); public void add(String first, String second) { Set<String> dataFirst = datas.get(first); Set<String> dataSecond = datas.get(second); if (dataFirst == null) { if (dataSecond == null) { // les deux mots sont nouveaux Set<String> data = new TreeSet<>(); data.add(first); data.add(second); datas.put(first, data); datas.put(second, data); } else { // le premier mot est nouveau dataSecond.add(first); datas.put(first, dataSecond); } } else if (dataSecond == null) { // le deuxième mot est nouveau dataFirst.add(second); datas.put(second, dataFirst); } else if (dataFirst != dataSecond) { // les deux mots existent dans des groupes différents dataFirst.addAll(dataSecond); for (String elt : dataSecond) datas.put(elt, dataFirst); } System.err.println("add(" + first + ", " + second + ") => " + datas); } public Set<Set<String>> getValues() { return new LinkedHashSet<>(datas.values()); } }Voici un code de test pour ton exemple :
public class Test { public static void main(String[] args) { SynonymDico dico = new SynonymDico(); dico.add("Bonjour a tous", "Comment ca marche"); dico.add("Hello", "Bonsoir"); dico.add("Hi", "Bonjour a tous"); dico.add("rouge", "Clavier"); dico.add("Help", "ABC"); dico.add("Help", "Jour"); System.out.println(dico.getValues()); } }Ce qui donne bien tes 2 lignes à 3 colonnes et tes 2 lignes à 2 colonnes :
Remarque : les valeurs sont triées par ordre alphabétique (au sens Unicode) grâce aux TreeMap et TreeSet dans add() et à la conservation de l'ordre avec LinkedHashSet dans getValues().
dico.add("Bonjour a tous", "Comment ca marche");
dico.add("Hello", "Bonsoir");
dico.add("Hi", "Bonjour a tous");
dico.add("rouge", "Clavier");
dico.add("Help", "ABC");
dico.add("Help", "Jour")
sachant que mon tableau ' input ' a plus que 200 lignes
for (int i=0; i<tab1.length; i++) dico.add(tab1[i][0], tab1[i][1]);