1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và thuật toán: Chương 5 - Nguyễn Khánh Phương

181 32 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Chương 5. Sắp xếp. Trong chương này, người học có thể hiểu được một số kiến thức cơ bản về: Sắp xếp chèn (insertion sort), sắp xếp chọn (selection sort), sắp xếp nổi bọt (bubble sort), sắp xếp trộn (merge sort), sắp xếp nhanh (quick sort), sắp xếp vun đống (heap sort).

co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phương u du o ng th an Cấu trúc liệu giải thuật cu Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Nội dung khóa học cu u du o ng th an co ng c om Chương Các khái niệm Chương Các sơ đồ thuật toán Chương Các cấu trúc liệu Chương Cây Chương Sắp xếp Chương Tìm kiếm Chương Đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt co ng c om TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG Nguyễn Khánh Phương u du o ng th an Chương Sắp xếp cu Computer Science department School of Information and Communication technology E-mail: phuongnk@soict.hust.edu.vn CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài toán xếp cu u du o ng th an co ng c om • Sắp xếp (Sorting) trình tổ chức lại họ liệu theo thứ tự giảm dần tăng dần • Dữ liệu cần xếp là: – Số nguyên/thực (integers/float) – Xâu kí tự (character strings) – … • Khóa xếp (sort key) – Là phận ghi xác định thứ tự xếp ghi họ ghi – Ta cần xếp ghi theo thứ tự khoá – Ví dụ: khóa tong = toan + ly + hoa typedef struct{ char *ma; struct{ float toan, ly, hoa, tong; } DT; }thisinh; typedef struct node{ thisinh data; struct node* next; }node; CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 • Ví dụ: c om • ng – insertion sort (sắp xếp chèn), selection sort (sắp xếp lựa chọn), bubble sort (sắp xếp bọt) an co – quick sort (sắp xếp nhanh), merge sort (sắp xếp trộn), heap sort (sắp xếp vun đống), sample sort (sắp xếp dựa mẫu), shell sort (vỏ sò) th 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ớ • Ví dụ:Poly-phase mergesort (trộn nhiều đoạn), cascade-merge (thác nước), oscillating sort (dao động) cu u du o ng • Sắp xếp song song (Parallel sort): • Bitonic sort, Batcher even-odd sort • Smooth sort, cube sort, column sort • GPU sort NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Các đặc trưng thuật tốn xếp c om • 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 20 th 10 20 30 10 cu u du o ng Trước xếp an co ng • Ổ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 Sau xếp 10 Sắp xếp ổn định thứ tự bóng có giá trị không thay đổi trước sau xếp: • Quả bóng màu xanh với giá trị 10 đứng trước bóng màu cam giá trị 10 • Tương tự với bóng xanh cam giá trị 20 10 20 20 30 NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài tốn xếp c om • Có hai phép toá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) th an co ng void swap( datatype *a, datatype *b){ datatype *temp = *a; //datatype-kiểu liệu phần tử *a = *b; *b = *temp; } cu u du o ng – 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 • Phân tích thuật tốn xếp: thơng thường, thuật toán sử dụng phép toán so sánh để xác định thứ tự hai phần tử thực đổi chỗ cần  Khi phân tích thuật toán xếp, ta cần đếm số phép toán so sánh số lần dịch chuyển phần tử (bỏ qua phép tốn khác khơng ảnh hưởng đến kết quả) NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Bài toán xếp cu u du o ng th an co ng c om • Các thuật toán sử dụng phép toán so sánh để xác định thứ tự hai phần tử gọi thuật toán sử dụng phép so sánh (Comparison-based sorting algorithm) • Nếu có thơng tin bổ sung liệu đầu vào, ví dụ như: – Các số nguyên nằm khoảng [0 k] k = O(n) – Các số thực phân bố khoảng [0, 1) ta có thuật tốn tốt thuật toán xếp dựa vào phép so sánh (Thuật tốn thời gian tuyến tính: xếp đếm (couting-sort), xếp theo số (radixsort), xếp đóng gói (bucket-sort)) NGUYỄN KHÁNH PHƯƠNG Bộ mơn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Các thuật toán xếp cu u du o ng th an co ng c om Khi so sánh thuật tốn, thơng thường quan tâm đến: • Thời gian chạy Đối với liệu lớn, thuật tốn khơng hiệu chạy chậm ứng dụng thực tế • Bộ nhớ Các thuật tốn nhanh địi hỏi đệ quy phải tạo copy liệu xử lí Với hệ thống mà nhớ có giới hạn (ví dụ embedded system), vài thuật tốn khơng thể chạy • Độ ổn định (stability) Độ ổn định định nghĩa dựa điều xảy với phần tử có giá trị giống – Đối với thuật toán xếp ổn định, phần tử với giá trị giữ nguyên thứ tự mảng trước sau xếp – Đối với thuật tốn xếp khơng ổn định, phần tử có giá trị có thứ tự NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt ng ng th an Nhiều khóa ? Các khóa phân biệt ? Nhiều dạng khóa ? Kích thước ghi lớn hay nhỏ ? Dữ liệu xếp ngẫu nhiên? du o – – – – – co Nhiều yếu tố ảnh hưởng: • Ổn định • Danh sách liên kết hay mảng • Đặc trưng liệu cần xếp: c om Tiêu chí lựa chọn giải thuật cu u Khơng thể bao phủ tất yếu tố NGUYỄN KHÁNH PHƯƠNG Bộ mơn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Heap-Extract-Max 14 10 an du o ng th Kích thước đống giảm 14 u Thực Max-Heapify(A, 1, n-1) cu max = 16 ng 10 co 14 c om 16 CuuDuongThanCong.com 10 https://fb.com/tailieudientucntt Alg: Heap-Extract-Max(A, n) co then error “heap underflow” an ng if n < c om Heap-Extract-Max max ← A[1] A[1] ← A[n] Max-Heapify(A, 1, n-1) return max // Vun lại đống cu u du o ng th Thời gian tính: O(log n) CuuDuongThanCong.com https://fb.com/tailieudientucntt Phép tốn Heap-Increase-Key cu u du o ng th an co ng c om • Chức năng: Tăng giá trị khố phần tử i đống • Thuật tốn: – Tăng khố A[i] thành giá trị – Nếu tính chất max-heap bị vi phạm: di chuyển theo đường đến gốc để tìm chỗ thích hợp cho khố bị tăng Key [i] ← 15 14 i 169 CuuDuongThanCong.com 16 10 NGUYỄN KHÁNH PHƯƠNG Bộ mơn KHMT – ĐHBK HN https://fb.com/tailieudientucntt Ví dụ: Heap-Increase-Key i 15 ng i 15 10 14 CuuDuongThanCong.com 16 du o u 14 cu i 15 10 th Key [i ] ← 15 16 co i 14 an 10 ng 14 16 c om 16 10 https://fb.com/tailieudientucntt Heap-Increase-Key Alg: Heap-Increase-Key(A, i, key) du o ng th an co ng c om if key < A[i] then error “khoá nhỏ khoá tại” A[i] ← key while i > and A[parent(i)] < A[i] hoán đổi A[i] ↔ A[parent(i)] 16 i ← parent(i) u Thời gian tính: O(log n) cu • 14 i 10 Key [i] ← 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Heap-Increase-Key (1) c om 16 ng 10 9 u cu du o ng th an co 14 10 increase to 15 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Heap-Increase-Key (2) c om ng 16 co th an 14 ng u cu du o 15 CuuDuongThanCong.com 10 10 thay 15 https://fb.com/tailieudientucntt Ví dụ: Heap-Increase-Key (3) c om ng 16 co th an 14 ng u cu du o 15 10 10 ngược lên để sửa vi phạm NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Heap-Increase-Key (4) c om ng 16 co th an 15 ng u cu du o 14 CuuDuongThanCong.com 10 10 đặt vị trí https://fb.com/tailieudientucntt • Chức năng: Chèn phần tử vào max-heap 10 – Gọi Heap-Increase-Key để tăng khoá nút thành giá trị phần tử vun lại đống du o ng 16 14 u cu - th an co – Mở rộng max-heap với nút có khố - 16 14 ng • Thuật tốn: c om Phép tốn Max-Heap-Insert 10 15 NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN CuuDuongThanCong.com https://fb.com/tailieudientucntt Ví dụ: Max-Heap-Insert Chèn giá trị 15: - Bắt đầu với - 16 c om - cu 10 u 14 du o 16 ng 15 an th 14 10 15 ng 10 co 14 Tăng khoá thành 15 Gọi Heap-Increase-Key với A[11] = 15 16 16 Vun lại đống với phần tử bổ sung 15 CuuDuongThanCong.com 10 14 https://fb.com/tailieudientucntt Max-Heap-Insert c om Alg: Max-Heap-Insert(A, key, n) ng heap-size[A] ← n + co A[n + 1] ← - an 16 th Heap-Increase-Key(A, n + 1, key) 10 cu u du o ng 14 Running time: O(log n) CuuDuongThanCong.com https://fb.com/tailieudientucntt - Tổng kết • Chúng ta thực phép tốn sau với đống: Thời gian tính c om Phép toán – Max-Heapify ng O(log n) co – Build-Max-Heap an – Heap-Sort du o – Heap-Extract-Max ng th – Max-Heap-Insert u – Heap-Increase-Key cu – Heap-Maximum CuuDuongThanCong.com O(n) O(n log n) O(log n) O(log n) O(log n) O(1) https://fb.com/tailieudientucntt Cài đặt hàng đợi có ưu tiên danh sách móc nối header cu u du o ng th an co ng c om • Priority Queues sử dụng heaps: – Tìm phần tử lớn nhất: Heap-Maximum O(1) – Lấy loại phần tử lớn nhất: Heap-Extract-Max O(log n) – Bổ sung phần tử mới: Heap-Insert O(logn) – Tăng giá trị phần tử: Heap-Increase-Key O(log n) • Priority Queues sử dụng danh sách móc nối thứ tự: – Tìm phần tử lớn nhất: O(1) – Lấy loại phần tử lớn nhất: O(1) – Bổ sung phần tử mới: O(n) – Tăng giá trị phần tử: O(n) 15 CuuDuongThanCong.com NULL https://fb.com/tailieudientucntt Worst In place Stable — O(n²) Yes Yes O(n²) Yes No O(n²) Yes Yes O(n log n) No Yes O(n log n) O(n log n) Yes No O(n²) Yes No co O(n²) Insertion sort O(n + d) th Selection sort O(n log n) Quicksort cu u du o Merge sort Heapsort an Bubble sort ng Average ng Name c om Tổng kết: Các thuật toán xếp dựa phép so sánh O(n log n) 181 CuuDuongThanCong.com NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT – ĐHBK HN https://fb.com/tailieudientucntt ... khóa học cu u du o ng th an co ng c om Chương Các khái niệm Chương Các sơ đồ thuật toán Chương Các cấu trúc liệu Chương Cây Chương Sắp xếp Chương Tìm kiếm Chương Đồ thị CuuDuongThanCong.com https://fb.com/tailieudientucntt... cho vịng lặp while tồn chương trình 2n(n-1)+n-1  Time cost: – Best case: 7(n-1) – Worst case: 5( n-1)+2n(n-1)+n-1 CuuDuongThanCong.com https://fb.com/tailieudientucntt Các thuật toán xếp cu u du... 2nd iteration 12 35 42 77 101 3rd iteration 12 35 42 77 101 4th iteration 12 35 42 77 101 5th iteration co an th ng du o u ng a[0] cu n-1 “Bubbling” tất phần tử NGUYỄN KHÁNH PHƯƠNG Bộ môn KHMT

Ngày đăng: 29/05/2021, 09:31

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN