- vừa được xem lúc

Linear Search - Tìm kiếm tuần tự

0 0 7

Người đăng: Hạnh

Theo Viblo Asia

Chào các bạn!

Tiếp theo chuỗi series về các thuật toán sắp xếp và tìm kiếm căn bản, thì ở bài viết này mình sẽ trình bày các bạn phần thuật toán tìm kiếm tuần tự.

Thuật toán khá đơn giản, nên chắc cũng không cần vòng vo nhiều nữa, chúng ta vào chi tiết ngay nhé.


Đặt vấn đề

Cho dãy số có kích thước N phần tử và số X. Hãy xác định vị trí đầu tiên mà X xuất hiện trong dãy số.

Ý tưởng thuật toán

Lần lượt duyệt qua từng phần tử và kiểm tra, nếu gặp X thì thoát và trả về giá trị vị trí.

Và dưới đây là code mà mình đã chuẩn bị:

int linearSearch(int *arr, int X) { for (int i=0; i<sz; i++){ if (X == arr[i]) return i; } return -1;
}

Full code bạn có thể xem ở đây: https://ideone.com/Hc5Fb8

Đánh giá độ phức tạp

Dễ thấy rằng, độ phức tạp của giải thuật trên là O(N)O(N), nhưng tùy theo vị trí của XX ở đâu mà xác định thời gian nhanh hay chậm.

Và nếu bạn nhấn vào link full code ở phía trên, bạn sẽ tìm thấy dòng

Total time for search: 3(s)

Đoạn code trên mình đã tạo ra dãy số 10tr số tự nhiên đầu tiên bỏ vào dãy arr. Rồi sau đó sinh ngẫu nhiên số X nằm trong dãy số, rồi tìm kiếm trong 1000 lần.

Thì tổng thời gian tìm kiếm là tầm 3s.

Kết luận

Trên đây, mình đã trình bày các bạn về thuật toán Linear Search. Bài tiếp theo chúng ta sẽ cùng tìm hiểu về thuật toán tìm kiếm nhị phân nhé. Nó sẽ mạnh mẽ hơn thuật toán này gấp nhiều lần.

Nếu bạn có bất cứ ý kiến nào đóng góp, xin hãy gửi comment, mình sẽ trả lời và khắc phục cho những lần sau.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học lập trình game cần những gì?

Lập trình game là làm gì. Các ngôn ngữ các bạn có thể sử dụng để lập trình game : C, C++, C#, Java, Python,... Các bước cơ bản để lập trình game. . Hiển thị: Đã là game thì hiển thị không thể thiếu, lúc đầu các bạn chỉ làm cho phần hiển thị thật đơn giản, các bạn đừng quá chú tâm vào việc làm sao ch

0 0 32

- vừa được xem lúc

[MFC] Http request with winsock2.h

Giới thiệu. Xin chào, trong bài này mình sẽ giới thiệu 1 số lưu ý khi sử dụng thư viện winsock2.h (thư viện window socket) sử dụng trong window app. Đầu tiên, bạn sẽ dễ dàng search được 1 ví dụ cụ thể trên document của winsock2.

0 0 22

- vừa được xem lúc

Design parttern

Builder. 1. Ý tưởng. Builder là một mẫu thiết kế sáng tạo cho phép bạn xây dựng các đối tượng phức tạp theo từng bước.

0 0 22

- vừa được xem lúc

Kỹ thuật viết mã nguồn hiệu quả

Kỹ thuật viết mã nguồn hiệu quả? Hôm nay bài viết này mình không đề cập tới thuật toán, hãy coi như rằng chúng ta đã có thuật toán tốt nhất có thể và bây giờ chúng ta phải làm gì để có thể tăng tính hiệu quả của code. Bài viết này mình sẽ lấy ngôn ngữ lập trình C/C++ để minh họa về các hàm, các thao

0 0 23

- vừa được xem lúc

Singleton Design pattern

Singleton Design pattern. 1. Vấn đề. - Ý tưởng:.

0 0 21

- vừa được xem lúc

So sánh Python và C++

Cuộc tranh luận giữa Python và C ++ là một chủ đề hấp dẫn vì cả hai ngôn ngữ lập trình đều rất khác nhau về cú pháp, tính đơn giản, cách sử dụng và cách tiếp cận tổng thể để lập trình. Vì vậy, mọi người cảm thấy khó khăn khi lựa chọn ngôn ngữ lập trình nào để học.

0 0 26