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

Bài giảng Cơ sở dữ liệu giải thuật: Bài 10 - Hàng ưu tiên

45 9 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

Mục tiêu của bài giảng Cơ sở dữ liệu giải thuật: Bài 10 - Hàng ưu tiên là nhằm giúp cho các bạn biết được KDLTT hàng ưu tiên, các phương pháp cài đặt, ứng dụng xây dựng mã Huffman. Mời các bạn tham khảo bài giảng để hiểu rõ hơn về những nội dung này.

Bài 10: Hàng ưu tiên Giảng viên: Hoàng Thị Điệp Khoa Công nghệ Thông tin – Đại học Công Nghệ Mục tiêu học KDLTT hàng ưu tiên Các phương pháp cài đặt Ứng dụng: xây dựng mã Huffman diepht@vnu 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 diepht@vnu – 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() • Ứng dụng – Quản lý băng thông – Sử dụng thiết kế thuật toán (Huffman…) Minh họa diepht@vnu Phép toán Output Hàng ưu tiên insert(5,A) - {(5,A)} insert(9,C) - {(5,A), (9,C)} insert(3,B) - {(3,B), (5,A), (9,C)} insert(7,D) - {(3,B), (5,A), (7,D), (9,C)} findMin() B {(3,B), (5,A), (7,D), (9,C)} findMinKey() {(3,B), (5,A), (7,D), (9,C)} removeMin() - {(5,A), (7,D), (9,C)} size() {(5,A), (7,D), (9,C)} findMin () A {(5,A), (7,D), (9,C)} removeMin() - {(7,D), (9,C)} removeMin() - {(9,C)} removeMin() - {} removeMin() “error” {} isEmpty() true {} Wikipedia: priority queue diepht@vnu NIST’s DADS: priority queue diepht@vnu Standard Template Library diepht@vnu Mục tiêu học KDLTT hàng ưu tiên Các phương pháp cài đặt Ứng dụng: xây dựng mã Huffman diepht@vnu Các phương pháp cài đặt findMin insert removeMin Mảng ? ? ? Mảng không ? ? ? DSLK ? ? ? DSLK không ? ? ? Cây TKNP ? ? ? Cây thứ tự phận (heap) ? ? ? diepht@vnu Cài đặt hàng ưu tiên mảng Mảng Mảng khơng diepht@vnu Ví dụ Minh họa mảng Q = {(3,B), (5,A), (7,D), (9,C)} 9,C 7,D 5,A 3,B findMin() 9,C 7,D 5,A 3,B insert(8, E) 9,C 8,E 7,D 5,A 3,B removeMin() 9,C 8,E 7,D 5,A Q = {(7,D), (3,B), (9,C), (5,A)} 7,D 3,B 9,C 5,A findMin() 7,D 3,B 9,C 5,A insert(8, E) 7,D 3,B 9,C 5,A 8,E removeMin() 7,D 9,C 5,A 8,E 10 removeMin() Đỉnh cuối (5,A) (9,F) (6,Z) (15,K) (16,X) diepht@vnu (12,H) (25,J) (14,E) (7,Q) (18,W) (20,B) (11,S) 31 Độ phức tạp • Độ phức tạp không gian – Cài cấu trúc liên kết (dùng trỏ): O(n) – Cài cấu trúc vector (mảng): tỉ lệ với N (cỡ mảng) • Độ phức tạp thời gian diepht@vnu Phép toán Thời gian size, isEmpty O (1) findMin, findMinKey O (1) insert O (log n) removeMin O (log n) 32 Tổng kết findMin insert removeMin Mảng O(1) O(n) O(1) Mảng không O(n) O(1) O(n) DSLK O(1) O(n) O(1) DSLK không O(n) O(1) O(n) Cây TKNP O(h) O(h) O(h) Cây thứ tự phận (heap) O(1) O(logn) O(logn) diepht@vnu 33 Mục tiêu học KDLTT hàng ưu tiên Các phương pháp cài đặt Ứng dụng: xây dựng mã Huffman diepht@vnu 34 Nén liệu • • Giả sử cần nén tệp liệu chứa 100000 ký tự từ bảng chữ (từ a đến f) Mã độ dài giống (1) biểu diễn chữ bit (thay bit thường lệ) tỉ lệ nén = 3/8 • Mã độ dài khác (2) dùng ta biết tần suất chữ gán mã ngắn cho chữ xuất nhiều kích thước file nén: (45×1 + 13×3 + 12×3 + 16×3 + 9×4 + 5×4) × 1000 = 224 000 bits tỉ lệ nén = 0.28 diepht@vnu Chữ a b c d e f (1) Từ mã 000 001 010 011 100 101 Chữ a Tần suất (K) 45 (2) Từ mã b c d e f 13 12 16 101 100 111 1101 1100 Chú ý: khơng có mã làm tiền tố mã khác o gọi mã tiền tố (prefix code) o mục đích: phục vụ giải nén Bài toán: xây dựng mã tiền tố với tỉ lệ nén thấp o Lời giải: mã Huffman 35 Mã Huffman 100 • Biểu diễn mã tiền tố dạng nhị phân – đỉnh, nhánh trái gắn nhãn 0, nhánh bên phải gắn nhãn – ký tự lưu đỉnh – từ mã ký tự xâu bit tạo thành từ nhãn đường từ gốc tới đỉnh chứa ký tự • Thuật tốn Huffman sử dụng hàng ưu tiên để xây dựng mã tiền tố dạng nhị phân – Mã sinh gọi mã Huffman diepht@vnu 55 45 (a) 30 25 1 12 (c) 13 (b) 14 16 (d) Chữ a Tần suất (K) 45 Từ mã 0 (f) (e) b c d e f 13 12 16 101 100 111 1101 1100 36 Thuật tốn Huffman • Với ký tự xuất xâu nguồn, ta tạo đỉnh chứa ký tự – gắn với giá trị ưu tiên tần suất • Từ tập có đỉnh, bước ta kết hợp hai thành – đỉnh cha gắn với giá trị ưu tiên tổng độ ưu tiên – ta cần chọn hai nhị phân có mức ưu tiên nhỏ để kết hợp thành dùng hàng ưu tiên diepht@vnu Algorithm HuffmanCoding(S,F) Input: Bảng chữ S bảng tần suất F Output: Huffman Tạo đỉnh cho ký tự S Khởi tạo hàng ưu tiên P chứa đỉnh for i=0 to n-1 v1 P.removeMin() v2 P.removeMin() Tạo đỉnh v với v.leftChild v1 v.rightChild v2 v.f v1.f + v2.f P.insert(v) 37 45 (a) 12 (c) 13 (b) 16 (d) (f) diepht@vnu (e) 38 45 (a) 12 (c) diepht@vnu 13 (b) 14 (f) (e) 16 (d) 39 45 (a) 25 diepht@vnu 12 (c) 13 (b) 14 (f) (e) 16 (d) 40 45 (a) 30 25 diepht@vnu 1 12 (c) 13 (b) 14 16 (d) (f) (e) 41 55 45 (a) 30 25 diepht@vnu 1 12 (c) 13 (b) 14 16 (d) (f) (e) 42 100 55 45 (a) 30 25 diepht@vnu 1 12 (c) 13 (b) 14 16 (d) (f) (e) 43 Mục tiêu học KDLTT hàng ưu tiên Các phương pháp cài đặt Ứng dụng: xây dựng mã Huffman diepht@vnu 44 Chuẩn bị tới • Đọc chương 16 giáo trình (Thiết kế thuật toán) diepht@vnu 45 ... KDLTT hàng ưu tiên Các phương pháp cài đặt Ứng dụng: xây dựng mã Huffman diepht@vnu 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. .. – 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 diepht@vnu... kết hợp hai thành – đỉnh cha gắn với giá trị ưu tiên tổng độ ưu tiên – ta cần chọn hai nhị phân có mức ưu tiên nhỏ để kết hợp thành dùng hàng ưu tiên diepht@vnu Algorithm HuffmanCoding(S,F) Input:

Ngày đăng: 18/05/2021, 13:06

w