You are on page 1of 43

TÌM KIẾM VÀ SẮP XẾP

Dương Quốc Anh Nguyễn Lê Tuấn Anh Võ Quốc Huy


NỘI DUNG CHÍNH

01 03
Nhu cầu tìm kiếm, sắp xếp dữ liệu Các giải thuật tìm kiếm
trong một hệ thống thông tin

02 04
Định nghĩa bài toán tìm kiếm Bài tập
01
NHU CẦU TÌM KIẾM, SẮP XẾP DỮ LIỆU TRONG
MỘT HỆ THỐNG THÔNG TIN
CÓ THỂ BẠN ĐÃ BIẾT
• Thông thường, khi cần khai thác thông tin trong hệ
quản lý dữ liệu, thao tác tìm kiếm thường được thực
hiện nhiều nhất.

• Việc tìm kiếm nhanh hay chậm, tùy thuộc vào trật tự
của dữ liệu trên đó.

• Kết quả của việc tìm kiếm có thể là không có (không


tìm thấy) hoặc có (tìm thấy)
 Nếu có, vị trí của phần tử dữ liệu đó nằm ở đâu?
Tại sao khi tra cứu từ điển , chúng ta
có thể tìm thấy kết quả chúng ta cần
một cách nhanh chóng?
KẾT LUẬN CHUNG
● Trong 1 hệ thống thông tin, việc xây
dựng các thuật toán tìm kiếm là vô
cùng ý nghĩa, khi nó có thể giúp ta tìm
thấy dữ liệu 1 cách nhanh chóng.
● Bên cạnh các thuật toán tìm kiếm, các
thuật toán sắp xếp dữ liệu cũng góp 1
phần không nhỏ trong việc xây dựng hệ
thống thông tin.
02
Định nghĩa bài toán tìm kiếm
VÍ DỤ

- Giả sử, mỗi phần tử dữ liệu có một thành


phần khóa (Key) có kiểu dữ liệu Y nào đó (int,
float, …) và các thành phần còn lại là thông
tin (Info) liên quan đến Key.
Ví Dụ:
Struct Data {
Y Key;
InfoType Info;
};
 Khi nói tới giá trị của một phần tử dữ liệu,
chúng ta đang nói đến giá trị khóa (Key) của
phần tử dữ liệu đó.
Định nghĩa bài toán tìm kiếm
Là thuật toán giúp ta tìm ra trong 1 tập dữ
liệu đã cho một hoặc nhiều phần tử thỏa
mãn yêu cầu tìm kiếm.
03
CÁC GIẢI THUẬT TÌM KIẾM
TÌM KIẾM TUYẾN TÍNH
I. ĐỊNH NGHĨA
Tìm kiếm tuyến tính (tìm kiếm
tuần tự) là phương pháp tìm kiếm
1 phần tử cho trước trong 1 danh
sách bằng cách duyệt lần lượt
từng phần tử trong danh sách đó.
QUY TRÌNH THỰC THI

Bước 1 Bước 2 Bước 3


Bắt đầu từ phần Nếu phần tử Nếu không tìm
tử đầu tiên của đang xét bằng x thấy phần tử
mảng, duyệt với thì trả về vị trí nào khi đã duyệt
giá trị x cần tìm hết thì trả về -1
Ưu điểm
• Đơn giản, dễ sử dụng.
• Sử dụng được cho cả danh sách đã
được sắp xếp và chưa được sắp
Nhược điểm xếp.
• Tốc độ chậm nếu được sử dụng • Hiệu quả đối với danh sách có kích
cho danh sách có kích thước lớn. thước nhỏ.
TÌM KIẾM NHỊ PHÂN
I. ĐỊNH NGHĨA
Tìm kiếm nhị phân (tìm kiếm tìm
kiếm nửa khoảng) là phương
pháp tìm kiếm 1 phần tử cho
trước trong 1 danh sách bằng
cách liên tục chia khoảng tìm
kiếm thành 1 nửa.
QUY TRÌNH THỰC THI

Bước 1 Bước 2 Bước 3


Bắt đầu từ phần tử ở Nếu phần tử đang xét Nếu phần tử bé (lớn)
giữa mảng, duyệt với bằng x thì trả về vị trí hơn x thì lặp lại quy
giá trị x cần tìm trình từ bước 1 đối
với nửa mảng bên
phải (trái)
Bước 4
Trả lại giá trị -1 nếu
không tìm thấy phần
tử trong mảng
Ưu điểm
• Dễ hiểu, dễ sử dụng.
Nhược điểm • Chiếm ít bộ nhớ.
• Chỉ được sử dụng cho danh • Hiệu quả đối với danh sách có kích
sách được sắp xếp. thước lớn.
• Không phù hợp đối với danh
sách liên tục thay đổi.
ĐỘ PHỨC TẠP

