Recherche binaire
lyla12
Messages postés
3
Statut
Membre
-
lyla12 Messages postés 3 Statut Membre -
lyla12 Messages postés 3 Statut Membre -
bonjour,
j'ai ce bout code qui parcourt une liste de mots (beaucoup beaucoup de mot) et j'aimerai diminuer le temps d'exécution (trouver un mot plus rapidement dans la liste). pouvez vous m'aider à faire une recherche binaire, svp?
mercii
j'ai ce bout code qui parcourt une liste de mots (beaucoup beaucoup de mot) et j'aimerai diminuer le temps d'exécution (trouver un mot plus rapidement dans la liste). pouvez vous m'aider à faire une recherche binaire, svp?
mercii
public static long nbrMots(String mot) {
long compt = 0;
for(ArrayList<String>words : mots){
for(int i=0; i<words.size();i++) {
if (mot.equalsIgnoreCase(to.get(i))) {
++compt;
i = to.size();
}
}
}
return compt;
}
1 réponse
-
Bonjour,
Il manque des éléments pour bien comprendre ce que tu fais, par exemple les types demots
etto
et un exemple de leurs valeurs parce que j'avoue que lei = to.size();
me laisse perplexe...
Remarque : une recherche dichotomique suppose que les données soient triées, mais pour l'instant j'ai du mal à comprendre ta structure de données pour l'améliorer.-
j'ai une liste de plusieurs mots qui est l'ArrayList<String>words, en ce qui concerne le to.size() excusez moi je me suis trompée. c'est words.size(). donc mon code est le suivant:
public static long nbrMots(String mot) { long compt = 0; for(ArrayList<String>words : mots){ for(int i=0; i<words.size();i++) { if (mot.equalsIgnoreCase(words.get(i))) { ++compt; i = words.size(); } } } return compt; } -
Si tu as une seule liste de mots, tu ne devrais avoir qu'une seule boucle for, ce qui réduira considérablement la durée de ton programme.
Remarque : tu ne pourras pas avoir un nombre d'éléments en long, la taille d'une Collection est toujours un int.
private static List<String> words = ... public static int nbrMots(String mot) { int compt = 0; for (String word : words) if (mot.equalsIgnoreCase(word)) compt++; return compt; }
Quant à optimiser ton calcul, tu peux faire une Map comme ceci :
private static List<String> words = ... private static Map<String, Integer> nbWordsByLowerCaseWord = words.parallelStream() .collect(Collectors.toMap(w -> w.toLowerCase(), w -> 1, (n1, n2) -> n1 + n2)); public static int nbrMots(String mot) { return nbWordsByLowerCaseWord.get(mot.toLowerCase()); } -
-