Giải thích thuật toán tìm kiếm tuyến tính & nhị phân

Giải thích thuật toán tìm kiếm tuyến tính & nhị phân

Khả năng tìm kiếm một số dữ liệu là một khía cạnh quan trọng của khoa học máy tính. Các thuật toán tìm kiếm được sử dụng để tìm kiếm một mục cụ thể trong tập dữ liệu.





Các thuật toán trả về một kết quả boolean (đúng hoặc sai) cho một truy vấn tìm kiếm. Chúng cũng có thể được sửa đổi để cung cấp vị trí tương đối của giá trị được tìm thấy.





Đối với bài viết này, các thuật toán sẽ tập trung vào việc xác định liệu một giá trị có tồn tại hay không.





Thuật toán tìm kiếm tuyến tính

Tìm kiếm tuyến tính còn được gọi là tìm kiếm tuần tự. Trong kiểu tìm kiếm này, từng giá trị trong danh sách được lần lượt truy cập một cách có trật tự trong khi kiểm tra xem giá trị mong muốn có tồn tại hay không.

Thuật toán kiểm tra giá trị theo giá trị cho đến khi nó tìm thấy giá trị bạn đang tìm kiếm hoặc hết giá trị để tìm kiếm. Khi hết giá trị để tìm kiếm, điều đó có nghĩa là truy vấn tìm kiếm của bạn không tồn tại trong danh sách.



Thuật toán tìm kiếm tuần tự lấy một danh sách các giá trị và mục mong muốn trong danh sách làm tham số của nó. Kết quả trả về được khởi tạo là Sai và sẽ thay đổi thành Thật khi giá trị mong muốn được tìm thấy.

Hãy xem việc triển khai Python bên dưới làm ví dụ:





def linearSearch(mylist, item):
found = False
index = 0
while index if mylist[index] == item:
found = True
else:
index = index+1
return found

Phân tích thuật toán

Trường hợp tốt nhất xảy ra khi mục mong muốn là mục đầu tiên trong danh sách. Trường hợp xấu nhất xảy ra khi mục mong muốn là mục cuối cùng trong danh sách (mục thứ n). Do đó, độ phức tạp về thời gian cho tìm kiếm tuyến tính là O (n).

Kịch bản trường hợp trung bình trong thuật toán trên là n / 2.





Có liên quan: Ký hiệu Big-O là gì?

Điều quan trọng cần biết là thuật toán được sử dụng giả định rằng một danh sách ngẫu nhiên các mục được cung cấp cho nó. Đó là, các mục danh sách không có thứ tự cụ thể.

cách truy cập google trên roku

Giả sử các mục theo một thứ tự cụ thể, từ nhỏ nhất đến lớn nhất. Có thể đạt được một số lợi thế trong tính toán.

Lấy ví dụ về việc tìm 19 trong danh sách đã cho: [2, 5, 6, 11, 15, 18, 23, 27, 34]. Sau khi đạt đến 23, rõ ràng là mục đang được tìm kiếm không tồn tại trong danh sách. Do đó, việc tiếp tục tìm kiếm phần còn lại của các mục trong danh sách sẽ không còn quan trọng nữa.

Thuật toán tìm kiếm nhị phân

Bạn đã thấy cách một danh sách có thứ tự có thể giảm bớt sự tính toán cần thiết. Thuật toán tìm kiếm nhị phân thậm chí còn tận dụng nhiều hơn hiệu quả này mà việc có một danh sách có thứ tự giới thiệu.

Thuật toán bắt đầu bằng cách lấy một giá trị giữa của một danh sách có thứ tự và kiểm tra xem đó có phải là giá trị mong muốn hay không. Nếu không, thì giá trị được kiểm tra xem nó nhỏ hơn hay lớn hơn giá trị mong muốn.

Nếu nó ít hơn, thì không cần kiểm tra nửa dưới của danh sách. Ngược lại, nếu nó lớn hơn, thì nó sẽ chuyển sang nửa trên của danh sách.

Liên quan: Đệ quy là gì và bạn sử dụng nó như thế nào?

Bất kể danh sách phụ nào (trái hoặc phải) được chọn, giá trị giữa sẽ lại được xác định. Giá trị được kiểm tra lại nếu đó là giá trị bắt buộc. Nếu không, nó sẽ được kiểm tra xem nó nhỏ hơn hay lớn hơn giá trị được yêu cầu.

cách khởi động lại máy tính từ xa

Quá trình này được lặp lại cho đến khi một giá trị được tìm thấy nếu nó ở đó.

Việc triển khai Python bên dưới là dành cho thuật toán tìm kiếm nhị phân.

def binarySearch (mylist, item):

low = 0
high = len(mylist) - 1
found = False
while low <= high and not found: mid = (low + high) // 2
if mylist[mid] == item:found = True
elif item else:low = mid + 1
return found

Phân tích thuật toán

Trường hợp tốt nhất xảy ra khi mặt hàng mong muốn được tìm thấy là mặt hàng ở giữa. Tuy nhiên, tình huống xấu nhất không đơn giản như vậy. Theo dõi bài phân tích dưới đây:

Sau lần so sánh đầu tiên, n / 2 mục sẽ còn lại. Sau lần thứ hai, n / 4 mục sẽ còn lại. Sau lần thứ ba, n / 8.

Lưu ý rằng số lượng mục tiếp tục giảm một nửa cho đến khi chúng đạt đến n / 2i trong đó i là số phép so sánh. Sau tất cả các lần chia nhỏ, chúng ta chỉ có 1 mục duy nhất.

Điều này nghĩa là:

n / 2i = 1 Do đó, tìm kiếm nhị phân là O (log n).

Chuyển sang sắp xếp

Trong tìm kiếm nhị phân, chúng tôi đã xem xét trường hợp mảng đã cho đã được sắp xếp thứ tự. Nhưng giả sử bạn có một tập dữ liệu không có thứ tự và bạn muốn thực hiện tìm kiếm nhị phân trên đó. Bạn sẽ làm gì?

Câu trả lời rất đơn giản: hãy sắp xếp nó. Có một số kỹ thuật sắp xếp trong khoa học máy tính đã được nghiên cứu kỹ lưỡng. Một trong những kỹ thuật này mà bạn có thể bắt đầu nghiên cứu là thuật toán sắp xếp lựa chọn, trong khi chúng tôi cũng có rất nhiều hướng dẫn liên quan đến các lĩnh vực khác.

Đăng lại Đăng lại tiếng riu ríu E-mail Cách sử dụng phân loại lựa chọn

Phân loại lựa chọn hơi khó hiểu đối với người mới bắt đầu, nhưng nó không quá khó khăn khi bạn đã nắm bắt được mọi thứ.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Giải thích về công nghệ
  • Lập trình
  • Các thuật toán
  • Phân tích dữ liệu
Giới thiệu về tác giả Jerome Davidson(22 bài báo đã xuất bản)

Jerome là Nhân viên viết bài tại MakeUseOf. Anh ấy bao gồm các bài báo về Lập trình và Linux. Anh ấy cũng là một người đam mê tiền điện tử và luôn theo dõi ngành công nghiệp tiền điện tử.

Xem thêm từ Jerome Davidson

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký