You are on page 1of 18

CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

Mã môn học: IT003


Buổi 2

Số tiết lý thuyết: 45
Số tiết thực hành: 30
Số tiết tự học: 90

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
1
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
Chương 1. Tổng quan về CTDL & GT (tt)

Các chiến lược thiết kế giải thuật:


1.7. Chiến lược Quay lui

1.8. Chiến lược Nhánh và cận

1.9. Chiến lược Chia để trị

1.10. Chiến lược Quy hoạch động

1.11. Chiến lược Tham lam

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
2
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.7. Chiến lược Quay lui

➢ Khái niệm:
– là một chiến lược tìm kiếm lời giải đầy đủ cho các bài toán có điều
kiện ràng buộc.
– Việc quay lui là nhằm để thử từng khả năng cho đến khi tìm thấy
lời giải đúng.
– Đó là một quá trình tìm kiếm theo chiều sâu trong một tập hợp các
lời giải. Quy trình đó thường được cài đặt bằng một hàm đệ quy.
– Trong quá trình tìm kiếm, nếu gặp một hướng lựa chọn không thỏa
mãn điều kiện thì quay lui về điểm lựa chọn trước đó và thử theo
hướng khác.
– Quá trình tìm kiếm thất bại khi không còn điểm lựa chọn nào nữa.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
3
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.7. Chiến lược Quay lui (tt)
➢ Phương pháp:
✓ Sử dụng chiến lược quay lui dùng để giải bài toán liệt kê các cấu
hình. Mỗi cấu hình được xây dựng bằng cách xây dựng từng phần
tử, mỗi phần tử được chọn bằng cách thử tất cả các khả năng.
✓ Giả sử cấu hình cần liệt kê có dạng (x1,x2,...,xn).
✓ Try(i: int)
{ for (V có thể gán cho xi) do
{ <Thử cho xi = V>;
if (xi là phần tử cuối cùng trong cấu hình)
<Thông báo cấu hình tìm được>
else
{ <Ghi nhận việc cho xi nhận giá trị V (Nếu cần)>;
Try(i + 1); //Gọi đệ qui để chọn tiếp xi + 1
<Nếu cần, bỏ ghi nhận việc thử xi = V, để thử giá trị khác>;
}
}
} TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
4
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.7. Chiến lược Quay lui (tt)
➢Áp dụng:
– Bài toán 8 Hậu
– Mã đi tuần
– Trò chơi Sudoku
– Tập con có tổng cho trước trong dãy số (Subset Sum)
– Dãy con tăng dài nhất (Longest Increasing Subsequence)
– Dãy gia tốc dài nhất (2X[i] > X[i−1]+X[i+1])
– ........

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
5
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.7. Chiến lược Quay lui (tt)
➢Ví dụ: Mã đi tuần

x1 x2

x8 x3

x7 x4

x6 x5

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
6
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.8. Chiến lược Nhánh và cận

➢Khái niệm:
– là phương pháp cải tiến của phương pháp quay lui,
nhưng quyết định quay lui sẽ sớm hơn nếu cấu hình
tạo ra không tốt hơn so với cấu hình đã có.
– Bằng cách, sử dụng thêm một hàm đánh giá:
f(x1, x2,…, xk-1)
để xác định việc đi tiếp có hy vọng tìm ra lời giải hay
không?

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
7
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.8. Chiến lược Nhánh và cận (tt)
➢ Phương pháp:
Tìm (int i)
{ for ( Các giá trị j có thể gán cho x[i] ) do
{ x[i]=j;
if ( Việc thử trên hi vọng tìm ra cấu hình tốt hơn BESTCONFIG)
if ( x[i] là phần tử cuối cùng)
Cập nhật lại BESTCONFIG
else
{ Ghi nhận việc thử x[i]=j (nếu cần);
Tìm(i+1);
Bỏ ghi nhận việc thử x[i]=j (nếu cần);
}
}
}
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
8
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.8. Chiến lược Nhánh và cận (tt)

➢Áp dụng:
– Bài toán Người du lịch
– Bài toán Cái túi xách
– Bài toán phân công
– ........

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
9
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.9. Chiến lược Chia để trị

