Aan de slagGa gratis aan de slag

Zoekalgoritmes qua performance vergelijken

Als softwareontwikkelaar bij een e-commercebedrijf evalueer je verschillende zoekmethodes om de productzoekfunctie te verbeteren. Tot nu toe was het gebruikte zoeksysteem erg traag, maar je hebt die vertraging inmiddels al verwijderd. Jouw taak is nu om je nieuwe zoekmethode te vergelijken met de oude, zodat je kunt aantonen dat deze efficiënter is voor de cataloguszoekfunctie.

Deze oefening maakt deel uit van de cursus

Code optimaliseren in Java

Cursus bekijken

Oefeninstructies

  • Zoek het doelelement met de nieuwe zoekmethode, linearSearch().
  • Zoek daarna het doelelement met de oude zoekmethode, linearSearchWithDelay().
  • Bereken het relatieve performanceverschil tussen de zoekmethodes.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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;
    }
}
Code bewerken en uitvoeren