Bài giảng Cấu trúc dữ liệu và giải thuật - Các thuật toán sắp xếp - Văn Chí Nam

Tóm tắt Bài giảng Cấu trúc dữ liệu và giải thuật - Các thuật toán sắp xếp - Văn Chí Nam: ...hất ra khỏi heap: r = r – 1  Hiệu chỉnh lại phần còn lại của dãy.  Bước 3: So sánh r và l:  Nếu r > l thì lặp lại bước 2.  Ngược lại, dừng thuật toán. Cấu trúc dữ liệu và giải thuật – HCMUS 2013 17  Mã giả : HeapSort(a: Array, n: int) { TaoHeap(a,n-1); r = n-1; whi... heap 24 Cấu trúc dữ liệu và giải thuật – HCMUS 2013 3 2 6 7 8 9 15 17 1 2 3 4 5 6 7 0 2 3 6 7 8 9 15 17 1 2 3 4 5 6 7 0 2 3 6 7 8 9 15 17 Hoán vị phần tử đầu heap Mảng sau khi sắp xếp: 25 Cấu trúc dữ liệu và giải thuật – HCMUS 2013 Cấu trúc dữ liệu và...  Đánh giá giải thuật: Hiệu quả phụ thuộc vào việc chọn giá trị mốc  Tốt nhất là phần tử median.  Nếu phần tử mốc là cực đại hay cực tiểu thì việc phân hoạch không đồng đều.  Bảng tổng kết: Độ phức tạp Tốt nhất O(nlog2n) Trung bình O(nlog2n) Xấu nhất O(n2) Merge Sort Cấu...

pdf54 trang | Chia sẻ: havih72 | Lượt xem: 253 | Lượt tải: 0download
Nội dung tài liệu Bài giảng Cấu trúc dữ liệu và giải thuật - Các thuật toán sắp xếp - Văn Chí Nam, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
G i ả n g v i ê n : 
Văn Chí Nam – Nguyễn Thị Hồng Nhung – Đặng Nguyễn Đức Tiến 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
2 
Radix Sort 
Selection 
Sort 
Merge Sort 
Quick 
Sort 
Heap Sort 
Bài toán sắp xếp 
Các thuật toán sắp xếp 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
3 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
4 
 Bài toán sắp xếp: Sắp xếp là quá trình xử lý một 
danh sách các phần tử để đặt chúng theo một 
thứ tự thỏa yêu cầu cho trước 
 Ví dụ: danh sách trước khi sắp xếp: 
 {1, 25, 6, 5, 2, 37, 40} 
 Danh sách sau khi sắp xếp: 
 {1, 2, 5, 6, 25, 37, 40} 
 Thông thường, sắp xếp giúp cho việc tìm kiếm 
được nhanh hơn. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
5 
 Các phương pháp sắp xếp thông dụng: 
 Bubble Sort 
 Selection Sort 
 Insertion Sort 
Quick Sort 
Merge Sort 
Heap Sort 
 Radix Sort 
Cần tìm hiểu các phương pháp sắp xếp và lựa chọn 
phương pháp phù hợp khi sử dụng. 
Selection Sort 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
6 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
7 
 Mô phỏng cách sắp xếp tự nhiên nhất trong 
thực tế 
 Chọn phần tử nhỏ nhất và đưa về vị trí đúng là đầu dãy 
hiện hành. 
 Sau đó xem dãy hiện hành chỉ còn n-1 phần tử. 
 Lặp lại cho đến khi dãy hiện hành chỉ còn 1 phần tử. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
8 
Các bước của thuật toán: 
 Bước 1. Khởi gán i = 0. 
 Bước 2. Bước lặp: 
 2.1. Tìm a[min] nhỏ nhất trong dãy từ a[i] đến a[n-1] 
 2.2. Hoán vị a[min] và a[i] 
 Bước 3. So sánh i và n: 
Nếu i < n thì tăng i thêm 1 và lặp lại bước 2. 
Ngược lại: Dừng thuật toán. 
9 
15 2 8 7 3 6 9 17 
2 15 8 7 3 6 9 17 
2 3 8 7 15 6 9 17 
2 3 6 7 15 8 9 17 
2 3 6 7 15 8 9 17 
2 3 6 7 8 15 9 17 
2 3 6 7 8 9 15 17 
2 3 6 7 8 9 15 17 
i = 0 
i = 1 
i = 2 
i = 3 
i = 4 
i = 5 
i = 6 
i = 7 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
10 
 Đánh giá giải thuật: 
 Số phép so sánh: 
 Tại lượt i bao giờ cũng cần (n-i-1) số lần so sánh 
 Không phụ thuộc vào tình trạng dãy số ban đầu 
 Số phép so sánh = 





1
0 2
)1(
)1(
n
i
nn
in
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
11 
 Số phép gán: 
 Tốt nhất: 
Xấu nhất: 
1
0
4 4
n
i
n








1
0 2
)7(
)14(
n
i
nn
in
Heap Sort 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
12 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
13 
 Ý tưởng: khi tìm phần tử nhỏ nhất ở bước i, 
phương pháp Selection sort không tận dụng 
được các thông tin đã có nhờ vào các phép so 
sánh ở bước i-1  cần khắc phục nhược điểm 
này. 
 J. Williams đã đề xuất phương pháp sắp xếp 
Heapsort. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
14 
 Định nghĩa Heap: 
Giả sử xét trường hợp sắp xếp tăng dần, Heap được 
định nghĩa là một dãy các phần tử al, al+1,  ar thỏa: 
với mọi i thuộc [l,r] (chỉ số bắt đầu từ 0) 
 ai ≥ a2i+1 
 ai ≥ a2i+2 {(ai,a2i+1), (ai,a2i+2) là các cặp phần tử liên đới} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
15 
 Nếu al, al+1,  ar là một heap thì phần tử al (đầu 
heap) luôn là phần tử lớn nhất. 
 Mọi dãy ai, ai+1,  ar với 2i + 1 > r là heap. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
16 
 Giai đoạn 1: Hiệu chỉnh dãy ban đầu thành heap 
(bắt đầu từ phần tử giữa của dãy) 
 Giai đoạn 2: sắp xếp dựa trên heap. 
 Bước 1: đưa phần tử lớn nhất về vị trí đúng ở cuối dãy 
 Bước 2: 
 Loại bỏ phần tử lớn nhất ra khỏi heap: r = r – 1 
 Hiệu chỉnh lại phần còn lại của dãy. 
 Bước 3: So sánh r và l: 
 Nếu r > l thì lặp lại bước 2. 
 Ngược lại, dừng thuật toán. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
17 
 Mã giả : 
HeapSort(a: Array, n: int) 
{ 
 TaoHeap(a,n-1); 
 r = n-1; 
 while(r > 0) 
 { 
 HoanVi(a[0], a[r]); 
 r = r - 1; 
 HieuChinh(a,0,r); 
 } 
} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
18 
 Mã giả: 
TaoHeap (a: Array, r: int) 
{ 
 int l = r/2; 
 while(l > 0) 
 { 
 HieuChinh(a,l,r); 
 l = l - 1; 
 } 
} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
19 
 Mã giả: 
HieuChinh(a: Array, l: int, r: int) 
{ 
 i = l; j = 2*i+1; x = a[i]; 
 while(j <= r) 
 { 
 if(có đủ 2 phần tử liên đới) 
 //xác định phần tử liên đới lớn nhất 
 if(a[j] < x) //thỏa quan hệ liên đới 
 //dừng 
 else 
 //hiệu chỉnh 
 //xét khả năng hiệu chỉnh lan truyền 
 } 
} 
15 
2 8 
7 3 6 9 
17 
0 
1 2 
3 4 5 6 
7 
15 
2 8 
17 3 6 9 
7 
1 2 
3 4 5 6 
7 
15 
2 9 
17 3 6 8 
7 
1 2 
3 4 5 6 
7 
0 
0 
15 
17 9 
2 3 6 8 
7 
1 2 
3 4 5 6 
7 
0 
Lan truyền hiệu chỉnh 
20 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
15 
17 9 
7 3 6 8 
2 
1 2 
3 4 5 6 
7 
0 
17 
15 9 
7 3 6 8 
2 
1 2 
3 4 5 6 
7 
0 
2 
15 9 
7 3 6 8 
17 
1 
3 4 5 6 
7 
0 
15 
2 9 
7 3 6 8 
17 
1 2 
3 4 5 6 
7 
0 
Lan truyền hiệu chỉnh 
Hoán vị phần tử đầu heap 
2 
21 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
15 
7 9 
2 3 6 8 
17 
1 2 
3 4 5 6 
7 
0 
8 
7 9 
2 3 6 15 
17 
1 2 
3 4 5 6 
7 
0 
9 
7 8 
2 3 6 15 
17 
1 2 
3 4 5 6 
7 
0 
6 
7 8 
2 3 9 15 
17 
1 2 
3 4 5 6 
7 
0 
Hoán vị phần tử đầu heap 
Hoán vị phần tử đầu heap 
22 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
7 
6 8 
2 3 9 15 
17 
1 2 
3 4 5 6 
7 
0 8 
6 7 
2 3 9 15 
17 
1 2 
3 4 5 6 
7 
0 
3 
6 7 
2 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
6 
3 7 
2 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
Hoán vị phần tử đầu heap 
23 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
7 
3 6 
2 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
2 
3 6 
7 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
3 
2 6 
7 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
6 
2 3 
7 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
Hoán vị phần tử đầu heap 
Hoán vị phần tử đầu heap 
24 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
3 
2 6 
7 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
2 
3 6 
7 8 9 15 
17 
1 2 
3 4 5 6 
7 
0 
2 3 6 7 8 9 15 17 
Hoán vị phần tử đầu heap 
Mảng sau khi sắp xếp: 
25 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
26 
 Đánh giá giải thuật: 
Độ phức tập của giải thuật trong trường hợp xấu nhất 
là O(nlog2n) 
Quick Sort 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
27 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
28 
 Phân chia dãy cần sắp xếp thành 2 phần S1 và 
S2 dựa vào phần tử mốc p: 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
29 
 QuickSort(array[], first, last) 
Nếu (first < last) 
{ 
Chọn phần tử mốc pivot. 
Dựa vào giá trị pivot, phân hoạch dãy array thành 2 dãy 
mới S1 (first  pivotIndex-1) và S2 (pivotIndex+1last) 
QuickSort (array, first, pivotIndex-1) 
QuickSort (array, pivotIndex + 1, last) 
} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
30 
 Sử dụng thêm 2 chỉ số lastS1 và firstUnknown 
để phân hoạch. 
 Tiếp tục phân hoạch khi firstUnknown <= last. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
31 
 Khởi tạo 
 lastS1 = first 
 firstUnknown = first + 1 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
32 
 Trong khi còn phân hoạch: 
Nếu giá trị tại firstUnknown nhỏ hơn giá trị pivot 
 Chuyển sang nhóm S1 
Ngược lại 
 Chuyển sang nhóm S2 
 Kết thúc phân hoạch: 
Đưa pivot về đúng vị trí (đổi chỗ giá trị lastS1 và 
first). 
 pivotIndex = lastS1 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
33 
Đưa về nhóm S1 
Đưa về nhóm S2 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
34 
 Phân hoạch dãy số: 27, 38, 12, 39, 27, 16 
Pivot Unknown 
27 38 12 39 27 16 
Pivot S2 Unknown 
27 38 12 39 27 16 
Pivot S1 S2 Unknown 
27 12 38 39 27 16 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
35 
 Phân hoạch dãy số: 27, 38, 12, 39, 27, 16 
Pivot S1 S2 Unknown 
27 12 38 39 27 16 
Pivot S1 S2 U.K 
27 12 38 39 27 16 
Pivot S1 S2 
27 12 16 39 27 38 
S1 Pivot S2 
16 12 27 39 27 38 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
36 
 Chạy tay thuật toán Quick Sort để sắp xếp 
mảng A trong 2 trường hợp tăng dần và giảm 
dần. 
 A = {2, 9, 5, 12, 20, 15, -8, 10} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
37 
 Đánh giá giải thuật: 
Hiệu quả phụ thuộc vào việc chọn giá trị mốc 
 Tốt nhất là phần tử median. 
 Nếu phần tử mốc là cực đại hay cực tiểu thì việc phân 
hoạch không đồng đều. 
 Bảng tổng kết: 
Độ phức tạp 
Tốt nhất O(nlog2n) 
Trung bình O(nlog2n) 
Xấu nhất O(n2) 
Merge Sort 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
38 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
39 
 Thực hiện theo hướng chia để trị. 
 Do John von Neumann đề xuất năm 1945. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
40 
 Nếu dãy có chiều dài là 0 hoặc 1: đã được sắp 
xếp. 
 Ngược lại: 
 Chia dãy thành 2 dãy con (chiều dài tương đương 
nhau). 
 Sắp xếp trên từng dãy con bằng thuật toán Merge Sort. 
 Trộn 2 dãy con (đã được sắp xếp) thành một dãy mới 
đã được sắp xếp. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
41 
 Input: Dãy A và các chỉ số left, right (sắp xếp dãy A 
gồm các phần tử có chỉ số từ left đến right). 
 Output: Dãy A đã được sắp xếp 
MergeSort(A, left, right) 
{ 
if (left < right) { 
 mid = (left + right)/2; 
 MergeSort(A, left, mid); 
 MergeSort(A, mid+1, right); 
 Merge(A, left, mid, right); 
} 
} 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
42 
15 2 8 7 3 6 9 17 
15 2 8 7 3 6 9 17 
15 2 8 7 3 6 9 17 
15 2 8 7 3 6 9 17 
15 2 8 7 3 6 9 17 
15 2 8 7 3 6 9 17 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
43 
 Số lần chia các dãy con: log2n 
 Chi phí thực hiện việc trộn hai dãy con đã sắp 
xếp tỷ lệ thuận với n. 
 Chi phí của Merge Sort là O(nlog2n) 
 Thuật toán không sử dụng thông tin nào về đặc 
tính của dãy cần sắp xếp => chi phí thuật toán 
là không đổi trong mọi trường hợp 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
44 
Radix Sort 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
45 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
46 
 Không dựa vào việc so sánh các phần tử 
 Sử dụng các ‘thùng’ để nhóm các giá trị theo cơ 
số của vị trí đang xem xét. 
 Nối kết các giá trị trong ‘thùng’ để tạo thành dãy 
sắp xếp. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
48 
 Cho dãy số sau: 27, 78, 52, 39, 17, 46 
 Cơ số: 10, Số lượng ký số: 2 
 Xét ký số thứ nhất 
0 1 2 3 4 5 6 7 8 9 
17 
52 46 27 78 39 
Kết hợp lại: 52, 46, 27, 17, 78, 39 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
49 
 Xét ký số thứ 2 của: 52, 46, 27, 17, 78, 39 
0 1 2 3 4 5 6 7 8 9 
17 27 39 46 52 78 
Kết hợp dãy có thứ tự: 17, 27, 39, 46, 52, 78 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
50 
 Độ phức tạp của thuật toán: O(n) 
(Chi tiết hơn: O(k*n) với k là số lượng ký số) 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
51 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
52 
 Các thuật toán Bubble sort, Selection sort, 
Insertion sort 
 Cài đặt thuật toán đơn giản. 
 Chi phí của thuật toán cao: O(n2). 
 Heap sort được cải tiến từ Selection sort nhưng 
chi phí thuật toán thấp hơn hẳn (O(nlog2n)) 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
53 
 Các thuật toán Quick sort, Merge sort là những 
thuật toán theo chiến lược chia để trị. 
 Cài đặt thuật toán phức tạp 
 Chi phí thuật toán thấp: O(nlog2n) 
 Rất hiệu quả khi dùng danh sách liên kết. 
 Trong thực tế, Quick sort chạy nhanh hơn hẳn Merge 
sort và Heap sort. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
54 
 Người ta chứng minh O(nlog2n) là ngưỡng chặn 
dưới của các thuật toán sắp xếp dựa trên việc 
so sánh giá trị của các phần tử. 
Cấu trúc dữ liệu và giải thuật – HCMUS 2013 
55 

File đính kèm:

  • pdfbai_giang_cau_truc_du_lieu_va_giai_thuat_cac_thuat_toan_sap.pdf