➢ Khái niệm:
Nguyên lí của chia để trị gồm hai bước:
– Bước 1 (divide): Chia bài toán lớn thành các bài
toán con nhỏ hơn
– Bước 2 (conquer): Gọi đệ quy giải các bài toán con,
sau đó dựa trên lời giải của bài toán con để giải bài
toán lớn.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
10
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.9. Chiến lược Chia để trị (tt)
➢ Phương pháp: Bài toán tính 𝑥 𝑁 (O(logN)
𝑁 𝑁
- Áp dụng phương pháp “chia để trị” : 𝑥 𝑁 = 𝑥 ∗ 𝑥 2 2
𝑁 𝑁 𝑁 2
• Nếu N chẵn: 𝑥 𝑁 = 𝑥 ∗ 𝑥 = 𝑥 2 2 2

• Nếu N lẻ 𝑥 𝑁 = 𝑥 ∗ 𝑥 𝑁−1

double FastPower(double x, unsigned short N)


{ if (!N) //N == 0
return 1;
if (N & 1) //N % 2 == 1
return x * FastPower(x, N-1);
double y = FastPower(x, N/2);
return y*y;
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
11
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.9. Chiến lược Chia để trị (tt)

➢ Áp dụng:
– Sắp xếp QuickSort // (O(NlogN)
– Tìm kiếm nhị phân //(O(logN)
– Liệt kê các phần tử khác nhau trong dãy số // (O(NlogN)
– Xác định cặp điểm gần nhất, đó là cặp điểm pi≠pj sao
cho khoảng cách giữa pi,pj là nhỏ nhất. Khoảng cách đó
được tính bởi công thức √(xi−xj)2+(yi−yj)2 // (O(NlogN)

– ………

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
12
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.10. Chiến lược Quy hoạch động

➢ Khái niệm:
- là một phương pháp “chia để trị” nhưng không sử
dụng đệ quy, mà sẽ tìm lời giải của các bài toán con
và lưu vào bộ nhớ (thường là một mảng)
- Sau đó lấy lời giải của bài toán con ở trong mảng đã
tính trước để giải bài toán lớn.
- Việc lưu lại lời giải vào bộ nhớ khiến cho ta không
phải tính lại lời giải của các bài toán con mỗi khi
cần, do đó, tiết kiệm được thời gian tính toán.

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
13
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.10. Chiến lược Quy hoạch động (tt)
➢ Phương pháp: Dãy số Fibonacci
- Thay vì dùng đệ quy có nhớ, thì dùng vòng lặp để cập nhật mảng
F[1,2,…,n], lời giải các bài toán con và lưu vào bộ nhớ (một mảng).
long Fibo(int N)
{
long FN, FN1, FN2;
FN = FN1 = FN2 = 1;
for (int i=2; i<=N; i++)
{
FN = FN1 + FN2;
FN2 = FN1;
FN1 = FN;

}
return FN;
}

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
14
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.10. Chiến lược Quy hoạch động (tt)

➢ Áp dụng:
– Dãy con tăng dài nhất
– Bài toán Người du lịch
– Chuỗi con chung dài nhất
– ……….

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
15
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.11. Chiến lược Tham lam
➢ Khái niệm:
- Chọn một khả năng tối ưu cục bộ với hy vọng sẽ dẫn đến
một lời giải tối ưu toàn cục.
- Phương pháp tham lam thường được áp dụng rộng rãi
trong các bài toán tối ưu .
-Trong một số trường hợp, không tìm được nghiệm đúng
bài toán mà chỉ là nghiệm “tốt”.
-Việc giải bài toán theo phương pháp tham lam tránh được
bùng nổ tổ hợp và khá hiệu quả

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
16
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.11. Chiến lược Tham lam (tt)

➢ Phương pháp: Bài toán tô màu


– Đầu tiên ta cố tô cho được nhiều đỉnh với màu đầu
tiên, và rồi dùng một màu mới tô các đỉnh chưa tô
sao cho tô được càng nhiều đỉnh càng tốt.
– Và quá trình này được lặp lại với những màu khác
cho đến khi mọi đỉnh đều được tô màu.
• Chọn một đỉnh chưa tô nào đó và tô nó với màu mới.
• Duyệt qua danh sách các đỉnh còn chưa tô.
• Với mỗi đỉnh chưa tô, xét xem nó có cạnh nối đến bất cứ
đỉnh nào đã được tô với màu mới không. Nếu không có
một cạnh như thế, ta tô đỉnh đó với màu mới.
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
17
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn
1.11. Chiến lược Tham lam (tt)
➢ Áp dụng:
– Bài toán xếp lịch cho các hoạt động
– Bài toán cái ba lô
– Bài toán mã Huffman
– Bài toán tô màu đồ thị
– Bài toán xếp lịch thi học kỳ
– Bài toán Người du lịch
– Tìm đường đi ngắn nhất của Dijkstra
– Cây khung nhỏ nhất của Kruskal
– ……………….
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN, KHU PHỐ 6, PHƯỜNG LINH TRUNG, QUẬN THỦ ĐỨC, TP. HỒ CHÍ MINH
18
[T] 08 3725 2002 101 | [F] 08 3725 2148 | [W] www.uit.edu.vn | [E] info@uit.edu.vn

You might also like