Thuật Toán Tìm Kiếm Tuyến Tính (Linear Search) - Freetuts
Có thể bạn quan tâm
Trong bài viết này chúng ta sẽ tìm hiểu về thuật toán tìm kiếm tuyến tính( linear search), hay còn được gọi là tìm kiếm tuần tự (sequential search).
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.Đề bài: Cho một mảng arr[] gồm n phần từ. Viết một hàm đưa ra vị trí của phần từ x trong mảng.
Ví dụ:
Input : arr[] = {10, 20, 80, 30, 60, 50, 110, 100, 130, 170} x = 110; Output : 6Với đề bài này chúng ta có thể giải bằng cách sử dụng thuật toán tìm kiếm tuyết tính được trình bày sau đây.
Bài viết này được đăng tại [free tuts .net]
1. Tìm kiếm tuyến tính là gì?
Thuật toán tìm kiếm tuyến tính là phương pháp tìm kiếm một phần tử cho trước trong một danh sách bằng cách duyệt lần lượt từng phần từ của danh sách đó đến khi nào tìm được giá trị mong muốn hay đã duyệt hết qua hết danh sách.
Đây là một giải thuật khá đơn giản để thực hiện, nó rất phù hợp khi cần tìm kiếm trên một danh sách vửa đủ và chưa được sắp xếp. Trong trường hợp cần tìm kiếm với một danh sách lớn hoặc nhiều lần chúng ta nên tìm một giải thuật khác hiệu quả hơn.
Thuật toán tìm kiếm tuyến tính rất hiếm khi được sử dụng bởi các thuật toán tìm kiếm khác như tìm kiếm nhị phân, bảng băm,..cho phép tìm kiếm nhanh hơn rất nhiều so với tìm kiếm tuyến tính.
2. Ý tưởng
Thuật toán tìm kiêm tuyến tính là một thuật toán khá đơn giản. Sau đây là ý tưởng triển khai thuật toán.
- Bắt đầu từ bản ghi đầu tiên của mảng, duyệt từ đầu mảng đến cuối mảng với x.
- Nếu phần tử đang duyệt bằng x thì trả về vị trí.
- Nếu không tìm thấy bất cứ phần từ nào khi đã duyệt hết thì trả về -1.
Trong trường hợp tốt nhất độ phức tạp của thuật toán này là O(1), trường hơp xấu nhất là O(n), trung bình cũng là O(n).
3. Triển khai thuật toán
Ở đây chúng ta sẽ triển khai thuật bằng ngôn ngữ C++, các bước triển khai sẽ được đề cập bên dưới.
#include <iostream> using namespace std; int linearSearch(int arr[], int n, int x){ //Lặp từng phần tử của mảng và kiểm tra. for(int i = 0; i < n; i++) if (arr[i] == x) return i; // Trả về -1 nếu đã duyệt hết mà ko tìm thấy. return -1; } int main() { int arr[] = {1, 5, 12, -10, 5, 11}; int x = -10; // Số phần có trong mảng. int n = sizeof(arr) / sizeof(arr[0]); int result = linearSearch(arr, n, x); if (result == -1) cout << "Khong tim thay " << x << " trong mang"; else cout << "Vi tri: " << result; } Output: Vi tri 3Bên trên là cách triển khai đơn giản nhất của thuật toán tìm kiếm tuyến tính. Đây cũng là một thuật toán hay được sử dụng cũng như rât hữu ích trong quá trình giải các bài toán tìm kiếm. Rất mong bài viết sẽ hữu ích cho bạn !
Từ khóa » độ Phức Tạp Của Thuật Toán Tìm Kiếm Tuyến Tính
-
Thuật Toán Tìm Kiếm Trong C++ | TopDev
-
Thuật Toán Tìm Kiếm Tuyến Tính (Tìm Kiếm Tuần Tự) - DNMTechs
-
Thuật Toán Tìm Kiếm Tuyến Tính (Linear Search) - Góc Học IT
-
5 Thuật Toán Tìm Kiếm Mọi LTV Nên Biết - CodeLearn
-
Độ Phức Tạp Của Thuật Toán Và Lựa Chọn Cách Giải Thuật
-
Sự Khác Biệt Giữa Tìm Kiếm Tuyến Tính Và Tìm Kiếm Nhị Phân
-
Thuật Toán Tìm Kiếm Tuyến Tính - TEK4
-
Các Thuật Toán Tìm Kiếm
-
Độ Phức Tạp Tính Toán - VNOI
-
Độ Phức Tạp Của Thuật Toán - Big O Notation Trong Lập Trình
-
Thuật Toán Tìm Kiếm Trong C - Khuê Nguyễn
-
[PDF] Bài 1 Thuật Toán đánh Giá Và Tiếp Cận - FIT@MTA
-
Giải Thuật Tìm Kiếm Tuyến Tính