SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
THUẬT TOÁN ỨNG DỤNG
Tìm kiếm và Sắp xếp
Nội dung
1. Tìm kiếm
1. Tuyến tính
2. Nhị phân
2. Sắp xếp
1. Nổi bọt / Chèn / Chọn
2. Trộn / Nhanh / Vun đống
3. Các cấu trúc dữ liệu trừu tượng
1. Stack
2. Queue
3. Heap
4. Set
5. Map
TRƯƠNG XUÂN NAM 2
Tìm kiếm
Phần 1
TRƯƠNG XUÂN NAM 3
Tìm kiếm
▪ Bài toán cơ bản nhất của máy tính
▪ Tìm thành phần trên trang màn hình
▪ Tìm tên trong danh bạ
▪ Tìm kiếm web
▪ Câu trả lời
▪ Có dữ liệu cần tìm hay không
▪ Vị trí của dữ liệu cần tìm
▪ Tùy vào dữ liệu
▪ Dữ liệu lộn xộn không có đặc trưng gì cụ thể
▪ Dữ liệu được sắp xếp
▪ Dữ liệu được tổ chức
TRƯƠNG XUÂN NAM 4
Tìm kiếm tuyến tính (linear search)
▪ Giải thuật tìm kiếm cơ bản nhất
▪ Dữ liệu lộn xộn không có tính chất gì đặc biệt
▪ Duyệt mọi phần tử từ đầu cho đến khi tìm được dữ liệu
mong muốn hoặc hết dữ liệu
▪ Có lẽ là cách giải duy nhất trong trường hợp bài toán
không có ràng buộc về dữ liệu
TRƯƠNG XUÂN NAM 5
Tìm kiếm nhị phân (binary search)
▪ Dữ liệu đã được sắp xếp (tăng dần)
▪ Chia đôi khoảng tìm kiếm, cho đến khi đủ nhỏ
TRƯƠNG XUÂN NAM 6
// tìm kiếm nhị phân, cài đặt kiểu đệ quy
int binary_search(int arr[], int l, int r, int x) {
if (r < l) return -1;
int mid = l + (r - l) / 2;
// tìm thấy ở giữa
if (arr[mid] == x) return mid;
// tìm ở nửa trước
if (arr[mid] > x)
return binary_search(arr, l, mid - 1, x);
// tìm ở nửa sau
return binary_search(arr, mid + 1, r, x);
}
Tìm kiếm nhị phân (binary search)
▪ Cài đặt kiểu vòng lặp ổn hơn kiểu đệ quy ở chỗ nào?
▪ Cài đặt dưới đây có thể cải tiến ở điểm nào
TRƯƠNG XUÂN NAM 7
// tìm kiếm nhị phân, cài đặt bằng vòng lặp
int binary_search2(int arr[], int l, int r, int x) {
while (l <= r) {
int m = l + (r - l) / 2;
if (arr[m] == x) return m;
if (arr[m] < x) l = m + 1;
else r = m - 1;
}
return -1;
}
Tìm kiếm nội suy (interpolation search)
▪ Tìm kiếm khi dữ liệu cực lớn đã được sắp xếp
▪ Cải tiến từ tìm kiếm nhị phân: vẫn chia đôi, nhưng cân
nhắc theo tương quan của dữ liệu
▪ Thích hợp với dữ liệu cực lớn và cân bằng
TRƯƠNG XUÂN NAM 8
// tìm kiếm nội suy: nhị phân thông minh hơn
int interpolation_search(int a[], int l, int r, int x) {
while (l <= r) {
int m = l + (x - a[l]) * ((r - l) / (a[r] - a[l]))
if (a[m] == x) return m;
if (a[m] < x) l = m + 1;
else r = m - 1;
}
return -1;
}
Cài đặt tìm kiếm ở thư viện STL C++
▪ Thư viện <algorithm>
▪ Tìm tuyến tính:
▪ find: tìm giá trị trong đoạn
▪ Tìm nhị phân:
▪ binary_search: kiểm tra xem có phần tử trong đoạn tăng dần
hay không
▪ lower_bound: trả về vị trí của phần tử đầu tiên không bé hơn
phần tử cần tìm
▪ upper_bound: trả về vị trí của phần tử đầu tiên lớn hơn phần
tử cần tìm
TRƯƠNG XUÂN NAM 9
Bài tập
𝐴𝑥3 + 𝐵𝑥2 + 𝐶𝑥 + 𝐷 = 0
TRƯƠNG XUÂN NAM 10
Sắp xếp
Phần 2
TRƯƠNG XUÂN NAM 11
Sắp xếp
▪ Bài toán cơ bản của lập trình máy tính
▪ Xếp tăng dần một danh sách
▪ So sánh theo các khóa
▪ Được nghiên cứu từ rất sớm, hiện vẫn có vài cải tiến
▪ Rất nhiều thuật toán đã được phát triển, mỗi thuật toán
có ưu / nhược điểm riêng
▪ Tính so sánh = thuật toán sắp xếp dựa trên việc so sánh
các phần tử với nhau
▪ Hầu hết các thuật toán sắp xếp đều thuộc loại này
▪ Một vài thuật toán đặc biệt không cần so sánh
▪ Tính thích ứng (adaptive) = thuật toán tận dụng được đặc
tính của dữ liệu, chạy nhanh hơn nếu dữ liệu đã sắp sẵn
TRƯƠNG XUÂN NAM 12
Sắp xếp
▪ Phân loại theo cách làm việc với dữ liệu:
▪ Sắp xếp tại chỗ (in-place): làm việc với chính dữ liệu sắp xếp
▪ Sắp xếp ra ngoài (out-place): đẩy kết quả ra ngoài
▪ Phân loại theo mức độ xáo trộn dữ liệu:
▪ Sắp xếp ổn định (stable): thứ tự
tương đối (trước / sau) giữa các
phần tử bằng nhau sẽ được giữ
nguyên sau khi thực hiện thuật
toán sắp xếp
▪ Sắp xếp bất ổn (unstable): thứ tự
tương đối của các phần tử bằng
nhau có thể bị xáo trộn sau khi
thực hiện thuật toán
TRƯƠNG XUÂN NAM 13
Sắp xếp nổi bọt (bubble sort)
▪ Duyệt toàn bộ danh sách: nếu hai phần tử liên tiếp không
đúng thứ tự (tăng dần) thì đổi chỗ chúng cho nhau
▪ Lặp lại bước duyệt cho đến khi không xảy ra đổi chỗ nữa
▪ Thuật toán có vẻ khá tệ, nhưng chạy tốt trong vài tình
huống đặc biệt
TRƯƠNG XUÂN NAM 14
Sắp xếp chèn (insertion sort)
▪ Giả sử phần đầu của dãy đã được sắp xếp gồm k phần tử
▪ Giá trị k luôn tồn tại, ít nhất là k = 1
▪ Lặp lại cho đến khi k = n:
▪ Lấy phần tử thứ k+1 chèn vào vị trí phù hợp của nó trong dãy
ban đầu
▪ Mở rộng dãy ban đầu thành gồm k+1 phần tử
▪ Hữu ích với những cấu trúc dữ liệu cho phép chèn nhanh
TRƯƠNG XUÂN NAM 15
Sắp xếp chọn (selection sort)
▪ Chọn phần tử nhỏ nhất, đặt vào vị trí đầu tiên
▪ Chọn phần tử nhỏ thứ hai, đặt vào vị trí thứ hai
▪ Chọn phần tử nhỏ thứ ba, đặt vào vị trí thứ ba
▪ ...
TRƯƠNG XUÂN NAM 16
Sắp xếp trộn (merge sort)
▪ Dãy có 1 phần tử thì không cần làm gì thêm
▪ Nếu dãy có từ 2 phần tử thì chia dãy làm đôi
▪ Sắp xếp từng dãy con (gọi đệ quy)
▪ Trộn hai dãy con đã sắp xếp lại làm một
TRƯƠNG XUÂN NAM 17
Sắp xếp nhanh (quick sort)
▪ Dãy độ dài 1 thì không cần sắp xếp
▪ Dãy độ dài 2 trở lên:
▪ Chọn ngẫu nhiên một giá trị M trong dãy
▪ Dồn những giá trị nhỏ hơn M về đầu dãy, cuối dãy là những giá
trị lớn hơn M
▪ Sắp xếp hai dãy con (đệ quy)
TRƯƠNG XUÂN NAM 18
Sắp xếp vun đống (heap sort)
▪ Bước 1: tạo cấu trúc “đống” (heap) từ dữ liệu đã có
▪ Heap = Dãy A (a1,...,an) mà ak > max(a2k, a2k+1)
▪ Bước 2: lần lượt lấy phần tử lớn nhất ra khỏi đống và
chuyển xuống cuối dãy
TRƯƠNG XUÂN NAM 19
Cài đặt sắp xếp ở thư viện STL C++
▪ Thư viện <algorithm>
▪ sort: sắp xếp (tăng dần) một đoạn, sử dụng introsort
▪ stable_sort: sắp xếp ổn định (tăng dần) một đoạn, sử
dụng mergesort
▪ partial_sort: sắp xếp phần đầu của đoạn theo thứ tự tăng
dần, sử dụng khi ta chỉ cần lấy vài phần tử nhỏ nhất
TRƯƠNG XUÂN NAM 20
Bài tập
▪
▪
▪
▪
▪
TRƯƠNG XUÂN NAM 21
Bài tập
▪
▪
▪
▪
▪
TRƯƠNG XUÂN NAM 22
Các cấu trúc dữ liệu trừu tượng
Phần 3
TRƯƠNG XUÂN NAM 23
Stack
▪ Ngăn xếp
▪ LIFO: last-in, first-out
▪ Thường được cài đặt dựa trên list, vector, array
▪ Thao tác cơ bản:
▪ Thêm vào (push): đặt vào cuối
▪ Lấy ra (pop): lấy ra phần tử ở cuối
▪ Đọc ở đầu (top)
▪ Lấy số phần tử (size)
▪ Kiểm tra rỗng (empty)
TRƯƠNG XUÂN NAM 24
Queue
▪ Hàng đợi
▪ FIFO: first-in, first-out
▪ Dạng hai đầu: Deque
▪ Thao tác cơ bản: enqueue / dequeue
▪ Thêm vào (push): thêm vào cuối
▪ Lấy ra (pop): lấy phần tử ở đầu
▪ Đầu (front)
▪ Cuối (back)
▪ Cỡ (size)
▪ Rỗng? (empty)
TRƯƠNG XUÂN NAM 25
Heap
▪ Đống
▪ Cấu trúc sử dụng trong heap sort
▪ Còn gọi là priority queue (hàng đợi ưu tiên)
▪ Dữ liệu tổ chức dạng heap, thứ tự giảm dần
▪ Thêm vào (push): tự đặt phần tử vào
vị trí phù hợp trong heap
▪ Lấy ra (pop): lấy phần tử lớn nhất
▪ Đầu (top)
▪ Cỡ (size)
▪ Rỗng? (empty)
TRƯƠNG XUÂN NAM 26
Set
▪ Tập hợp: các phần tử phải khác nhau
▪ Thường cài đặt trên red-black tree
▪ Phương thức: empty / size / insert / erase / clear / find
▪ Vài kiểu dữ liệu cùng loại:
▪ multiset: cho phép các phần tử có thể bằng nhau
▪ unordered_set: set nhưng sử dụng hash table
▪ unordered_multiset: sử dụng hash table và các phần tử có thể
bằng nhau
TRƯƠNG XUÂN NAM 27
Map
▪ Ánh xạ / Từ điển
▪ Phương thức: empty / size / [] / at / insert / erase / clear
/ find / count / begin / end
▪ Cho phép ánh xạ từ một khóa (key) tới giá trị (value)
▪ Vài kiểu dữ liệu cùng loại:
▪ multimap : các key có thể trùng nhau
▪ unordered_map : sử dụng hash table
▪ unordered_multimap: sử dụng hash table và các key có thể
trùng nhau
TRƯƠNG XUÂN NAM 28

