SẮP XẾP & TÌM KIẾM
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Thuật toán tìm kiếm tuyến tính (Linear search)

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: 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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Ví dụ:

Input : arr[] = {10, 20, 80, 30, 60, 50, 
                     110, 100, 130, 170}
          x = 110;
Output : 6

Vớ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.

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.

tim kiem truyen tinh giaithuat thuat toan png

Đâ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 3

Bê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 !

Cùng chuyên mục:

Tìm các số chẵn lẻ bằng Queue và Stack

Tìm các số chẵn lẻ bằng Queue và Stack

Để làm được bài này các bạn cần có kiến thức về cấu trúc Queue…

Cài đặt hàng đợi Queue bằng mảng một chiều

Cài đặt hàng đợi Queue bằng mảng một chiều

Chúng ta sẽ cùng nhau tìm hiểu về cách cài đặt hàng đợi Queue bằng…

Cài đặt hàng đợi Queue bằng danh sách liên kết

Cài đặt hàng đợi Queue bằng danh sách liên kết

Chúng ta sẽ cùng nhau tìm hiểu về cách khởi tạo cấu trúc dữ liệu…

Hàng đợi Queue là gì? Cấu trúc dữ liệu và các cách cài đặt Queue

Hàng đợi Queue là gì? Cấu trúc dữ liệu và các cách cài đặt Queue

Trong hướng dẫn này mình sẽ giới thiệu các bạn một cấu trúc lưu trữ…

Bài tập kiểm tra số nguyên tố bằng Stack

Bài tập kiểm tra số nguyên tố bằng Stack

Chúng ta sẽ cùng nhau tạo một cấu trúc Stack với danh sách liên kết…

Bài tập chuyển đổi cơ số bằng Stack

Bài tập chuyển đổi cơ số bằng Stack

Trong hướng dẫn này mình sẽ thực hiện giải một bài toán chuyển đổi cơ…

Cài đặt Stack bằng mảng một chiều

Cài đặt Stack bằng mảng một chiều

Chúng ta sẽ lần lượt thực hiện tạo các hàm cơ bản cho Stack như:…

Cài đặt Stack bằng danh sách liên kết

Cài đặt Stack bằng danh sách liên kết

Chúng ta sẽ thực hiện lần lượt các thao tác trong Stack sử dụng danh…

Ngăn xếp Stack là gì? Cấu trúc và cơ chế hoạt động ra sao?

Ngăn xếp Stack là gì? Cấu trúc và cơ chế hoạt động ra sao?

Trong hướng dẫn này mình sẽ giới thiệu các bạn một cấu trúc lưu trữ…

Xóa Node khỏi cây đỏ đen

Xóa Node khỏi cây đỏ đen

Chúng ta sẽ cùng nhau tìm hiểu về cách xóa một Node khỏi cây đỏ…

Thêm Node mới vào cây đỏ đen

Thêm Node mới vào cây đỏ đen

Cây đỏ đen là gì? Cấu trúc của Red-Black Tree

Cây đỏ đen là gì? Cấu trúc của Red-Black Tree

Trong hướng dẫn này mình sẽ giới thiệu các bạn một cấu trúc dữ liệu…

Xóa Node khỏi cây nhị phân tìm kiếm

Xóa Node khỏi cây nhị phân tìm kiếm

Chúng ta sẽ cùng nhau thực hiện xóa Node có 1 con, Node có 2…

Tìm Node MAX và MIN trong cây nhị phân tìm kiếm

Tìm Node MAX và MIN trong cây nhị phân tìm kiếm

Chúng ta sẽ thực hiện một vài cách tìm ra giá trị MAX và MIN…

Xuất Node con và lá trong cây nhị phân tìm kiếm

Xuất Node con và lá trong cây nhị phân tìm kiếm

Trong hướng dẫn này mình sẽ giới thiệu các bạn cách xuất các Node con…

Tìm kiếm Node trên cây nhị phân tìm kiếm

Tìm kiếm Node trên cây nhị phân tìm kiếm

Trong hướng dẫn này mình sẽ giới thiệu các bạn cách tìm kiếm một Node…

Duyệt cây nhị phân tìm kiếm

Duyệt cây nhị phân tìm kiếm

Chúng ta sẽ tìm hiểu lần lượt 6 cách duyệt cây nhị phân tìm kiếm:

Thêm Node vào cây nhị phân tìm kiếm

Thêm Node vào cây nhị phân tìm kiếm

Trong hướng dẫn này mình sẽ giới thiệu các bạn về cấu trúc dữ liệu…

Cấu trúc cây nhị phân là gì? Hoạt động ra sao?

Cấu trúc cây nhị phân là gì? Hoạt động ra sao?

Trong bài này mình sẽ giới thiệu các bạn một trong các cấu trúc dữ…

Gộp hai danh sách liên kết đôi

Gộp hai danh sách liên kết đôi

Chúng ta sẽ cùng nhau tìm hiểu về cách nối hai danh sách liên kết…

Top