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

BÀI 6: TÌM KIẾM ppsx

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 (810.91 KB, 18 trang )

1
BÀI 6: TÌM KIẾM
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
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 toán tìm kiếm
6.1.2. Nguyên tắc tìm kiếm
6.1.3. Giải thuật
6
6.1.4. Phân tích đánh giá
3
6.1.1. Bài toán tìm kiếm

Tìm kiếm
Tìm kiếm
là đòi hỏi rất thường xuyên trong xử lý tin học.
là đòi hỏi rất thường xuyên trong xử lý tin học.


Bài toán tìm kiếm:
Bài toán tìm kiếm:


Cho 1 bảng chính gồm
Cho 1 bảng chính gồm
n
n
bản ghi
bản ghi
R
R
1
1
,
,
R
R
2
2
, …,
, …,
R
R
n
n
. Mỗi bản
. Mỗi bản
ghi
ghi

R
R
i
i
(1 ≤ i ≤ n) tương ứng với 1 khoá
(1 ≤ i ≤ n) tương ứng với 1 khoá
K
K
i
i
. Hãy tìm bản
. Hãy tìm bản
ghi có giá trị khoá tương ứng bằng
ghi có giá trị khoá tương ứng bằng
X
X
cho trước.”
cho trước.”

X được gọi là khoá tìm kiếm hay đối trị tìm kiếm.

Công việc tìm kiếm sẽ hoà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ị khoá = X (thành công)
2. Không tìm được bản ghi có giá trị khoá = X (không thành công)

Chú ý: Khoá được coi như đại diện của bản ghi, vì vậy
Chú ý: Khoá đượ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 khoá.
trong các GT và ví dụ, ta chỉ nói tới khoá.

4

Bài toán tìm kiếm bản ghi có giá trị khoá bằng X trong
Bài toán tìm kiếm bản ghi có giá trị khoá bằng X trong
bảng chính chứa các bản ghi R
bảng chính chứa các bản ghi R
1
1
, R
, R
2
2
, …, R
, …, R
n
n
coi như được
coi như được
đặt ra 1 cách đơn giản với bảng khoá chứa các khoá K
đặt ra 1 cách đơn giản với bảng khoá chứa các khoá K
1
1
,
,
K
K
2
2
, …, K
, …, K

n
n
và K
và K
i
i
≠ K
≠ K
j
j
nếu i ≠ j.
nếu i ≠ j.
Tìm kiếm khoá X trong 1 bảng các khoá K
Tìm kiếm khoá X trong 1 bảng các khoá K
1
1
, K
, K
2
2
, …, K
, …, K
n
n
(K
(K
i
i
≠ K
≠ K

j
j
nếu i ≠ j)
nếu i ≠ j)

Sau 1 phép tìm kiếm không thành công, có thể xuất hiện
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
yêu cầu bổ sung thêm bản ghi mới, GT như vậy được gọi


GT tìm kiếm có bổ sung
GT tìm kiếm có bổ sung
.
.

Giá trị của khoá có thể là số, ký tự, xâu ký tự,… nhưng
Giá trị của khoá có thể là số, ký tự, xâu ký tự,… nhưng
để cho tiện ta coi khoá là các
để cho tiện ta coi khoá là các
số nguyên
số nguyên
.
.
Bài toán tìm kiếm


5
6.1.2. Nguyên tắc tìm kiếm


Tìm kiếm tuần tự (sequential searching) là kỹ thuật tì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.
kiếm rất đơn giản và cổ điển.

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

Nguyên tắc tìm kiếm
Nguyên tắc tìm kiếm
:
:

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

Kết quả:
1. Tìm được vị trí m của khoá (đầu tiên) có giá trị bằng X.
2. Không tìm được khoá có giá trị bằng X.
6
6.1.3. Giải thuật


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


X
X
là các số nguyên Integer được nhập từ bàn phím
là các số nguyên Integer được nhập từ bàn phím
hoặc sinh ngẫu nhiên (bằng
hoặc sinh ngẫu nhiên (bằng
random
random
).
).

Giải thuật tìm kiếm tuần tự sẽ thực hiện tìm kiếm trong
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ó khoá nào bằng
bảng xem có khoá nào bằng
X
X
không.
không.
1.
1.
Nếu có sẽ đưa ra chỉ số của khoá ấy
Nếu có sẽ đưa ra chỉ số của khoá ấy
2.
2.
Nếu không nó sẽ đưa ra giá trị
Nếu không nó sẽ đưa ra giá trị
0
0
.
.
3.
3.
Trong giải thuật này có sử dụng 1 khoá phụ
Trong giải thuật này có sử dụng 1 khoá phụ
k
k
n+1
n+1
mà giá
mà giá
trị của nó chính là
trị của nó chính là

X
X
.
.
7
GT tìm kiếm tuần tự
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;
8

Tìm kiếm tuần tự (Tuantu):
B1: Xác định phép toá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 khoá
(so với giá trị X).


T/h tốt nhất (min) xảy ra khi k[1] = X, số lần thực hiện phép
toán tích cực là:

