Giao diện
Tìm kiếm là một trong những thao tác cơ bản nhất khi làm việc với dữ liệu. Từ tìm kiếm một sinh viên theo mã số đến tìm kiếm từ khóa trong cơ sở dữ liệu hàng tỷ bản ghi.
1. Tìm kiếm Nhị phân (Binary Search)
Điều kiện Tiên quyết Bắt buộc
phải được sắp xếp trước! Nếu mảng chưa sắp xếp, bạn không thể dùng Binary Search mà phải dùng Linear Search
Trực giác Đơn giản
Giống như trò chơi đoán số từ
- Người kia nghĩ số
. - Lần 1: Bạn đoán
Báo "Lớn hơn". Bạn loại ngay được 50 số đầu ( ). - Lần 2: Bạn đoán ở giữa đoạn
, tức là Báo "Nhỏ hơn". Bạn loại tiếp được đoạn . - Cứ mỗi lần đoán, bạn cắt đôi không gian tìm kiếm.
chỉ mất
Mã Cài đặt C++ Chống Tràn Số
cpp
int binarySearch(const vector<int>& arr, int target) {
int left = 0;
int right = arr.size() - 1;
while (left <= right) {
// Tránh tràn số (overflow) thay vì dùng (left + right) / 2
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid; // Tìm thấy tại chỉ số mid
}
if (arr[mid] < target) {
left = mid + 1; // Tìm tiếp bên nửa phải
} else {
right = mid - 1; // Tìm tiếp bên nửa trái
}
}
return -1; // Không tìm thấy
}2. Kỹ thuật Hai Con Trỏ (Two Pointers)
Kỹ thuật hai con trỏ giúp giảm từ
Bài toán 2-Sum: Tìm hai số có tổng bằng giá trị cho trước
- Đặt con trỏ
left = 0(số nhỏ nhất) vàright = n - 1(số lớn nhất). - Tính
sum = arr[left] + arr[right]:- Nếu
sum == STìm thấy cặp số! - Nếu
sum < SCần tổng lớn hơn Tăng left++. - Nếu
sum > SCần tổng nhỏ hơn Giảm right--.
- Nếu
cpp
bool hasPairWithSum(const vector<int>& arr, int targetSum) {
int left = 0;
int right = arr.size() - 1;
while (left < right) {
int currentSum = arr[left] + arr[right];
if (currentSum == targetSum) return true;
if (currentSum < targetSum) left++;
else right--;
}
return false;
}3. Hệ thống bài tập tự luyện
Toàn bộ hệ thống bài tập thực hành chuyên sâu của bài học này đã được tích hợp đầy đủ tại tab Bài tập ở đầu trang. Sau khi đọc xong phần lý thuyết, bạn hãy bấm chuyển sang tab Bài tập để bắt đầu luyện tập.
Chuyển sang Tab Bài tập
Bấm vào tab Bài tập trên thanh điều hướng bài giảng ở đầu trang để mở các bài tập thực chiến có hướng dẫn chi tiết và kiểm chứng tự động.