Comparer la performance des algorithmes de recherche
Comme développeur ou développeuse logiciel dans une entreprise de commerce électronique, vous évaluez différentes méthodes de recherche pour améliorer la recherche de produits. Jusqu'ici, le mécanisme de recherche de l'entreprise était très lent, mais vous avez déjà réussi à éliminer ce délai. Votre tâche maintenant est de comparer votre nouvelle méthode de recherche à l'ancienne, afin de démontrer qu'elle est plus efficace pour la recherche dans votre catalogue.
Cette activité fait partie du cours
Optimiser le code en Java
Instructions de l’exercice
- Trouvez l'élément cible avec la nouvelle méthode de recherche,
linearSearch(). - Ensuite, trouvez l'élément cible avec l'ancienne méthode de recherche,
linearSearchWithDelay(). - Calculez la différence de performance relative entre les méthodes de recherche.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
public class SearchPerformanceTest {
public static void main(String[] args) {
int[] array = new int[10000];
for (int i = 0; i < array.length; i++) {
array[i] = i;
}
int target = array[7500]; // Target value to search for
long startRegular = System.nanoTime();
// Do a search using the new search method
boolean foundRegular = ____(array, target);
long endRegular = System.nanoTime();
long startDelay = System.nanoTime();
// Do a search using the old search method
boolean foundDelay = ____(array, target);
long endDelay = System.nanoTime();
// Calculate the ratio between the old and new methods
double ratio = (double)(endDelay - startDelay) / (____ - ____);
System.out.println("Linear search with delay is " + ratio +
" times slower than regular linear search");
}
private static boolean linearSearch(int[] data, int target) {
for (int i = 0; i < data.length; i++) {
if (data[i] == target) return true;
}
return false;
}
private static boolean linearSearchWithDelay(int[] data, int target) {
for (int i = 0; i < data.length; i++) {
try {
Thread.sleep(0, 1000); // 1000 nanoseconds delay
} catch (InterruptedException e) {
e.printStackTrace();
}
if (data[i] == target) return true;
}
return false;
}
}