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
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;
}
}