Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (166.72 KB, 14 trang )
Thiết kế thuật toán
Lê Sỹ Vinh
Bộ môn Khoa Học Máy Tính – Khoa CNTT
ðại Học Công Nghệ - ðHQGHN
Email:
Chia ñể trị
(Divide and Conquer)
• Chia bài toán lớn thành các bài toán nhỏ cùng dạng với bài toán lớn nhưng
có kích thước nhỏ hơn.
• Giải quyết các bài toán nhỏ ñộc lập
• Kết hợp nghiệm của nhửng bài toán nhỏ ñể thu ñược bài toán lớn
Ví dụ: Merge sort
ðể sắp xếp một mảng A[start…end], ta chia mảng A thành 2 mảng con A1 và
A2. Sắp xếp A1 và A2, sau ñó hòa nhập chúng thành một ñể ñược mang A ñã
sắp xếp.
void MergeSort( Item A[ ], int start, int end) {void MergeSort( Item A[ ], int start, int end) {
if (start < end) {
int mid = (start + end)/2;
MergeSort ( A, start, mid );
MergeSort ( A, mid+1, end);
Merge ( A, start, mid, end);
}
}
Ví dụ: Quick sort
Tư tưởng của Quick sort: Phân chia danh sách dữ liệu cần sắp xếp ra thành
hai phần “phần bên trái” và “phần bên phải” sao cho các phần tử ở phần
bên trái nhỏ hơn hoặc bằng các phần tử ở phần bên phải. Sau khi phân chia,
tiếp tục thực hiện “quick sort trên hai phần dữ liệu trên.
Void quickSort (Item A[], int start, int end) {
if (start < end) {