1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật – Bài 8: Các thuật toán tìm kiếm

24 41 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 24
Dung lượng 740,36 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mời các bạn cùng tham khảo bài giảng Cấu trúc dữ liệu và giải thuật – Bài 8: Các thuật toán tìm kiếm để nắm chắc kiến thức về khái niệm về tìm kiếm, phương pháp tìm kiếm tuần tự, phương pháp tìm kiếm nhị phân, phương pháp tìm kiếm nội suy.

Trang 1

C ấu trúc dữ liệu và giải thuật

Bài 8: Các thu ật toán tìm kiếm

Giảng viên: TS Ngo Huu Phuc

Tel: 0438 326 077Mob: 098 5696 580Email: ngohuuphuc76@gmail.com

Trang 2

Bài 8 Các thu ật toán tìm kiếm

8.1 Khái ni ệm về tìm kiếm (3)

8.2 Phương pháp tìm kiếm tuần tự (7)

8.3 Phương pháp tìm kiếm nhị phân (8)

8.4 Phương pháp tìm kiếm nội suy (7)

Tham kh ảo:

1 Data structures and Algorithms Searching.htm

2 Kyle Loudon Mastering Algorithms, Chapter 12 Sorting and Searching

3 Lecture 19 Sequential and Binary Search.htm

4 Sedgewick Algorithms, Elementary Searching Methods

5 Bài gi ảng của TS Nguyễn Nam Hồng

Trang 3

8.1 Khái ni ệm về tìm kiếm (1/3)

 Trong thực tế, việc xác định vị trí của một phần tử nào đó trong một danh sách ( đã sắp xếp hoặc chưa sắp xếp) có

ý nghĩa quan trọng và được dùng trong nhiều ứng dụng

 Ví dụ 1: một chương trình tra cứu từ điển, chương trình

cần trả lời ngay nghĩa của một từ nào đó

 Ví dụ 2: trong một danh sách thí sinh, chương trình cần đưa ra tất cả thông tin của thí sinh thỏa mãn một số tiêu chí nào đó

 Những bài toán như vậy được gọi chung là bài toán tìm

ếm

Trang 4

8.1 Khái ni ệm về tìm kiếm (2/3)

 Trong th ực tế, với các ý tưởng khác nhau dẫn

đến các phương pháp tìm kiếm khác nhau.

 Phương pháp tìm kiếm thông dụng nhất trong

th ực tế là tìm ki ếm tuần tự Đây là phương pháp đơn giản, tuy nhiên mất nhiều thời gian thực hiện đối với dữ liệu lớn.

Trang 5

8.1 Khái ni ệm về tìm kiếm (3/3)

Phương pháp tìm kiếm nhị phân: chia danh sách thành các danh sách con và tìm kiếm trên đó Với bộ dữ liệu lớn, phương pháp này cho tốc độ tìm kiếm tốt hơn phương

pháp tuần tự

Phương pháp tìm kiếm nội suy: cũng giống như

phương pháp tìm kiếm nhị phân, phương pháp này cũng chia danh sách thành các danh sách con và tìm kiếm trên

đó

 Phương pháp tìm kiếm nội suy nhanh hơn phương pháp

nhị phân vì chúng dự đoán kết quả tìm kiếm trên phần nào

để thực hiện tìm kiếm

Trang 6

8.1 Tìm ki ếm tuần tự (1/7)

 Đây là phương pháp tìm kiếm đơn giản nhất.

 Ý t ưởng chung của tìm kiếm tuần tự:

 Sử dụng vòng lặp để có thể duyệt cả danh sách, xuất phát từ phần tử đầu tiên trong danh sách

 Tại mỗi bước lặp, so sánh phần tử trong danh sách với giá trị cần tìm ( theo khóa nào đó ) Quá trình sẽ dừng

nếu tìm thấy đối tượng cần tìm hoặc đã đi hết danh

sách

Trang 8

8.1 Tìm ki ếm tuần tự (3/7)

 Giả sử cho danh sách số nguyên gồm:

 Ví dụ: tìm vị trí phần tử có giá trị bằng 11, việc tìm kiếm

bắt đầu từ phần tử có giá trị 17, đến 23, đến 5, đến 11: đưa ra thông báo đã tìm thấy, trả về v ị trí thứ 4 trong

danh sách.

 Ví dụ: tìm vị trí phần tử có giá trị bằng 7, việc tìm kiếm bắt đầu từ phần tử có giá trị 17, qua cả danh sách, nhưng

không tìm thấy, trả về thông tin: không tìm th ấy.

Trang 9

8.1 Tìm ki ếm tuần tự (4/7)

M ột số ưu điểm của thuật toán tìm kiếm tuần tự:

 Rất đơn giản để nắm bắt

 Đơn giản trong việc thực hiện

 Danh sách ban đầu không cần thiết phải được sắp theo

một thứ tự nào đó

Nhược điểm của phương pháp tìm kiếm tuần tự:

 Hiệu quả của phương pháp rất kém

 Ví dụ: Giả sử có một danh sách có 10 000 phần tử

