Bắt đầu ngayBắt đầu miễn phí

So sánh hiệu năng thuật toán tìm kiếm

Là một lập trình viên tại một công ty thương mại điện tử, bạn đang đánh giá các phương thức tìm kiếm khác nhau để cải thiện chức năng tìm kiếm sản phẩm. Trước đây, cơ chế tìm kiếm của công ty rất chậm, nhưng bạn đã loại bỏ được độ trễ đó. Nhiệm vụ của bạn bây giờ là so sánh phương thức tìm kiếm mới với phương thức cũ để chứng minh nó hiệu quả hơn cho tính năng tìm kiếm danh mục sản phẩm.

Bài tập này là một phần của khóa học

Tối ưu hóa mã trong Java

Xem khóa học

Hướng dẫn bài tập

  • Tìm phần tử đích bằng phương thức tìm kiếm mới, linearSearch().
  • Sau đó, tìm phần tử đích bằng phương thức tìm kiếm cũ, linearSearchWithDelay().
  • Tính toán sự khác biệt hiệu năng tương đối giữa hai phương thức tìm kiếm.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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;
    }
}
Chỉnh sửa và Chạy Mã