Môn: C U TRÚC D LI U
Ữ Ệ
Ấ
Ch
ươ
ng 2: K THU T TÌM KI M Ậ
Ỹ
Ế
(SEARCHING)
4 ti
t LTế
1
N I DUNG CH
NG 2
Ộ
ƯƠ
ế
i thu t tìm ki m n i (Tìm ki m trên m ng)
ế
ả
2.1 Khái quát v tìm ki m ề 2.2 Các gi ộ ế ậ ả Tìm tuy n tính (Linear Search) ế Tìm nh phân (Binary Search) ị 2.3 Các gi
i thu t tìm ki m ngo i (Tìm ki m trên t p ạ
ế
ế
ậ
ậ
ả
tin)
ế ị
Tìm tuy n tính (F Linear Search) Tìm nh phân (Binary Search) BÀI T PẬ
2
2.1 Khái quát v tìm ki m
ề
ế
Trong các h l u tr và qu n lý d li u, thao tác tìm ki m ả c th c hi n nhi u nh t đ khai thác thông tin m t các d ễ ấ ể
ữ ệ ữ ế
ệ ư ệ ự ề ộ
đ ượ dàng. S l ệ ộ ố
N u tìm ki m trong m t h th ng đã t
ng thông tin trong m t h th ng thông tin là đáng k ể i thu t tìm ki m nhanh s có ý nghĩa ế ẽ ậ ả ự
ộ ệ ố ổ ch c thì vi c tìm ki m ệ ứ ế
ả ượ c xây d ng nh m m c tiêu h tr ỗ ợ ự ụ ằ
ứ
ữ ệ ấ
ố ượ nên vi c xây d ng các gi ệ quan tr ng. ọ ế d dàng h n. ơ ậ ng d ng có hi u qu h n. ệ ậ ữ ệ ả ế i thu t tìm ki m đ ế ả ơ i thu t ph thu c vào vào c u trúc d li u mà nó tác ộ c l u tr trên b nh chính và b nh ớ ớ ượ ư ữ ộ ộ
ế ễ Các gi ụ Các gi ụ đ ng đ n. D li u đ ộ ph .ụ
3
2.1 Khái quát v tìm ki m (tt)
ề
ế
Gi
đ ộ
s m i ph n t ả ử ỗ ậ ể ữ ệ ầ khóa i là ạ
c xem xét có m t thành ph n ầ ử ượ (Key) đ nh n di n có ki u d li u T, các thành ph n còn l ể ệ thông tin (Info), nh v y m i ph n t có c u trúc nh sau: ầ ử ư ậ ầ ư ấ ỗ
typedef struct DataElement {
T InfoData Key; Info;
} DataType; Đ đ n gi n, quan tâm thành ph n d li u ch là khóa nh n ể ơ ữ ệ ả ầ ậ ỉ
di nệ
4
2.2 Các gi
ả
i thu t tìm ki m n i ộ
ế
ậ
Bài toán đ t ra: Gi s có m t m ng A g m n ph n t ặ ả ử ả ầ ồ
ị ằ
ầ ử X thì ph n t b ng ph n t X là ph n t . C n xác ộ ầ ử có giá tr b ng X trong m ng M?? ả th ầ ử ứ ầ ử ầ ử ằ
đ nh có hay không ph n t N u có ph n t ầ ử m y trong m ng X? ả ị ế ấ
ả ộ ư ế ậ
ế hay (Sequential Search) còn g i tìm ki m Các gi i thu t tìm ki m n i đ a ra 2 cách tìm ki m Tìm ki m tu n t ế ầ ự ế ọ
Tìm ki m nh phân (Binary Search)
ế
tuy n tính (Linear Search) ị ế
5
Tìm tuy n tính (Linear Seach)
ế
Ý t
ả
ầ ử ủ
ớ
ị đ u tiên cho đ n khi tìm
c a m ng A v i giá tr X ế
ầ ử ầ
ầ ượ ắ ầ ừ
ả
ấ
ph n t
ầ ử ầ
ng: ưở So sánh l n l t các ph n t ph n t c n tìm b t đ u t ầ th y ho c tìm h t m ng mà không tìm th y X. ế ặ ấ Thu t toán ậ đ u tiên B1: i = 1 ;// b t đ u t ắ ầ ừ B2: so sánh A[i] v i X, có 2 kh năng : ả ớ ấ
A[i] =X : Tìm th y. D ng A[i] <>X : Sang B3 B3: i=i+1 // Xét ph n t
ả ừ
ấ
ti p theo trong m ng N u i>n : H t m ng, không tìm th y.D ng ế Ng
ế i: l p l
c l
ầ ử ế ả i B2 ượ ạ ặ ạ
ừ
6
Tìm tuy n tính (Linear Seach)
ế
Ví d :ụ
12 2 8 5 1
X=8 X=8
i=1
12 2 8 5 1
X=8 i=2
12 2 8 5 1
i=3
X=8
12 2 8 5 1
D ngừ 7
Tìm tuy n tính (Linear Seach)
ế
ậ
ặ
Cài đ t thu t toán: int LinearSearch (int A[], int n, int X) {
int i = 0;
while (A[i] != X && i m ng M tính t 0 ầ ử ả ừ i++;
if (i < n) return (i); return (-1); } 8 t nh t (ph n t đ u tiên c a m ng có
ủ ả ấ ườ ợ ố ầ ử ầ min = 1 min = 2+1=3 Tr nào c a ầ ử ủ ấ
ị max = 1 ng h p t
giá tr = X)
ị
S phép gán G
ố
S phép so sánh S
ố
ng h p x u nh t (không có ph n t
ườ
ấ
ợ
m ng có giá tr = X)
ả
S phép gán G
S phép so sánh S max = 2n + 1 avg = 1 S phép gán G
S phép so sánh S ố
ố
Trung bình
ố
ố avg = (3+2n + 1)/2=n+2 9 ự ệ ậ ớ ả ớ ị ằ C i ti n thu t toán:
ậ
ả ế
M i b
ỗ ướ ặ
ý t
ưở
m t ph n t
ộ
nh n di n ra s h t m ng khi duy t
ệ .
ự ế
ậ c l p v i thu t toán trên c n th c hi n 2 phép so sánh
ầ
ng gi m b t phép so sánh b ng cách thêm vào m ng
ằ
ả
c m canh (sentinel/stand by) có giá tr b ng X đ
ầ ử ầ
ể
ệ ả „ X ặ ạ có giá tr X i B3
ấ i: Thì không tìm th y ph n t ầ ử
ấ ầ ử v trí i
ị ở ị
có giá tr X
ị B1: i = 1
B2: A[i+1] = X
B3: N u A[i]
ế
Thì i++
i: L p l
Ng
c l
ượ ạ
B4: N u i < N Thì Tìm th y ph n t
ế
B5: Ngu c l
ợ ạ
B6: K t thúc
ế 10 ậ ặ ả ế Cài đ t thu t toán c i ti n:
int LinearSearchCaiTien (int A[], int n, int X)
{ int i = 0;
A[N] = X; // ph n t m ng A tính t 0 ầ ử ả ừ while (A[i] != X) i++; if (i < i) return (i); return (-1); } 11 t nh t (ph n t đ u tiên c a m ng có
ủ ả ườ ợ ố ầ ử ầ min = 2 min = 2 Tr nào c a ầ ử ủ ấ
ị max = 2 ng h p t
giá tr = X)
ị
S phép gán G
ố
S phép so sánh S
ố
ng h p x u nh t (không có ph n t
ườ
ấ
ợ
m ng có giá tr = X)
ả
S phép gán G
S phép so sánh S max = (N + 1) + 1 avg = 2 S phép gán G
S phép so sánh S ố
ố
Trung bình
ố
ố avg = N/2 + 2 12 13 ph n t đ u tiên c a dãy (L ạ ế ầ ử ầ ừ
ủ
cu i cùng (Right = n) ố So sánh giá tr X v i giá tr ph n t gi a c a dãy A là Ph m vi tìm ki m là t
= 1) cho đ n ph n t
ầ ử
ế
ớ ị ầ ử ở ữ ủ ị N u X = A[Mid] Tìm th y
ấ
N u X < A[Mid] rút ng n ph m vi tìm ki m và Right =
ắ ế ạ A[Mid]
ế
ế
Mid –1 N u X > A[Mid] rút ng n ph m vi tìm ki m và L
ắ ế ạ i quá trình cho đ n khi tìm th y ph n t ầ ử ế ấ có giá tr
ị ế
Mid +1
ặ ạ L p l
= X 14 ả ả ớ
ấ
ế ụTìm tuy n tính (Linear Seach)
ế
ậ
Phân tích, đánh giá thu t toán:
Tr
Tìm tuy n tính (Linear Seach)
ế
Tìm tuy n tính (Linear Seach)
ế
Tìm tuy n tính (Linear Seach)
ế
ậ
ả ế
Phân tích, đánh giá thu t toán c i ti n:
Tr
ấ
Tìm tuy n tính (Linear Seach)
ế
Ví d : Tìm tuy n tính
ụ
ế
Tìm nh phân (Binary Seach)
ị
Ý t
ng:
ưở
eft
eft =
Tìm nh phân (Binary Seach)
ị
ậ
Thu t toán:
B1: Left = 1; Right = n
B2: Mid= (Left+ Right)/2
B3: so sánh A[Mid] v i X có 3 kh năng x y ra:
A[mid]=X; // tìm th y. D ng
ừ
A[mid]>X; //Ti p t c tìm trong dãy A[1]… A[mid-1]