Tải bản đầy đủ (.ppt) (18 trang)

BÀI 6: TÌM KIẾM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (715.55 KB, 18 trang )

1

BÀI 6: TÌM KIẾM
6.1. Tìm kiếm tuần tự
6.2. Tìm kiếm nhị phân
6.3. Câu hỏi ôn tập


2

6.1. Tìm kiếm tuần tự
6.1.1. Bài tốn tìm kiếm
6.1.2. Ngun tắc tìm kiếm
6.1.3. Giải thuật
6.1.4. Phân tích đánh giá


3

6.1.1. Bài tốn tìm kiếm



Tìm kiếm là địi hỏi rất thường xun trong xử lý tin học.
Bài tốn tìm kiếm:
“ Cho 1 bảng chính gồm n bản ghi R1, R2, …, Rn. Mỗi bản
ghi Ri (1 ≤ i ≤ n) tương ứng với 1 khố Ki. Hãy tìm bản
ghi có giá trị khoá tương ứng bằng X cho trước.”
– X được gọi là khố tìm kiếm hay đối trị tìm kiếm.
– Cơng việc tìm kiếm sẽ hồn thành khi xảy ra 1 trong 2 tình
huống sau:


1. Tìm được bản ghi có giá trị khố = X (thành cơng)
2. Khơng tìm được bản ghi có giá trị khố = X (khơng thành cơng)

• Chú ý: Khố được coi như đại diện của bản ghi, vì vậy
trong các GT và ví dụ, ta chỉ nói tới khố.


Bài tốn tìm kiếm

4

• Bài tốn tìm kiếm bản ghi có giá trị khố bằng X trong
bảng chính chứa các bản ghi R1, R2, …, Rn coi như được
đặt ra 1 cách đơn giản với bảng khoá chứa các khoá K1,
K2, …, Kn và Ki ≠ Kj nếu i ≠ j.
Tìm kiếm khố X trong 1 bảng các khố K1, K2, …, Kn
(Ki ≠ Kj nếu i ≠ j)
• Sau 1 phép tìm kiếm khơng thành cơng, có thể xuất hiện
yêu cầu bổ sung thêm bản ghi mới, GT như vậy được gọi
là GT tìm kiếm có bổ sung.
• Giá trị của khố có thể là số, ký tự, xâu ký tự,… nhưng
để cho tiện ta coi khoá là các số nguyên.


5

6.1.2. Ngun tắc tìm kiếm


Tìm kiếm tuần tự (sequential searching) là kỹ thuật tìm

kiếm rất đơn giản và cổ điển.



Nội dung có thể tóm tắt như sau:



Ngun tắc tìm kiếm:


Lần lượt so sánh X (khố tìm kiếm) với các khố K1, K2, …,
Kn trong bảng cho tới khi tìm thấy X (X = Km) hoặc hết bảng
khố mà chưa tìm thấy X.



Kết quả:

1. Tìm được vị trí m của khố (đầu tiên) có giá trị bằng X.
2. Khơng tìm được khố có giá trị bằng X.


6.1.3. Giải thuật

6



Cho bảng khố k gồm n phần tử (0 ≤ n ≤ 250), các khoá

và X là các số nguyên Integer được nhập từ bàn phím
hoặc sinh ngẫu nhiên (bằng random).
• Giải thuật tìm kiếm tuần tự sẽ thực hiện tìm kiếm trong
bảng xem có khố nào bằng X khơng.
1. Nếu có sẽ đưa ra chỉ số của khố ấy
2. Nếu khơng nó sẽ đưa ra giá trị 0.
3. Trong giải thuật này có sử dụng 1 khố phụ kn+1 mà giá
trị của nó chính là X.


GT tìm kiếm tuần tự
Function Tuantu(X: Shortint) : Byte;
Var i: Byte;
Begin
i := 1;
k[n + 1] := X;
{Tìm kiếm tuần tự}
While k[i] <> X do i := i + 1;
{Khơng tìm thấy}
If i = n + 1 Then Tuantu := 0
{Tìm thấy}
Else Tuantu := i;
End;

7


8

6.1.4. Phân tích đánh giá



Tìm kiếm tuần tự (Tuantu):
B1: Xác định phép tốn tích cực
– Là phép so sánh:
k[i] <> X
B2: Xác định số lần thực hiện của phép toán tích cực
– Số lượng phép so sánh phụ thuộc vào tình trạng của bảng khố
(so với giá trị X).
– T/h tốt nhất (min) xảy ra khi k[1] = X,
X số lần thực hiện phép
tốn tích cực là:

Cmin 1



T/h xấu nhất (max) xảy ra khi k[n + 1] = X,
X nghĩa là khơng tìm
thấy X, số lần thực hiện phép tốn tích cực là:

Cmax n  1


Phân tích đánh giá


9

T/h trung bình (tb) xảy ra khi việc tìm thấy X ở mọi vị trí là

đồng khả năng. Số lần thực hiện phép tốn tích cực trong t/h
trung bình có thể coi là:

n 1
Ctb 
2

B3: Kết luận độ phức tạp của GT tìm kiếm tuần tự
– T/h tốt nhất:

Tmin (n) O(1)


T/h xấu nhất và trung bình:

Tmax (n) Ttb (n) O(n)


10

6.2. Tìm kiếm nhị phân
6.2.1. Nguyên tắc tìm kiếm
6.2.2. Giải thuật
6.2.3. Phân tích đánh giá


11

6.2.1. Ngun tắc tìm kiếm




