Giới thiệu về Linear Search
Linear Search (tìm kiếm tuyến tính) là một trong những thuật toán tìm kiếm cơ bản và dễ hiểu nhất. Nó hoạt động bằng cách kiểm tra từng phần tử trong mảng lần lượt cho đến khi tìm thấy phần tử cần tìm hoặc kết thúc mảng.
Cách hoạt động của Linear Search
- Bắt đầu từ phần tử đầu tiên của mảng.
- So sánh phần tử hiện tại với phần tử cần tìm (
target
). - Nếu phần tử hiện tại bằng
target
, trả về chỉ số của phần tử đó. - Nếu phần tử hiện tại không bằng
target
, tiếp tục kiểm tra phần tử tiếp theo trong mảng. - Lặp lại các bước trên cho đến khi tìm thấy
target
hoặc đã kiểm tra hết tất cả các phần tử trong mảng. - Nếu đã kiểm tra hết tất cả các phần tử mà không tìm thấy
target
, trả về -1.
Cài đặt Linear Search trong JavaScript
Dưới đây là mã nguồn chi tiết của thuật toán Linear Search trong JavaScript:
function linearSearch(arr, target) {
// Duyệt qua tất cả các phần tử trong mảng
for (let i = 0; i < arr.length; i++) {
// So sánh phần tử hiện tại với giá trị cần tìm
if (arr[i] === target) {
// Nếu tìm thấy, trả về chỉ số của phần tử
return i;
}
}
// Nếu không tìm thấy, trả về -1
return -1;
}
// Ví dụ sử dụng:
let array = [2, 3, 4, 10, 40];
let target = 10;
let index = linearSearch(array, target);
if (index !== -1) {
console.log(`Phần tử ${target} được tìm thấy ở chỉ số ${index}`);
} else {
console.log(`Phần tử ${target} không có trong mảng`);
}
Giải thích mã nguồn
-
Hàm
linearSearch
:- Hàm nhận hai tham số:
arr
(mảng cần tìm kiếm) vàtarget
(giá trị cần tìm). - Sử dụng vòng lặp
for
để duyệt qua tất cả các phần tử trong mảng từ chỉ số 0 đến chỉ sốarr.length - 1
.
- Hàm nhận hai tham số:
-
Vòng lặp
for
:for (let i = 0; i < arr.length; i++)
:i
là biến đếm bắt đầu từ 0 và tăng lên 1 sau mỗi lần lặp.arr.length
là độ dài của mảng, đảm bảo rằng vòng lặp sẽ kiểm tra tất cả các phần tử trong mảng.
-
So sánh phần tử hiện tại với
target
:if (arr[i] === target)
:- Nếu phần tử tại chỉ số
i
bằng vớitarget
, hàm trả về chỉ sối
và kết thúc.
- Nếu phần tử tại chỉ số
-
Trả về kết quả nếu không tìm thấy:
- Nếu vòng lặp kết thúc mà không tìm thấy
target
, hàm trả về-1
để chỉ ra rằng phần tử cần tìm không có trong mảng.
- Nếu vòng lặp kết thúc mà không tìm thấy
Ví dụ minh họa
Giả sử chúng ta có mảng array = [2, 3, 4, 10, 40]
và cần tìm phần tử 10
.
- Lần lặp 1: Kiểm tra
array[0]
(2) vớitarget
(10), không khớp. - Lần lặp 2: Kiểm tra
array[1]
(3) vớitarget
(10), không khớp. - Lần lặp 3: Kiểm tra
array[2]
(4) vớitarget
(10), không khớp. - Lần lặp 4: Kiểm tra
array[3]
(10) vớitarget
(10), khớp. Trả về chỉ số 3.
Thời gian và không gian của thuật toán
-
Thời gian:
- O(n) trong trường hợp xấu nhất: Khi phần tử cần tìm nằm ở cuối mảng hoặc không tồn tại trong mảng, thuật toán sẽ phải kiểm tra tất cả các phần tử.
- O(1) trong trường hợp tốt nhất: Khi phần tử cần tìm nằm ở đầu mảng.
-
Không gian:
- O(1) vì thuật toán chỉ sử dụng một số biến phụ trợ và không yêu cầu thêm bộ nhớ ngoài mảng đầu vào.
Ưu và nhược điểm của Linear Search
Ưu điểm:
- Đơn giản, dễ hiểu và dễ triển khai.
- Không yêu cầu mảng phải được sắp xếp.
Nhược điểm:
- Hiệu suất kém với các mảng lớn vì phải duyệt qua tất cả các phần tử trong trường hợp xấu nhất.
- Không hiệu quả so với các thuật toán tìm kiếm phức tạp hơn như Binary Search (khi mảng đã được sắp xếp).
Linear Search là một thuật toán cơ bản nhưng rất hữu ích trong nhiều tình huống, đặc biệt khi mảng nhỏ hoặc các phần tử không có thứ tự cụ thể.
Comments