T/h xấu nhất (max) xảy ra khi k[n + 1] = X, nghĩa là không tìm
thấy X, số lần thực hiện phép toán tích cực là:
1C
min
=
6
6.1.4. Phân tích đánh giá
1nC
max
+=
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 toán tích cực trong t/h
trung bình có thể coi là:
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:

T/h xấu nhất và trung bình:
2
1n
C
tb
+
=
)()()( nnn OT

tbmax
==T
Phân tích đánh giá
)()( 1O
min
=nT
10
6.2. Tìm kiếm nhị phân
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. Nguyên tắc tìm kiếm

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

Nguyên tắc tìm kiếm nhị phân:
Nguyên tắc tìm kiếm nhị phân:

Giả sử bảng khoá đang xét là k
L
, …, k

R
thì khoá ở giữa bảng sẽ
là k
i
với:

Tìm kiếm sẽ kết thúc nếu X = k
i
.

Nếu X < k
i
tìm kiếm được thực hiện tiếp với k
L
, …, k
i-1
.

Nếu X > k
i
tìm kiếm được thực hiện tiếp với k
i+1
, …, k
R
.

Với bảng khoá sau, sử dụng kỹ thuật tương tự.

Quá 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 khoá đang xét rỗng (không tìm thấy).







+
=
2
RL
i
12
6.2.2. Giải thuật
6.2.2. Giải thuật

Cho bảng khoá
Cho bảng khoá
k
k
gồm
gồm
n
n
phần tử (0
phần tử (0
≤ n ≤ 250) đã được
≤ n ≤ 250) đã được
sắp xếp theo
sắp xếp theo
thứ tự tăng dần

thứ tự tăng dần
, các khoá và
, các khoá và
X
X
là các số
là các số
nguyên
nguyên
Integer
Integer
được nhập từ bàn phím hoặc sinh ngẫu
được nhập từ bàn phím hoặc sinh ngẫu
nhiên (bằng
nhiên (bằng
random
random
).
).

Giải thuật tìm kiếm nhị phân sẽ thực hiện tìm kiếm trong
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ó khoá nào bằng
bảng xem có khoá nào bằng
X
X
không.
không.
1.
1.

Nếu có sẽ đưa ra chỉ số của khoá ấy.
Nếu có sẽ đưa ra chỉ số của khoá ấy.
2.
2.
Nếu không nó sẽ đưa ra giá trị
Nếu không nó sẽ đưa ra giá trị
0
0
.
.

Có thể thể hiện tìm kiếm nhị phân bằng:
Có thể thể hiện tìm kiếm nhị phân bằng:
1.
1.
Giải thuật lặp
Giải thuật lặp
2.
2.
Giải thuật đệ quy
Giải thuật đệ quy
13
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;
GT lặp tìm kiếm nhị phân
GT lặp tìm kiếm nhị phân
14
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;
GT đệ quy tìm kiếm nhị phân
GT đệ quy tìm kiếm nhị phân
15

Tìm kiếm nhị phân (Nhiphan):
B1: Xác định phép toá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 khoá (so
với giá trị X).

T/h tốt nhất (min) xảy ra khi k[m] = X, số lần thực hiện phép
toá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:

T/h xấu nhất và trung bình:
6.2.3. Phân tích đánh giá
)(lg)()( nnn OT
tbmax
==T
)()( 1O
min
=nT
16
Phân tích đánh giá

Số lượng phép so sánh phụ thuộc vào
Số lượng phép so sánh phụ thuộc vào
X
X

.
.

So với tìm kiếm tuần tự, chi phí tìm kiếm nhị phân ít hơn
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.
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ị khoá 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
Tuy nhiên, trước khi sử dụng tìm kiếm nhị phân bảng
khoá
khoá
đã phải được sắp xếp
đã phải được sắp xếp
, nghĩa là thời gian chi phí cho
, nghĩa là thời gian chi phí cho
sắp xếp cũng phải kể đến.
sắp xếp cũng phải kể đến.

Nhược điểm
Nhược điểm
: Nếu bảng khoá luôn biến động (bổ sung
: Nếu bảng khoá luôn biến động (bổ sung
hay loại bỏ) thì chi phí cho sắp xếp lại rất nhiều. Đây
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.
chính là nhược điểm của phương pháp tìm kiếm nhị phân.

17
6.3 Câu hỏi ôn tập
6.3 Câu hỏi ôn tập

Lý thuyết
Lý thuyết
1. Trình bày bài toán tìm kiếm và phát biểu bài toá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
Thực hành

Cho bảng khoá cần tìm kiếm:
42
42
23
23
74
74
11
11
65
65
58
58
94

94
36
36
99
99
87
87
4. Minh hoạ quá trình tìm kiếm tuần tự với X
1
= 50 và X
2
= 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 khoá sinh ngẫu nhiên và X nhập từ bàn phím.
18
Câu hỏi ôn tập
Câu hỏi ôn tập

Cho bảng khoá cần tìm kiếm:
11
11
23
23
36
36
42
42
58
58
65

65
74
74
87
87
94
94
99
99
6. Minh hoạ quá trình tìm kiếm nhị phân với X
1
= 50 và X
2
= 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 khoá 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
×