Mais conteúdo relacionado

Semelhante a Thuật toán ứng dụng - Tìm kiếm và sắp xếp

Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xepquang
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xepquang
 
02 stack queue
02 stack queue02 stack queue
02 stack queuelanheo04
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxepnhà tôi
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxepHồ Lợi
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyNguyen Van Hung
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queueHồ Lợi
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Hồ Lợi
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátTráng Hà Viết
 
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...trantungminh4034
 
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptxCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptxVuDuong69
 

Semelhante a Thuật toán ứng dụng - Tìm kiếm và sắp xếp (13)

Baigiang ctdl
Baigiang ctdlBaigiang ctdl
Baigiang ctdl
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xep
 
Chuong 2 Tim Kiem N Sap Xep
Chuong 2   Tim Kiem N Sap XepChuong 2   Tim Kiem N Sap Xep
Chuong 2 Tim Kiem N Sap Xep
 
C6 stack queue
C6 stack queueC6 stack queue
C6 stack queue
 
02 stack queue
02 stack queue02 stack queue
02 stack queue
 
Bai3 timkiemsapxep
Bai3 timkiemsapxepBai3 timkiemsapxep
Bai3 timkiemsapxep
 
Bai3 timkiem sapxep
Bai3 timkiem sapxepBai3 timkiem sapxep
Bai3 timkiem sapxep
 
