Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 83 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
83
Dung lượng
2,17 MB
Nội dung
Chương 1: Các thuật toán trên chuỗi GV: TRẦN HỮU QUỐC THƯ 1.3 Thuật toán nén chuỗi GV: TRẦN HỮU QUỐC THƯ + Trong thực tế khi biểu diễn thông tin là van bản thì máy tính thường dùng bộ mã ASCII, Unicode, … đây là các bộ mã mà độ dài dãy bít dành cho ký tự luôn là cố định + Tối ưu hoá dãy bít biểu diễn chuỗi => cho phép các dãy bít biểu diễn các ký tự là không bằng nhau về chiều dài - Làm giảm đáng kể số lượng bit biểu diễn cho cả chuỗi - Nhưng làm nảy sinh sự nhập nhằng khi giải mã 1.3Thuật toán nén chuỗi GV: TRẦN HỮU QUỐC THƯ Ví dụ: với chuỗi: “This is a book” Ký tự Dãy bit Ký tự Dãy bit T 0 I 00 H 01 S 10 T H I S 0 01 00 10 0 0 10 0 10 T T S T S 0 0 10 01 0 T T S H S Mã hoá chữ this thành 0010010 Nhập nhằng khi giải mã: 1.3 Thuật toán nén chuỗi GV: TRẦN HỮU QUỐC THƯ + Khắc phục sự nhập nhằng bằng cách: Sử dụng các bộ mã đầu ngữ trong đó dãy bit biểu diễn cho 1 ký tự này không là phần đầu (prefix) của bất kỳ dãy bit biểu diễn cho ký tự nào khác * Thuật toán xây dựng mã Huffman GV: TRẦN HỮU QUỐC THƯ Vdụ: Xét chuỗi sau: “ a fast runner need never be afraid of the dark” Thống kê tần suất xuất hiện của các ký tự trong chuỗi └┘ a b d e f h i k n o r s t u v 9 5 1 3 7 3 1 1 1 4 1 5 1 1 1 1 * Thuật toán xây dựng mã Huffman GV: TRẦN HỮU QUỐC THƯ a e i o u 1 2 3 22 o o u u 3 3 i i a a e e 6 6 4 4 10 10 Trái mã bit 0 Phải mã bit 1 0 1 0 0 0 1 1 1 K.tự Dãy bit o 00 u 01 a 100 e 101 i 11 Chương 2: Bảng băm (Hashing Table) GV: TRẦN HỮU QUỐC THƯ 2.1. Giới thiệu về bảng băm GV: TRẦN HỮU QUỐC THƯ - Là CTDL trong đó các phần tử của nó được lưu trữ sao cho việc tìm kiếm sẽ được thực hiện bằng cách truy xuất trực tiếp thông qua từ khóa Ví dụ một bảng băm đơn giản GV: TRẦN HỮU QUỐC THƯ Khóa k sẽ được lưu trữ tại vị trí k mod M (M kích thước mảng) 0 1 2 3 4 5 6 7 8 9 95 Thêm phần tử x = 95 vào mảng 95 mod 10 = 5 Ví dụ một bảng băm đơn giản GV: TRẦN HỮU QUỐC THƯ Với các giá trị: 31, 10 , 14, 93, 82, 95,79,18,27 0 1 2 3 4 5 6 7 8 9 10 31 82 93 14 95 46 27 18 79 [...]...Vấn đề nảy sinh Giả sử thêm 55 vào mảng 0 1 2 3 4 82 5 95 6 7 8 9 27 + 55 phải lưu vào vị trí 5 Tuy nhiên vị trí này đã có chứa 95 => Giải quyết đụng độ GV: TRẦN HỮU QUỐC THƯ 3 .2 Vấn đề xung đột khi xử lý bảng băm - Trong thực tế có nhiều trường hợp có nhiều hơn 2 phần tử sẽ được “băm” vào cùng 1 vị trí - Hiển nhiên phần tử được “băm” đầu tiên sẽ chiếm... GV: TRẦN HỮU QUỐC THƯ i Danh sách liên kết - Sử dụng DSLK tại mỗi vị trí lưu trữ - Nếu xảy ra xung đột thì lưu vào cuối DS tại vị trí trùng A B C D E F X Y Z 1 2 3 4 5 6 24 25 26 GV: TRẦN HỮU QUỐC THƯ i Danh sách liên kết A SEARCHING EXAMPLE 0 1 2 3 4 5 6 7 8 9 1 0 * * * * * * * * * * * A A C E R S H GV: TRẦN HỮU QUỐC THƯ code const int M = 101; //Kich thuoc bảng băm LINKLIST HashTable[M]; //bảng băm... Delete_LINKLIST(InsertTail_LINKLIST(HashTable[k],k); } GV: TRẦN HỮU QUỐC THƯ ii Dò tuyến tính -Khi xảy ra đụng độ thì chèn vào vị trí trống gần nhất - Ví dụ: chèn dãy: 5 16 7 8 2 4 6 3 13 24 vào mãng băm có 11 vị trí 0 24 1 2 3 4 5 6 7 8 9 10 2 3 4 5 16 7 8 6 13 GV: TRẦN HỮU QUỐC THƯ code const int M = 101; //Kich thuoc bảng băm int HashTable[M]; //bảng băm GV: TRẦN HỮU QUỐC THƯ Khởi tạo bảng băm void Init_HashTalbe()... kép: pos = (pos + u) % M u = Hash2 (key) GV: TRẦN HỮU QUỐC THƯ code const int M = 101; //Kich thuoc bảng băm int HashTable[M]; //bảng băm GV: TRẦN HỮU QUỐC THƯ Khởi tạo bảng băm void Init_HashTalbe() { for (int i = 0 ; i< M; ++ i) HashTalbe[i] = -1 ; } GV: TRẦN HỮU QUỐC THƯ 2 Hàm băm int Hash(int key) { return key % M } int Hash2(int key) { return (M -2) – key % (M -2) ; } GV: TRẦN HỮU QUỐC THƯ Thêm một... không gian lưu trữ GV: TRẦN HỮU QUỐC THƯ ii Sử dụng PP “Dò tuyến tính” -Ý tưởng:”Nếu có 1 khóa bị băm vào vị trí đã có phần tử thì nó sẽ được chèn vào ô trống gần nhất theo phía bên phải (hoặc trái) 0 2 3 4 21 Thêm 6, 16 1 6 18 16 Hàm băm: F(k) = k mod 5 GV: TRẦN HỮU QUỐC THƯ *Phân tích - PP này dễ thực hiện - Nếu có nhiều phần tử băm trùng nhau thì đặc tính bảng băm bị mất đi - Trong trường hợp xấu nhất... nhất GV: TRẦN HỮU QUỐC THƯ b Giải quyết xung đột GV: TRẦN HỮU QUỐC THƯ i Sử dụng danh sách liên kết (nối kết) -Ý tưởng:”Các phần tử băm vào trùng vị trí được nối vào DS nối kết” tại vị trí đó 0 1 21 Thêm 6, 16 2 3 18 4 Hàm băm: F(k) = k mod 5 6 16 GV: TRẦN HỮU QUỐC THƯ *Phân tích PP DSLK có nhiều khuyết điểm: - Khi có quá nhiều khoá vào cùng vị trí, DSLK thì tại vị trí đó sẽ rất dài => Tăng chi phí tìm... GV: TRẦN HỮU QUỐC THƯ Thêm một khoá vào bảng băm void Insert(int k) { //Xác định vị trí của khoá k int pos = Hash(key) //Kiểm tra đảm bảo vị trí pos là trống while (HashTable[pos] != -1 ){ int u = Hash2 (key); pos = (pos + u ) % M; //Kiểm tra full } HashTable[pos] = key; } GV: TRẦN HỮU QUỐC THƯ Chương 3: Cây đỏ đen GV: TRẦN HỮU QUỐC THƯ . 95,79,18 ,27 0 1 2 3 4 5 6 7 8 9 10 31 82 93 14 95 46 27 18 79 Vấn đề nảy sinh GV: TRẦN HỮU QUỐC THƯ Giả sử thêm 55 vào mảng 0 1 2 3 4 5 6 7 8 9 82 95 27 +. o u 1 2 3 2 2 o o u u 3 3 i i a a e e 6 6 4 4 10 10 Trái mã bit 0 Phải mã bit 1 0 1 0 0 0 1 1 1 K.tự Dãy bit o 00 u 01 a 100 e 101 i 11 Chương 2: Bảng