Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 25 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
25
Dung lượng
2,26 MB
Nội dung
TIEU LUAN MOI download : skknchat123@gmail.com DAY 14 C++ With Fsoft Nhóm Sinh viên thực hiện: Lê Việt Anh Phạm Công Tuyên Nguyễn Đức Cường Hứa Ký Ngân TIEU LUAN MOI download : skknchat123@gmail.com Thuật tốn xếp • Sắp xếp (Sorting) – Là q trình tổ chức lại họ liệu theo thứ tự giảm dần tăng dần (ascending or descending order) gì? • Dữ liệu cần xếp – Số nguyên (Integers) – Xâu ký tự (Character strings) – Đối tượng (Objects) • Các loại thuật tốn xếp – Sắp xếp (internal sort) • Địi hỏi họ liệu đưa toàn vào nhớ máy tính – Sắp xếp ngồi (external sort) • Họ liệu khơng thể lúc đưa tồn vào nhớ trong, đọc vào phận từ nhớ TIEU LUAN MOI download : skknchat123@gmail.com • Các đặc trưng thuật tốn xếp: – Tại chỗ (in place): khơng gian nhớ phụ mà thuật tốn địi hỏi O(1), nghĩa bị chặn số không phụ thuộc vào độ dài dãy cần xếp – Ổn định (stable): Nếu phần tử có giá trị giữ nguyên thứ tự tương đối chúng trước xếp • Có hai phép tốn mà thuật toán xếp thường phải sử dụng: – Đổi chỗ (Swap): Thời gian thực O(1) – So sánh: Compare(a, b) trả lại true a trước b thứ tự cần xếp false trái lại TIEU LUAN MOI download : skknchat123@gmail.com Ba thuật toán xếp Sắp xếp chèn (Insertion Sort) Sắp xếp lựa chọn (Selection Sort) Sắp xếp bọt (Bubble Sort) TIEU LUAN MOI download : skknchat123@gmail.com Sắp xếp chèn (Insertion Sort) Để chèn 12, ta cần tạo chỗ cho việc dịch chuyển 36 sau 24 TIEU LUAN MOI download : skknchat123@gmail.com • Thuật tốn: – Tại bước k = 1, 2, , n, đưa phần tử thứ k mảng cho vào vị trí dãy gồm k phần tử – Kết sau bước k, k phần tử thứ tự void insertionSort(int a[], int array_size) { int i, j, last; for (i=1; i < array_size; i++) { last = a[i]; j = i; while ((j > 0) && (a[j-1] > last)) { a[j] = a[j-1]; j = j - 1; } a[j] = last; } // end for } // end of isort Giải thích: • Ở đầu lần lặp i vịng "for" ngồi, liệu từ a[0] đến a[i-1] xếp • Vịng lặp "while" tìm vị trí cho phần tử (last =a[i]) dãy gồm i phần tử TIEU LUAN MOI download : skknchat123@gmail.com 13 phép đổi chỗ: 20 phép so sánh: TIEU LUAN MOI download : skknchat123@gmail.com • Sắp xếp chèn chỗ ổn định (In place and Stable) • Phân tích thời gian tính thuật tốn • – Best Case: hốn đổi, n-1 so sánh (khi dãy đầu vào sắp) • – Worst Case: n2/2 hoán đổi so sánh (khi dãy đầu vào có thứ tự ngược lại với thứ tự cần xếp) • – Average Case: n2/4 hốn đổi so sánh • Thuật tốn có thời gian tính tình tốt tốt • Là thuật tốn xếp tốt dãy gần xếp – Nghĩa phần tử đứng vị trí gần vị trí thứ tự cần xếp TIEU LUAN MOI download : skknchat123@gmail.com Sắp xếp chọn (Selection Sort) Sắp xếp chọn (Selection Sort) • Thuật tốn – Tìm phần tử nhỏ đưa vào vị trí – Tìm phần tử nhỏ đưa vào vị trí – Tìm phần tử nhỏ đưa vào vị trí – void selectionSort(int a[], int n){ int i, j, min, temp; for (i = 0; i < n-1; i++) { = i; For (j = i+1; j < n; j++){ if (a[j] < a[min]) = j; } swap(a[i], a[min]); } } TIEU LUAN MOI download : skknchat123@gmail.com •Best case: đổi chỗ (n-1 đoạn mã), n2/2 so sánh •Worst case: n - đổi chỗ n2/2 so sánh •Average case: O(n) đổi chỗ n2/2 so sánh • Ưu điểm bật xếp chọn số phép đổi chỗ Điều có ýnghĩa việc đổi chỗ tốn TIEU LUAN MOI download : skknchat123@gmail.com Lớp map lớp map nằm thư viện map muốn sử dụng trước tiên phải #include Cú pháp khai báo: map variableName; Ví dụ Biến dictionary khai báo với cặp liệu , vậy: •key dictionary phải kiểu string - "eat" "sleep" •value dictionary phải kiểu string - "an" "ngu" Lớp map giống lớp vector, list định nghĩa hàm thành viên hỗ trợ cho việc truy xuất, lấy kích thước, constructor override, … TIEU LUAN MOI download : skknchat123@gmail.com Sắp xếp bọt - Bubble Sort • Bubble sort phương pháp xếp đơn giản thường sử dụng ví dụ minh hoạ cho giáo trình nhập mơn lập trình • Bắt đầu từ đầu dãy, thuật toán tiến hành so sánh phần tử với phần tử sau thực đổi chỗ, chúng khơng theo thứ tự Q trình lặp lại gặp lần duyệt từđầu dãy đến cuối dãy mà thực đổi chỗ (tức tất phần tử đứng vị trí) Cách làm đẩy phần tử lớnnhất xuống cuối dãy, phần tử có giá trị nhỏ dịch chuyển đầu dãy • Mặc dù thuật tốn đơn giản, thuật tốn hiệu ba thuật tốn trình bày mục Vì ngồi mục đích giảng dạy, Sắp xếp bọt sử dụng TIEU LUAN MOI download : skknchat123@gmail.com void bubbleSort(int a[], int n){ int i, j; for (i = (n-1); i >= 0; i ) { for (j = 1; j a[j]) swap(a[j-1],a[j]); } } } • Best case: đổi chỗ, n2/2 so sánh • Worst case: n2/2 đổi chỗ so sánh • Average case: n2/4 đổi chỗ n2/2 so sánh TIEU LUAN MOI download : skknchat123@gmail.com TIEU LUAN MOI download : skknchat123@gmail.com Sắp xếp trộn (Merge Sort) • Bài tốn: Cần xếp mảng A[1 n]: • Chia (Divide) – Chia dãy gồm n phần tử cần xếp thành dãy, dãy có n/2 phần tử • Trị (Conquer) – Sắp xếp dãy cách đệ qui sử dụng xếp trộn – Khi dãy phần tử trả lại phần tử • Tổ hợp (Combine) – Trộn (Merge) hai dãy xếp để thu dãy xếp gồm tất phần tử hai dãy TIEU LUAN MOI download : skknchat123@gmail.com MERGE-SORT(A, p, r) if p < r then q ← (p + r)/2 MERGE-SORT(A, p, q) MERGE-SORT(A, q + 1, r) MERGE(A, p, q, r) endif Kiểm tra điều kiện Chia (Divide) Trị (Conquer) Trị (Conquer) Tổ hợp (Combine) • Lệnh gọi thực thuật toán: MERGE-SORT(A, 1, n) TIEU LUAN MOI download : skknchat123@gmail.com • MERGE(A, p, q, r) Tính n1 n2 Sao n1 phần tử vào L[1 n1] n2 phần tử vào R[1 n2] L[n1 + 1] ← ; R[n2 + 1] ← i ← 1; j ← for k ← p to r if L[ i ] ≤ R[ j ] then A[k] ← L[ i ] i ←i + 10 else A[k] ← R[ j ] j←j+1 TIEU LUAN MOI download : skknchat123@gmail.com TIEU LUAN MOI download : skknchat123@gmail.com void merge(DataType A[], int first, int mid, int last){ DataType tempA[MAX_SIZE]; // mảng phụ int first1 = first; int last1 = mid; int first2 = mid + 1; int last2 = last; int index = first1; for (; (first1