ComenzarEmpieza gratis

Comparar el rendimiento de algoritmos de búsqueda

Como desarrollador de software en una empresa de e-commerce, estás evaluando distintos métodos de búsqueda para mejorar la funcionalidad de búsqueda de productos. Hasta ahora, el mecanismo de búsqueda que usaba la empresa era muy lento, pero ya conseguiste eliminar ese retardo. Tu tarea ahora es comparar tu nuevo método de búsqueda con el antiguo para demostrar que es más eficiente para la funcionalidad de búsqueda del catálogo.

Este ejercicio forma parte del curso

Optimizing Code in Java

Ver curso

Instrucciones del ejercicio

  • Encuentra el elemento objetivo usando el nuevo método de búsqueda, linearSearch().
  • Después, encuentra el elemento objetivo usando el método de búsqueda antiguo, linearSearchWithDelay().
  • Calcula la diferencia de rendimiento relativa entre los métodos de búsqueda.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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;
    }
}
Editar y ejecutar código