Professional Documents
Culture Documents
Chuong 8 Timkiem
Chuong 8 Timkiem
GIẢI THUẬT
(Data structure and Algorithms)
NỘI DUNG MÔN HỌC (60T)
Chương 1 – GIỚI THIỆU MÔN HỌC
Chương 2 – KIỂU DỮ LIỆU
Chương 3 – DANH SÁCH (LIST)
Chương 4 – NGĂN XẾP (Stack)
Chương 5 – HÀNG ĐỢI (QUEUE)
Chương 6 – THUẬT TOÁN (giải thuật)
Chương 7 – ĐỆ QUY
Chương 8 – CÂY VÀ TÌM KIẾM
Chương 9 – SẮP XẾP
Chương 10 – CÂY NHỊ PHÂN
Tài liệu tham khảo
1. Đỗ Xuân Lôi, Cấu trúc dữ liệu và giải thuật,
NXB Khoa học kỹ thuật, 1996.
2. Cấu trúc dữ liệu và giải thuật- Đinh Mạnh
Tường.
3. Trần Hạnh Nhi, Dương Anh Đức- Giáo trình
cấu trúc dữ liệu và giải thuật ĐH Quốc gia Tp Hồ
Chí Minh
CHƯƠNG 4: TÌM KIẾM
8.1. Giới thiệu
8.2. Tìm kiếm tuần tự
8.3. Tìm kiếm nhị phân
8.1. GIỚI THIỆU
a. Khái niệm
Tìm kiếm là một thao tác rất quan trọng đối với nhiều ứng
dụng tin học. Tìm kiếm có định nghĩa là việc thu thập một
số thông tin nào đó từ một khối thông tin lớn đã được lưu
trước đó.
Thông tin lưu trữ thường được chia thành các bản ghi,
mỗi bản ghi có một giá trị khóa để phục vụ cho mục đích
tìm kiếm.
Mục tiêu của việc tìm kiếm là tìm tất cả các bản ghi có giá
trị khóa trùng với một giá trị cho trước. Khi tìm được bản
ghi này, các thông tin đi kèm trong bản ghi sẽ được thu
thập và xử lý.
8.1. GIỚI THIỆU
b. Bài toán tìm kiếm
Cho dãy n phần tử, giả sử chúng được lưu trữ dưới dạng
mảng a[1], a[2], …., a[n]. Hãy tìm vị trí của phần tử có giá
trị là X (cho trước) trong mảng.
Bài toán trên sẽ có một trong hai kết quả:
kiếm lần lượt các giá trị trong mảng tự vị trí đầu tiên cho
đến cuối cùng.
Tìm kiếm nhị phân: Dựa trên mô hình “chia để trị” như
sau: chia tập cần tìm thành hai nửa, xác định nửa chứa giá
trị cần tìm và tập trung tìm kiếm trên nửa đó. Phương pháp
này chỉ áp dụng với tập các phần tử đã được sắp xếp. 7
8.2. TÌM KIẾM TUẦN TỰ
a. Tư tưởng giải thuật
Tiến hành so sánh X lần lượt với từng phần tử của mảng
cho đến khi gặp được phần tử có khoá cần tìm, hoặc tìm hết
mảng mà không thấy X.
Các bước tiến hành như sau:
Bước 1: i:=1; // bắt đầu từ phần tử đầu tiên của dãy
12 2 8 5 1 6 4 15
Tìm phần tử X=8
14
8.3. TÌM KIẾM NHỊ PHÂN
b. Ví dụ: Cho dãy số
1 2 4 5 6 8 12 15
1 2 3 4 5 6 7 8
1 2 4 5 6 8 12 15
1 2 3 4 5 6 7 8
X=8
1 2 4 5 6 8 12 15
1 2 3 4 5 6 7 8
X=8
11 23 36 42 58 65 74 87 94 99
1 2 3 4 5 6 7 8 9 10
8.3. TÌM KIẾM NHỊ PHÂN
c. Thuật toán
Begin
1) { Khởi đầu} l:=1; r:=n;
2) {Tìm} While l<=r do Begin
3) {Tính chỉ sổ giữa} m:=(l+r) div 2;
4) {So sánh} If x<k[m] then
r:=m-1
else if x>k[m] then
l:=m+1
else return(m)
End;
5){Tìm kiếm không thoả mãn} Return(0)
End;
19
8.3. TÌM KIẾM NHỊ PHÂN
d. Đánh giá giải thuật