Phần tử cần tìm ở vị trí 10 000 Như vậy phải đi qua cả danh sách mới tìm được phần tử đó!!!

Trang 10

8.1 Tìm ki ếm tuần tự (6/7)

Use a Sentinel to Improve the Performance

Sub LinearSearch2(x:int, a[]: Int, loc: Int)

Trang 11

8.1 Tìm ki ếm tuần tự (7/7)

Apply Linear Search to Sorted Lists

Sub LinearSearch3(x:int, a[]: Int, loc: Int)

Trang 12

8.2 Tìm ki ếm nhị phân (1/8)

V ới phương pháp tìm kiếm tuần tự, hiệu quả kém

v ới danh sách dài Vậy, có cách nào hiệu quả hơn không?

 Phương pháp tốt để tìm kiếm: Tìm kiếm nhị phân.

 Giả sử: Cho một danh sách được sắp theo một khóa

Trang 13

8.2 Tìm ki ếm nhị phân (2/8)

1. Gi ả sử dãy khóa đang xét là kl,…, kr và c ần tìm

ph ần tử có khóa x

2. Khóa ở giữa dãy là ki v ới i = (l+r) / 2.

3. So sánh khóa x v ới ki, có nh ững khả năng sau:

ki-1.

, kr.

4. Thực hiện cho đến khi tìm thấy hoặc khoảng dãy khóa

mới bị rỗng (không tìm thấy)

Trang 14

8.2 Tìm ki ếm nhị phân (3/8)

Ví d ụ về tìm kiếm nhị phân:

 Gi ả sử cho dãy số như sau (đã sắp xếp):

 Mu ốn tìm phần tử có khóa 11, tìm kiếm nhị phân

th ấy giá trị 11, dừng tìm kiếm.

 Mu ốn tìm khóa 7, tìm kiếm nhị phân xét các giá trị

l ần lượt là 11,3,5, và dừng vị không tìm thấy.

Trang 15

8.2 Tìm ki ếm nhị phân (6/8)

Algorithm for Binary search

Sub BinarySearch(x:int, a[]: int, loc: Int)

Trang 16

Độ phức tạp của thuật toán: O(log 2 n).

 Trong trường hợp trung bình đã chứng minh được,

độ phức tạp của thuật toán: O(log2n).

Trang 17

8.2 Tìm ki ếm nhị phân (8/8)

Nh ận xét về tìm kiếm nhị phân

Ưu điểm :

 Hiệu quả hơn nhiều so với tìm kiếm tuần tự

 V ới dãy có n phần tử, chỉ cần tối đa log2n phép so

sánh.

Nhược điểm :

 Dãy đã cho phải được sắp xếp theo một khóa nào đó Như vậy, cần thêm thời gian cho sắp xếp

Trang 18

8.3 Tìm ki ếm nội suy (1/7)

 Tìm ki ếm nhị phân hiệu quả hơn nhiều so với tìm

ki ếm tuần tự vì nó đã loại bỏ phần lớn phần tử trong quá trình tìm ki ếm.

 Trong th ực tế, nếu biết thêm thông tin rằng các phần

t ử trong danh sách, theo khóa, được phân bố khá đều, khi đó, có thể sử dụng nội suy để thu ngắn hơn

n ữa quá trình tìm kiếm.

Trang 19

8.3 Tìm ki ếm nội suy (2/7)

 N ội suy được hiểu theo nghĩa là từ môt vài giá trị

đã biết, đoán giá trị chưa biết ở vị trí nào.

 Ở đây, chỉ số được sử dụng để xác định phần tử

đã biết, cũng như phần tử cần tìm.

 Gi ả sử, tìm kiếm phần tử x t ừ a[r] đến a[l] Tìm

ki ếm nội suy được thực hiện thông qua công

th ức: m = l + (x – a[l])*(r-l)/(a[r]-a[l])

Trang 20

8.3 Tìm ki ếm nội suy (3/7)

 So sánh x v ới a[m], có một số trường hợp sau:

 Nếu x = a[m]: Tìm thấy

Trang 22

a[12]=32>30=x -> r = 11

3: l=10, r=11 -> m=10+(30-24)*(11-10)/(24-21) = 12

Trang 23

r = m - 1End If

Trang 24

8.3 Tìm ki ếm nội suy (7/7)

Nh ận xét:

 Tìm kiếm nhị phân cho tốc độ tìm kiếm nhanh (độ phức

tạp O(logn)) Tuy nhiên, tìm kiếm nội suy cho tốc độ tìm

kiếm tốt hơn (độ phức tạp O(loglogn))

 Ví dụ, với n = 2^32 (4 tỉ phần tử)

 Tìm ki ếm nhị phân cần khoảng 32 bước.

 Tìm kiếm nội suy cần khoảng 5 bước.

 Tìm kiếm nội suy hiệu quả với danh sách có số phần tử

lớn

 Tìm kiếm nội suy vẫn được dùng trong tìm kiếm dữ liệu được lưu trữ trên ổ cứng hoặc các thiết bị truy cập chậm

Ngày đăng: 24/09/2020, 04:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w