CHƯƠNG 12 HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT CHƯƠNG 12 HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT Nội dung chính KHÁI NIỆM VÀ CÀI ĐẶT ỨNG DỤNG CHƯƠNG 12 HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT Khái niệm và cài.
CHƯƠNG 12: HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT Nội dung KHÁI NIỆM VÀ CÀI ĐẶT ỨNG DỤNG CHƯƠNG 12: HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT Khái niệm cài đặt Trong chương mở rộng KDLTT hàng ưu tiên cách thêm vào hai phép toán: phép toán hợp (Merg) phép toán giảm khoá (Decreasekey) Các phép toán cần thiết thiết kế thuật toán cho toán tối ưu, chẳng hạn thuật tốn đồ thị tìm đường ngắn (thuật tốn Dijkstra), tìm bao trùm ngắn (thuật tốn Prim) Đầu tiên cài đặt KDLTT hàng ưu tiên với phép toán hợp thứ tự phận (binary heap), sau xây dựng CTDL tự điều chỉnh, nghiêng (skew heap) KDLTT hàng ưu tiên (priority queue) ⚫Là tập hợp phần tử cặp (giá trị ưu tiên, đối tượng) ⚫ ta so sánh giá trị ưu tiên ⚫ Các phép toán ⚫ insert(k, o) xen vào hàng ưu tiên đối tượng o có giá trị ưu tiên k ⚫ findMin() tìm đối tượng có giá trị ưu tiên nhỏ Thực hàng không rỗng ⚫ removeMin() loại bỏ trả đối tượng có giá trị ưu tiên nhỏ Thực hàng không rỗng ⚫ findMinKey() tìm giá trị ưu tiên nhỏ Thực hàng không rỗng ⚫ size() ⚫ isEmpty() PHÉP TOÁN HỢP NHẤT VÀ GIẢM KHOÁ 🠶 Merge(P1, P2) Hợp hai hàng ưu tiên P1 P2 thành hàng ưu tiên trả hàng ưu tiên này, hàng ưu tiên P1 P2 bị hủy bỏ 🠶 DecreasingKey(P, x, k) Thay đổi giá trị phần tử x hàng ưu tiên P k (k giá trị nhỏ giá trị x) Phép toán hợp nhất(Merge) a = {10, 5, 6, 2} b = {12, 7, 9} {12, 10, 9, 2, 5, 7, 6} PHép tốn giảm khóa 🠶 Max – heap ban đầu DecreaseKey(0,17) Giảm khóa từ 35->17 -> Cây khơng cịn giữ tính chất max-heap Sử dụng downheap đổi chỗ nút nút thứ Sử dụng downheap lần đổi chỗ nút nút -> Thuộc tính max-heap giữ lại Cây nghiêng(Skew heap) 🠶 Một skew heap (hay self – adjusting heap) cấu trúc liệu heap triển khai dạng cây nhị phân . Skew heap có lợi khả năng hợp nhanh hơn so với nhị phân. Ngược lại với nhị phân, khơng có ràng buộc cấu trúc, khơng có đảm bảo chiều cao logarit. Chỉ cần thỏa mãn hai điều kiện: • Skew heap có thứ tự chung heap (gốc tối thiểu điều theo đệ quy con), thuộc tính cân (tất cấp phải đầy đủ ngoại trừ cấp cuối cùng) khơng cần thiết • Hoạt động Skew Heaps Merge. Chúng ta thực hoạt động khác insert, extractMin (), v.v cách sử dụng Merge Merge in skew heaps 🠶 So sánh rễ hai đống; gọi P đống với gốc nhỏ hơn, Q đống khác. Gọi R đống kết sau hợp 🠶 Gọi gốc R gốc P (gốc nhỏ hơn). Cây bên trái P trở thành bên phải R 🠶 Bây giờ, tính bên trái R cách hợp đệ quy bên phải P với Q 2 ỨNG DỤNG Mã hóa Huffman 🠶 Mã hóa Huffman kỹ thuật nén liệu để giảm kích thước mà khơng làm chi tiết nào. Nó phát triển lần David Huffman 🠶 Mã hóa Huffman thường hữu ích để nén liệu có ký tự thường xuyên xuất Mã hóa Huffman Thuật tốn mã hóa Huffman 🠶 Tạo hàng đợi ưu tiên Q bao gồm ký tự 🠶 Sắp xếp sau theo thứ tự tăng dần tần số chúng 🠶 Cho tất ký tự nhất: tạo newNode 🠶 Trích xuất giá trị nhỏ từ Q gán cho leftChild of newNode 🠶 Trích xuất giá trị nhỏ từ Q gán cho rightChild of newNode 🠶 Tính tổng hai giá trị nhỏ gán vào giá trị chèn newNode vào 🠶 Trả rootNode Mã hóa Huffman Cách thức hoạt động Mã hóa Huffman thực với trợ giúp bước sau: 🠶 🠶 Bước : Tính tần số ký tự chuỗi Bước : Sắp xếp ký tự theo thứ tự tăng dần Chúng lưu trữ hàng đợi ưu tiên Mã hóa Huffman 🠶 Bước 3: Làm cho ký tự nút 🠶 Bước 4: Tạo nút trống z. Gán tần số tối thiểu cho bên trái z gán tần số tối thiểu thứ hai cho bên phải z. Đặt giá trị z là tổng hai tần số tối thiểu Mã hóa Huffman 🠶 Bước 5: Xóa hai tần số tối thiểu khỏi hàng đợi và thêm tổng vào danh sách tần số 🠶 Bước 6: Chèn nút z vào 🠶 Bước 7: Lặp lại bước từ đến cho tất ký tự cịn lại Mã hóa Huffman 🠶 Bước 8: Đối với nút lá, gán cho cạnh trái cho cạnh phải Character Code A 11 B 100 C D 101 Mã hóa Huffman Ứng dụng mã hóa Huffman 🠶 Mã hóa Huffman sử dụng định dạng nén thông thường GZIP, BZIP2, PKZIP, v.v 🠶 Để truyền văn fax Cảm ơn người theo dõi ! ... CÀI ĐẶT ỨNG DỤNG CHƯƠNG 12: HÀNG ƯU TIÊN VỚI PHÉP TOÁN HỢP NHẤT Khái niệm cài đặt Trong chương mở rộng KDLTT hàng ưu tiên cách thêm vào hai phép toán: phép toán hợp (Merg) phép toán giảm khoá (Decreasekey)... P2 thành hàng ưu tiên trả hàng ưu tiên này, hàng ưu tiên P1 P2 bị hủy bỏ