Professional Documents
Culture Documents
Chuong7 Tim Kiem
Chuong7 Tim Kiem
Chương 7
Tìm kiếm
1
Khoa Hệ Thống Thông Tin Quản lý
Nội dung
Đặt vấn đề
Minion
răng sún
đâu rồi nhỉ
Đặt vấn đề
Oh My God!
Đồ đạc tùm lum
thế này làm sao
tìm thấy chìa khóa
Đặt vấn đề
Số 6 ở
đâu nhỉ?
Khái niệm
15 22 9 … 100 30
Mã giả:
➢ Bước 1: i = 0 ➔ bắt đầu từ phần tử đầu tiên của dãy
➢ Bước 2: So sánh M[i] với x, có 2 khả năng :
+ M[i] = x : Tìm thấy. Dừng
+ M[i] ≠ x : Sang Bước 3.
➢ Bước 3 : i = i+1➔ xét tiếp phần tử kế trong mảng
Nếu i >=N: Hết mảng, không tìm thấy. Dừng
Ngược lại: Lặp lại Bước 2.
for (i=0;i<N;i++)
{
if(M[i]==x)
printf (“tìm thấy tại vị trí %d”,i);
}
if (i>=N)
printf (“không tìm thấy”);
(với x là biến khoá nhập vào cho tìm kiếm )
i=0
X=9
25 20 9 5 7 4 13 17
0 1 2 3 4 5 6 7
i=1
X=9
25 20 9 5 7 4 13 17
0 1 2 3 4 5 6 7
i=2
X=9
25 20 9 5 7 4 13 17
0 1 2 3 4 5 6 7
Vậy giải thuật tìm tuyến tính có độ phức tạp tính toán
cấp n: T(N) = O(N)
➢ Nhận xét:
✓ Giải thuật tìm tuyến tính không phụ thuộc vào thứ tự
của các phần tử mảng, do vậy đây là phương pháp
tổng quát nhất để tìm kiếm trên một dãy bất kỳ.
✓ Một Giải thuật có thể được cài đặt theo nhiều cách
khác nhau, kỹ thuật cài đặt ảnh hưởng đến tốc độ
thực hiện của giải thuật.
❖ Bài tập: Cho danh sách sản phẩm gồm các thông
tin: Mã, tên, đơn giá. Hãy mô hình hóa dữ liệu và
viết các giải thuật tìm kiếm Tuần tự:
✓ Tìm sản phẩm có mã X
✓ Tìm các sản phẩm có đơn giá [A…B]
✓ Tìm các sản phẩm mà phần tên có chứa Z
Mi-1 Mi Mi+1
Mi>x Mi<x
Tìm phần tử X = 19
M
3 19
Middle=(3+5)/2=4
4 25 M[4]=25 > x= 19
5 27
➔Ta tìm phần nửa nhỏ hơn còn lại của M
(tức là từ 3→3)
Tìm phần tử X = 19
M
19 Middle=(3+3)/2=3
3
M[3]=19 = x =19
Tìm thấy X=19 ở vị trí thứ 3
Tìm X = 18
M
3 19
4 Middle=(3+5)/2=4
25
5 M[4]=25 > x= 18
27
➔Ta tìm phần nửa nhỏ hơn còn lại của M
(tức là từ 3→3)
Tìm X = 18
M
3 19 Middle=(3+3)/2=3
M[3]=19 > x= 18
➔không còn phần tử nào để so sánh.
Vậy giải thuật tìm Nhị Phân có độ phức tạp tính toán cấp n:
T(N) = O(log 2 N)