Phép tìm kiếm nhị phân ln chọn khoá “ở giữa” bảng
khoá đang xét để thực hiện so sánh với khố tìm kiếm X.
Ngun tắc tìm kiếm nhị phân:








Giả sử bảng khoá đang xét là kL, …, kR thì khố ở giữa bảng sẽ
L  R 
là ki với:
i 
 2 
Tìm kiếm sẽ kết thúc nếu X = ki.
Nếu X < ki tìm kiếm được thực hiện tiếp với kL, …, ki-1.
Nếu X > ki tìm kiếm được thực hiện tiếp với ki+1, …, kR.
Với bảng khố sau, sử dụng kỹ thuật tương tự.
Q trình tìm kiếm bắt đầu với L = 1 và R = n đến khi tìm thấy
X hoặc bảng khố đang xét rỗng (khơng tìm thấy).


6.2.2. Giải thuật


12


Cho bảng khố k gồm n phần tử (0 ≤ n ≤ 250) đã được
sắp xếp theo thứ tự tăng dần, các khoá và X là các số
nguyên Integer được nhập từ bàn phím hoặc sinh ngẫu
nhiên (bằng random).
• Giải thuật tìm kiếm nhị phân sẽ thực hiện tìm kiếm trong
bảng xem có khố nào bằng X khơng.
1. Nếu có sẽ đưa ra chỉ số của khố ấy.
2. Nếu khơng nó sẽ đưa ra giá trị 0.
• Có thể thể hiện tìm kiếm nhị phân bằng:
1. Giải thuật lặp
2. Giải thuật đệ quy


13

GT lặp tìm kiếm nhị phân
Function Nhiphan(X : Integer): Byte;
Var L, R, m, vitri: Byte;
Begin
L := 1; R := n; vitri := 0;
While L <= R do
Begin
m := (L + R) div 2;
If X < k[m] then R := m – 1
Else
If X > k[m] then L := m + 1;
Else begin vitri := m; break; end;
End;
Nhiphan := vitri;

End;


14

GT đệ quy tìm kiếm nhị phân
Function Nhiphan(L, R: Byte; X : Integer): Byte;
Var m, vitri: Byte;
Begin
If L > R then vitri := 0
Else
Begin
m := (L + R) div 2;
If X < k[m] then vitri := Nhiphan(L, m – 1, X)
Else
If X > k[m] then vitri := Nhiphan(m + 1, R, X);
Else vitri := m;
End;
Nhiphan := vitri;
End;


15

6.2.3. Phân tích đánh giá


Tìm kiếm nhị phân (Nhiphan):
B1: Xác định phép tốn tích cực
– Là phép so sánh:

L <= R
B2: Xác định số lần thực hiện của phép toán tích cực
– Số lượng phép so sánh phụ thuộc vào tình trạng bảng khố (so
với giá trị X).
– T/h tốt nhất (min) xảy ra khi k[m] = X,
X số lần thực hiện phép
tốn tích cực là 1:
– T/h xấu nhất (max) và trung bình (tb) tương đối phức tạp (cơng
nhận kết quả).
B3: Kết luận độ phức tạp của GT tìm kiếm tuần tự
– T/h tốt nhất:
min
– T/h xấu nhất và trung bình:

T

(n) O(1)

Tmax (n) Ttb (n) O(lg n)


Phân tích đánh giá

16

• Số lượng phép so sánh phụ thuộc vào X.
• So với tìm kiếm tuần tự, chi phí tìm kiếm nhị phân ít hơn
khá nhiều.
Sau này ta sẽ thấy: Khơng có 1 phương pháp tìm kiếm nào dựa
trên so sánh giá trị khố lại có thể đạt được kết quả tốt hơn tìm

kiếm nhị phân.

• Tuy nhiên, trước khi sử dụng tìm kiếm nhị phân bảng
khố đã phải được sắp xếp, nghĩa là thời gian chi phí cho
sắp xếp cũng phải kể đến.
• Nhược điểm: Nếu bảng khố ln biến động (bổ sung
hay loại bỏ) thì chi phí cho sắp xếp lại rất nhiều. Đây
chính là nhược điểm của phương pháp tìm kiếm nhị phân.


6.3 Câu hỏi ơn tập


17

Lý thuyết
1. Trình bày bài tốn tìm kiếm và phát biểu bài tốn dạng đơn
giản nhất.
2. Trình bày nguyên tắc của phương pháp tìm kiếm tuần tự. Độ
phức tạp của GT tương ứng?
3. Trình bày nguyên tắc của phương pháp tìm kiếm nhị phân. Độ
phức tạp của GT tương ứng?



Thực hành


Cho bảng khố cần tìm kiếm:
42

23
74
11
65
58
94
36
99
87
4. Minh hoạ quá trình tìm kiếm tuần tự với X1 = 50 và X2 = 23.
5. Viết chương trình sử dụng giải thuật tìm kiếm tuần tự với 1
bảng khố sinh ngẫu nhiên và X nhập từ bàn phím.


Câu hỏi ơn tập


18

Cho bảng khố cần tìm kiếm:
11
23
36
42
58
65
74
87
94
99

6. Minh hoạ quá trình tìm kiếm nhị phân với X1 = 50 và X2 = 23.
7. Viết chương trình sử dụng giải thuật tìm kiếm nhị phân với 1
bảng khố sinh ngẫu nhiên và X nhập từ bàn phím, bằng:
– Giải thuật lặp
– Giải thuật đệ quy
-----------------------



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×