Tốt nhất Xấu nhất Trung bình

Tìm kiếm tuyến tính O(1) O(N) O(N)

Tìm kiếm nhị phân O(1) O(logN) O(logN)


SO SÁNH TỐC ĐỘ THỰC THI

 Tốc độ thực thi của tìm kiếm


tuyến tính tỏ ra ưu thế hơn so
với tìm kiếm nhị phân đối với
danh sách có kích thước nhỏ.
0:50 / 2:50

#loremipsum #loremipsum

Lorem Ipsum Dolor Sit Amet - Lorem Ipsum Dolor


Sit
300 views
 Ngược lại, danh sách có kích
Lorem Ipsum Dolor
Sit Amet
SUBSCRIBE
2.0 M
thước càng lớn thì tìm kiếm nhị
phân càng tỏ ra hiệu quả hơn
tìm kiếm tuyến tính.
04
BÀI TẬP
TÌM KIẾM TUYẾN TÍNH

Cho một mảng a gồm n phần tử, viết hàm tìm


kiếm một phần tử x đã cho trong mảng a. Nếu có,
xuất địa chỉ của phần tử đó trong mảng a. Ngược
lại xuất -1.
Lưu ý: Chỉ xuất ra vị trí của giá trị đầu tiên bằng
x trong mảng a.
TÌM KIẾM TUYẾN TÍNH

Output
4

Input
5 32
12 43 23 34 32
TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

Với x=32
TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

a[0] != x (12 != 32)


TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

a[1] != x (43 != 32)


TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

a[2] != x (23 != 32)


TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

a[3] != x (34 != 32)


TÌM KIẾM TUYẾN TÍNH
i 0 1 2 3 4

a 12 43 23 34 32

a[4] == x (32 = 32)


CODE MẪU

Void LN(int n,a[],x){


for(int i=0; i<n; i++){
if(a[i]==x){
cout<<i;
break;
}
}
CODE MẪU

int main(){
int n,a[100],x;
cin>>n>>x;
for(int i=0; i<n; i++){
cin>>a[i];
}
}
TÌM KIẾM NHỊ PHÂN

Cho một mảng a gồm n phần tử đã được sắp xếp,


viết hàm đưa ra vị trí của phần tử x trong
mảng.Nếu không có xuất -1.
Lưu ý: Chỉ xuất ra 1 vị trí của x trong mảng
TÌM KIẾM NHỊ PHÂN

Output
3

Input
5 32
12 23 25 32 43
TÌM KIẾM NHỊ PHÂN
i 0 1 2 3 4

a 12 23 25 32 43

Với x=32
TÌM KIẾM NHỊ PHÂN
L R

i 0 1 2 3 4

a 12 23 25 32 43
TÌM KIẾM NHỊ PHÂN
L M R

i 0 1 2 3 4

a 12 23 25 32 43

M = (0+4)/2 = 2
TÌM KIẾM NHỊ PHÂN
L R

i 0 1 2 3 4

a 12 23 25 32 43
TÌM KIẾM NHỊ PHÂN
M

i 0 1 2 3 4

a 12 23 25 32 43

M = (3+4)/2 = 3
CODE MẪU

int binarySearch(int a[], int l, int r, int x) {

int m;
while(l <= r) {
m = (l + r) / 2;
if (a[m] == x)
return m;

if (x > a[m])
l = m + 1;
else
r = m - 1;
}
return -1;
}
CODE MẪU

int main() {
int n,a[100],x;
cin>>n>>x;
for(int i=0; i<n; i++){
cin>>a[i];
}
cout << binarySearch(a, 0, n-1, x);
}
NGUỒN THAM KHẢO
CÁC GIẢI THUẬT TÌM KIẾM:

● Linear Search vs Binary Search - GeeksforGeeks


● Thuật toán tìm kiếm nhị phân (Binary Search) - Freetuts
● Thuật toán tìm kiếm tuyến tính (Tìm kiếm tuần tự) - DNMTechs
● Linear Search and Binary Search – Scaler
● ChatGPT

HÌNH ẢNH:

● Linear Search vs Binary Search – Justin Pombrio


● Pros And Cons Of Clipart – numama.ru
● Thuật toán Linear Search – Giới thiệu chi tiết và code ví dụ trên nhiều ngôn ngữ lập trình – Cafedev
● 8 Pros and Cons of Electronic Signatures for Credit Unions – SIGNiX
● Binary Search Algorithm (Working, Algorithm & Diagram) in Data Structures | Part 1 | DSA – Simple
Snippets
THANKS!
Do you have any questions?

CREDITS: This presentation template was created by


Slidesgo, incluiding icons by Flaticon, and
infographics & images by Freepik.

You might also like