Cau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copyCau truc dl_va_giai_thuat_bai1[1] - copy
Cau truc dl_va_giai_thuat_bai1[1] - copy
 
Bai10 stack queue
Bai10 stack queueBai10 stack queue
Bai10 stack queue
 
Bài tập CTDL và GT 12
Bài tập CTDL và GT 12Bài tập CTDL và GT 12
Bài tập CTDL và GT 12
 
Oop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quátOop unit 09 lập trình tổng quát
Oop unit 09 lập trình tổng quát
 
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...
Danh sách liên kết là 1 cấu trúc dữ liệu được sử dụng để lưu trữ 1 tập hợp cá...
 
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptxCẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT.pptx
 

Último

BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...Nguyen Thanh Tu Collection
 
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdf
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdfNghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdf
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdfThoNguyn989738
 
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...lamluanvan.net Viết thuê luận văn
 
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtVợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtauthihaiyen2000
 
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfxemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfXem Số Mệnh
 
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...Nguyen Thanh Tu Collection
 
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜICHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜInguyendoan3122102508
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...Nguyen Thanh Tu Collection
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...Nguyen Thanh Tu Collection
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...Nguyen Thanh Tu Collection
 
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docx
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docxnghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docx
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docxThoNguyn989738
 
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docx
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docxUnit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docx
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docxabilitygeneraluse
 
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...Nguyen Thanh Tu Collection
 
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)LinhV602347
 
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...Nguyen Thanh Tu Collection
 
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...lamluanvan.net Viết thuê luận văn
 
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...lamluanvan.net Viết thuê luận văn
 
sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.TunQuc54
 

Último (20)

BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
BÀI TẬP DẠY THÊM HÓA HỌC LỚP 12 - CẢ NĂM - THEO FORM THI MỚI BGD 2025 (DÙNG C...
 
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdf
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdfNghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdf
Nghe Tay Trai Hai Ra Tien - Chris Guillebeau (1).pdf
 
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...
Đồ án tốt nghiệp “Khảo sát ý thức bảo vệ môi trường của các hộ kinh doanh ăn ...
 
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiếtVợ chồng A Phủ - Tô Hoài - phân tích chi tiết
Vợ chồng A Phủ - Tô Hoài - phân tích chi tiết
 
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdfxemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
xemsomenh.com-Bố cục của lá số tử vi như thế nào.pdf
 
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
15 ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 SỞ GIÁO...
 
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜICHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
CHƯƠNG 5. TTHCM VỀ VĂN HÓA, ĐẠO ĐỨC, CON NGƯỜI
 
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
BÀI TẬP DẠY THÊM TOÁN LỚP 12 SÁCH MỚI THEO FORM THI MỚI BGD 2025 - CHÂN TRỜI ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
 
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docx
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docxnghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docx
nghiên cứu một số kĩ thuật chiết xuất dược liệu (1).docx
 
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docx
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docxUnit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docx
Unit 1 - Luyện chuyên sâu Ngữ pháp và Bài tập tiếng Anh 6 (HS).docx
 
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...
40 ĐỀ LUYỆN THI ĐÁNH GIÁ NĂNG LỰC ĐẠI HỌC QUỐC GIA HÀ NỘI NĂM 2024 (ĐỀ 31-39)...
 
Đồ án Công Nghệ Truyền Số Liệu L3VPN MPLS
Đồ án Công Nghệ Truyền Số Liệu L3VPN MPLSĐồ án Công Nghệ Truyền Số Liệu L3VPN MPLS
Đồ án Công Nghệ Truyền Số Liệu L3VPN MPLS
 
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
Đề cương môn Xã hội Chủ nghĩa Khoa học (sơ lược)
 
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
ĐỀ THI THỬ TUYỂN SINH VÀO LỚP 10 THPT MÔN TOÁN CÁC TỈNH NĂM HỌC 2023-2024 CÓ ...
 
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...
Báo cáo thực tập tốt nghiệp Phân tích hiệu quả hoạt động huy động và cho vay ...
 
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...
Báo cáo thực tập tốt nghiệp Phân tích thực trạng hoạt động bán hàng tại Công ...
 
Talk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdfTalk Academy Presentation 2024 (ENG) MICE.pdf
Talk Academy Presentation 2024 (ENG) MICE.pdf
 
sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.sách các Bài tập kinh tế vi mô chọn lọc.
sách các Bài tập kinh tế vi mô chọn lọc.
 

Thuật toán ứng dụng - Tìm kiếm và sắp xếp

  • 1. THUẬT TOÁN ỨNG DỤNG Tìm kiếm và Sắp xếp
  • 2. Nội dung 1. Tìm kiếm 1. Tuyến tính 2. Nhị phân 2. Sắp xếp 1. Nổi bọt / Chèn / Chọn 2. Trộn / Nhanh / Vun đống 3. Các cấu trúc dữ liệu trừu tượng 1. Stack 2. Queue 3. Heap 4. Set 5. Map TRƯƠNG XUÂN NAM 2
  • 4. Tìm kiếm ▪ Bài toán cơ bản nhất của máy tính ▪ Tìm thành phần trên trang màn hình ▪ Tìm tên trong danh bạ ▪ Tìm kiếm web ▪ Câu trả lời ▪ Có dữ liệu cần tìm hay không ▪ Vị trí của dữ liệu cần tìm ▪ Tùy vào dữ liệu ▪ Dữ liệu lộn xộn không có đặc trưng gì cụ thể ▪ Dữ liệu được sắp xếp ▪ Dữ liệu được tổ chức TRƯƠNG XUÂN NAM 4
  • 5. Tìm kiếm tuyến tính (linear search) ▪ Giải thuật tìm kiếm cơ bản nhất ▪ Dữ liệu lộn xộn không có tính chất gì đặc biệt ▪ Duyệt mọi phần tử từ đầu cho đến khi tìm được dữ liệu mong muốn hoặc hết dữ liệu ▪ Có lẽ là cách giải duy nhất trong trường hợp bài toán không có ràng buộc về dữ liệu TRƯƠNG XUÂN NAM 5
  • 6. Tìm kiếm nhị phân (binary search) ▪ Dữ liệu đã được sắp xếp (tăng dần) ▪ Chia đôi khoảng tìm kiếm, cho đến khi đủ nhỏ TRƯƠNG XUÂN NAM 6 // tìm kiếm nhị phân, cài đặt kiểu đệ quy int binary_search(int arr[], int l, int r, int x) { if (r < l) return -1; int mid = l + (r - l) / 2; // tìm thấy ở giữa if (arr[mid] == x) return mid; // tìm ở nửa trước if (arr[mid] > x) return binary_search(arr, l, mid - 1, x); // tìm ở nửa sau return binary_search(arr, mid + 1, r, x); }
  • 7. Tìm kiếm nhị phân (binary search) ▪ Cài đặt kiểu vòng lặp ổn hơn kiểu đệ quy ở chỗ nào? ▪ Cài đặt dưới đây có thể cải tiến ở điểm nào TRƯƠNG XUÂN NAM 7 // tìm kiếm nhị phân, cài đặt bằng vòng lặp int binary_search2(int arr[], int l, int r, int x) { while (l <= r) { int m = l + (r - l) / 2; if (arr[m] == x) return m; if (arr[m] < x) l = m + 1; else r = m - 1; } return -1; }
  • 8. Tìm kiếm nội suy (interpolation search) ▪ Tìm kiếm khi dữ liệu cực lớn đã được sắp xếp ▪ Cải tiến từ tìm kiếm nhị phân: vẫn chia đôi, nhưng cân nhắc theo tương quan của dữ liệu ▪ Thích hợp với dữ liệu cực lớn và cân bằng TRƯƠNG XUÂN NAM 8 // tìm kiếm nội suy: nhị phân thông minh hơn int interpolation_search(int a[], int l, int r, int x) { while (l <= r) { int m = l + (x - a[l]) * ((r - l) / (a[r] - a[l])) if (a[m] == x) return m; if (a[m] < x) l = m + 1; else r = m - 1; } return -1; }
  • 9. Cài đặt tìm kiếm ở thư viện STL C++ ▪ Thư viện <algorithm> ▪ Tìm tuyến tính: ▪ find: tìm giá trị trong đoạn ▪ Tìm nhị phân: ▪ binary_search: kiểm tra xem có phần tử trong đoạn tăng dần hay không ▪ lower_bound: trả về vị trí của phần tử đầu tiên không bé hơn phần tử cần tìm ▪ upper_bound: trả về vị trí của phần tử đầu tiên lớn hơn phần tử cần tìm TRƯƠNG XUÂN NAM 9
  • 10. Bài tập 𝐴𝑥3 + 𝐵𝑥2 + 𝐶𝑥 + 𝐷 = 0 TRƯƠNG XUÂN NAM 10
  • 12. Sắp xếp ▪ Bài toán cơ bản của lập trình máy tính ▪ Xếp tăng dần một danh sách ▪ So sánh theo các khóa ▪ Được nghiên cứu từ rất sớm, hiện vẫn có vài cải tiến ▪ Rất nhiều thuật toán đã được phát triển, mỗi thuật toán có ưu / nhược điểm riêng ▪ Tính so sánh = thuật toán sắp xếp dựa trên việc so sánh các phần tử với nhau ▪ Hầu hết các thuật toán sắp xếp đều thuộc loại này ▪ Một vài thuật toán đặc biệt không cần so sánh ▪ Tính thích ứng (adaptive) = thuật toán tận dụng được đặc tính của dữ liệu, chạy nhanh hơn nếu dữ liệu đã sắp sẵn TRƯƠNG XUÂN NAM 12
  • 13. Sắp xếp ▪ Phân loại theo cách làm việc với dữ liệu: ▪ Sắp xếp tại chỗ (in-place): làm việc với chính dữ liệu sắp xếp ▪ Sắp xếp ra ngoài (out-place): đẩy kết quả ra ngoài ▪ Phân loại theo mức độ xáo trộn dữ liệu: ▪ Sắp xếp ổn định (stable): thứ tự tương đối (trước / sau) giữa các phần tử bằng nhau sẽ được giữ nguyên sau khi thực hiện thuật toán sắp xếp ▪ Sắp xếp bất ổn (unstable): thứ tự tương đối của các phần tử bằng nhau có thể bị xáo trộn sau khi thực hiện thuật toán TRƯƠNG XUÂN NAM 13
  • 14. Sắp xếp nổi bọt (bubble sort) ▪ Duyệt toàn bộ danh sách: nếu hai phần tử liên tiếp không đúng thứ tự (tăng dần) thì đổi chỗ chúng cho nhau ▪ Lặp lại bước duyệt cho đến khi không xảy ra đổi chỗ nữa ▪ Thuật toán có vẻ khá tệ, nhưng chạy tốt trong vài tình huống đặc biệt TRƯƠNG XUÂN NAM 14
  • 15. Sắp xếp chèn (insertion sort) ▪ Giả sử phần đầu của dãy đã được sắp xếp gồm k phần tử ▪ Giá trị k luôn tồn tại, ít nhất là k = 1 ▪ Lặp lại cho đến khi k = n: ▪ Lấy phần tử thứ k+1 chèn vào vị trí phù hợp của nó trong dãy ban đầu ▪ Mở rộng dãy ban đầu thành gồm k+1 phần tử ▪ Hữu ích với những cấu trúc dữ liệu cho phép chèn nhanh TRƯƠNG XUÂN NAM 15
  • 16. Sắp xếp chọn (selection sort) ▪ Chọn phần tử nhỏ nhất, đặt vào vị trí đầu tiên ▪ Chọn phần tử nhỏ thứ hai, đặt vào vị trí thứ hai ▪ Chọn phần tử nhỏ thứ ba, đặt vào vị trí thứ ba ▪ ... TRƯƠNG XUÂN NAM 16
  • 17. Sắp xếp trộn (merge sort) ▪ Dãy có 1 phần tử thì không cần làm gì thêm ▪ Nếu dãy có từ 2 phần tử thì chia dãy làm đôi ▪ Sắp xếp từng dãy con (gọi đệ quy) ▪ Trộn hai dãy con đã sắp xếp lại làm một TRƯƠNG XUÂN NAM 17
  • 18. Sắp xếp nhanh (quick sort) ▪ Dãy độ dài 1 thì không cần sắp xếp ▪ Dãy độ dài 2 trở lên: ▪ Chọn ngẫu nhiên một giá trị M trong dãy ▪ Dồn những giá trị nhỏ hơn M về đầu dãy, cuối dãy là những giá trị lớn hơn M ▪ Sắp xếp hai dãy con (đệ quy) TRƯƠNG XUÂN NAM 18
  • 19. Sắp xếp vun đống (heap sort) ▪ Bước 1: tạo cấu trúc “đống” (heap) từ dữ liệu đã có ▪ Heap = Dãy A (a1,...,an) mà ak > max(a2k, a2k+1) ▪ Bước 2: lần lượt lấy phần tử lớn nhất ra khỏi đống và chuyển xuống cuối dãy TRƯƠNG XUÂN NAM 19
  • 20. Cài đặt sắp xếp ở thư viện STL C++ ▪ Thư viện <algorithm> ▪ sort: sắp xếp (tăng dần) một đoạn, sử dụng introsort ▪ stable_sort: sắp xếp ổn định (tăng dần) một đoạn, sử dụng mergesort ▪ partial_sort: sắp xếp phần đầu của đoạn theo thứ tự tăng dần, sử dụng khi ta chỉ cần lấy vài phần tử nhỏ nhất TRƯƠNG XUÂN NAM 20
  • 23. Các cấu trúc dữ liệu trừu tượng Phần 3 TRƯƠNG XUÂN NAM 23
  • 24. Stack ▪ Ngăn xếp ▪ LIFO: last-in, first-out ▪ Thường được cài đặt dựa trên list, vector, array ▪ Thao tác cơ bản: ▪ Thêm vào (push): đặt vào cuối ▪ Lấy ra (pop): lấy ra phần tử ở cuối ▪ Đọc ở đầu (top) ▪ Lấy số phần tử (size) ▪ Kiểm tra rỗng (empty) TRƯƠNG XUÂN NAM 24
  • 25. Queue ▪ Hàng đợi ▪ FIFO: first-in, first-out ▪ Dạng hai đầu: Deque ▪ Thao tác cơ bản: enqueue / dequeue ▪ Thêm vào (push): thêm vào cuối ▪ Lấy ra (pop): lấy phần tử ở đầu ▪ Đầu (front) ▪ Cuối (back) ▪ Cỡ (size) ▪ Rỗng? (empty) TRƯƠNG XUÂN NAM 25
  • 26. Heap ▪ Đống ▪ Cấu trúc sử dụng trong heap sort ▪ Còn gọi là priority queue (hàng đợi ưu tiên) ▪ Dữ liệu tổ chức dạng heap, thứ tự giảm dần ▪ Thêm vào (push): tự đặt phần tử vào vị trí phù hợp trong heap ▪ Lấy ra (pop): lấy phần tử lớn nhất ▪ Đầu (top) ▪ Cỡ (size) ▪ Rỗng? (empty) TRƯƠNG XUÂN NAM 26
  • 27. Set ▪ Tập hợp: các phần tử phải khác nhau ▪ Thường cài đặt trên red-black tree ▪ Phương thức: empty / size / insert / erase / clear / find ▪ Vài kiểu dữ liệu cùng loại: ▪ multiset: cho phép các phần tử có thể bằng nhau ▪ unordered_set: set nhưng sử dụng hash table ▪ unordered_multiset: sử dụng hash table và các phần tử có thể bằng nhau TRƯƠNG XUÂN NAM 27
  • 28. Map ▪ Ánh xạ / Từ điển ▪ Phương thức: empty / size / [] / at / insert / erase / clear / find / count / begin / end ▪ Cho phép ánh xạ từ một khóa (key) tới giá trị (value) ▪ Vài kiểu dữ liệu cùng loại: ▪ multimap : các key có thể trùng nhau ▪ unordered_map : sử dụng hash table ▪ unordered_multimap: sử dụng hash table và các key có thể trùng nhau TRƯƠNG XUÂN NAM 28