IniziaInizia gratis

Confrontare le prestazioni degli algoritmi di ricerca

Come sviluppatore software in un'azienda di e-commerce, stai valutando diversi metodi di ricerca per migliorare la funzionalità di ricerca dei prodotti. Finora il meccanismo di ricerca usato dall'azienda era molto lento, ma sei già riuscito a rimuovere quel ritardo. Il tuo compito ora è confrontare il nuovo metodo di ricerca con quello vecchio, per dimostrare che è più efficiente per la funzionalità di ricerca del catalogo.

Questo esercizio fa parte del corso

Ottimizzazione del codice in Java

Visualizza il corso

Istruzioni dell'esercizio

  • Trova l'elemento di destinazione usando il nuovo metodo di ricerca, linearSearch().
  • Poi trova l'elemento di destinazione usando il vecchio metodo di ricerca, linearSearchWithDelay().
  • Calcola la differenza di prestazioni relativa dei metodi di ricerca.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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;
    }
}
Modifica ed esegui il codice