НачатьНачать бесплатно

Сравнение производительности алгоритмов поиска

Вы — разработчик в компании, занимающейся электронной коммерцией, и оцениваете различные методы поиска, чтобы улучшить функциональность поиска товаров. Раньше используемый механизм поиска работал очень медленно, однако вам уже удалось устранить эту задержку. Теперь ваша задача — сравнить новый метод поиска со старым, чтобы доказать его большую эффективность для функции поиска по каталогу.

Это упражнение является частью курса

Оптимизация кода на Java

Посмотреть курс

Инструкции к упражнению

  • Найдите целевой элемент с помощью нового метода поиска linearSearch().
  • Затем найдите целевой элемент с помощью старого метода поиска linearSearchWithDelay().
  • Вычислите относительную разницу в производительности между двумя методами поиска.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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;
    }
}
Редактировать и запускать код