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[r]
Trang 1C ấu trúc dữ liệu và giải thuật
Giảng viên: TS Ngo Huu Phuc
Tel: 0438 326 077 Mob: 098 5696 580 Email: ngohuuphuc76@gmail.com
Trang 2N ội dung:
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
Trang 38.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
kiếm
Trang 4 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 58.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 Đâ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 78.1 Tìm ki ếm tuần tự (2/7)
Sub LinearSearch(x:int, a[]: Int, loc: Int)
i:=1
While (i<=n) And (x<>a[i])
i:=i+1
End While
If i<=n Then loc = i Else loc = 0
End Sub
{loc is the subscript of the term that equals x, or is
0 if x is not found}
Trang 8 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
Trang 98.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 10Use a Sentinel to Improve the Performance
Sub LinearSearch2(x:int, a[]: Int, loc: Int)
a[n+1] = x: n = n + 1: i = 1
While (x<>a[i])
i = i+1
End While
If i<=n Then loc = i Else loc = 0
End Sub