Bài giảng Cấu trúc dữ liệu và giải thuật: Các cấu trúc dữ liệu nâng cao cung cấp cho người đọc các kiến thức: Cây nhị phân tìm kiếm cân bằng, B-Cây, bảng băm - Hash table. Mời các bạn cùng tham khảo nội dung chi tiết.
Các cấu trúc liệu nâng cao (Advanced Data Structures) 3.1 Cây nhị phân tìm kiếm cân 3.2 B-Cây 3.3 Bảng băm – Hash Table Winter 2017 123 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân tìm kiếm cân (1) Cây BST bị lệch Vì BST trở nên bị lệch ? Chi phí tìm kiếm bị lệch ? Một BST không cân Winter 2017 124 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân tìm kiếm cân (2) Cây cân chiều cao chi phí tìm kiếm tối ưu O(log2N) Winter 2017 125 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân tìm kiếm cân (3) Cần có phương pháp để trì tính cân cho BST Winter 2017 126 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân tìm kiếm cân (4) Các loại BST cân Cây AVL Cây Đỏ - Đen (Red – Black tree) Cây AA Winter 2017 127 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây AVL (1) Định nghĩa Cài đặt cấu trúc liệu Mất cân thêm/xóa node Các thuật tốn điều chỉnh Đánh giá/so sánh E M Landis G M Adelson-Velskii Winter 2017 128 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây AVL (2) Cấu trúc AVL tác giả người Liên xô: G M Adelson-Velskii E M Landis công bố năm 1962 Đây mơ hình tự cân đề xuất (self-adjusting, heightbalanced binary search tree) Winter 2017 129 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Định nghĩa AVL (1) Cây AVL: Là nhị phân tìm kiếm (BST) Mỗi nút p thỏa: chiều cao bên trái (p->left) chiều cao bên phải (p->right) chênh lệch không pTAVL: abs(hp->left - hp->right) Winter 2017 130 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Định nghĩa AVL (2) Chiều cao left, right chênh lệch không Winter 2017 131 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Định nghĩa AVL (3) Cây AVL ? Winter 2017 132 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Hàm băm (6) Ví dụ phương pháp nhân: Giả sử ta có k = 123456; m = 10000; A Winter 2017 202 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các phương pháp xử lý xung đột Phương pháp nối kết (Separate chaining) Phương pháp địa mở (Open addressing) Winter 2017 203 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp nối kết (1) Đưa tất khóa đụng độ vào slot, lưu thành linked-list Mơ hình cách xử lý đụng độ phương pháp chaining Winter 2017 204 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp nối kết (2) Phương pháp chaining – bảng T lưu trỏ linked-list Winter 2017 205 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp nối kết (3) Phương pháp chaining – bảng T lưu phần tử + trỏ linked-list Winter 2017 206 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp nối kết (4) Chi phí thao tác: Insert: chi phí xấu O(1) Search Delete: chi phí trung bình (1+α) α = n/m (load factor: số phần tử trung bình lưu trữ slot) Các cấu trúc liệu khác: Ngồi linked-list, ta áp dụng cấu trúc khác hiệu (khi tìm kiếm) như: cân (AVL, Red-Black, AA), hay mảng cấp phát động,… Winter 2017 207 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp địa mở (1) Các phần tử lưu bảng T, không dùng thêm nhớ mở rộng phương pháp nối kết Thuật tốn để thêm khóa k: Winter 2017 208 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp địa mở (2) Phương pháp Open addressing – Linear probing Winter 2017 209 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp địa mở (3) Thuật toán để tìm khóa k: Winter 2017 210 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Phương pháp địa mở (4) Tên gọi “open addressing” mang ý nghĩa địa (address) phần tử xác định “duy nhất” hash value phần tử đó, mà cịn có can thiệp phép “dị tìm (probing)” Có phương pháp dị tìm phổ biến: Phương pháp dò (Linear probing) Phương pháp dò bậc (Quadratic probing) Phương pháp băm kép (Double hashing) Winter 2017 211 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Linear probing Mô tả: h(k, i) = (h(k) + i) mod m i: thứ tự lần thử (i = 0, 1, 2,…) h(k): hàm băm m: số slot bảng băm h(k, i): địa khóa k lần thử thứ i Winter 2017 212 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Quadratic probing Mô tả: h(k, i) = (h(k) + i2) mod m i: thứ tự lần thử (i = 0,1,2,…) h(k): hàm băm m: số slot bảng băm h(k, i): địa khóa k lần thử thứ i Winter 2017 213 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Double hashing Mô tả: h(k, i) = (h(k) + i*h’(k)) mod m i: thứ tự lần thử (i = 0,1,2,…) h(k) h’(k) : hàm băm m: số slot bảng băm h(k, i): địa khóa k lần thử thứ i Winter 2017 214 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Thảo luận Hãy so sánh ưu, khuyết điểm phương pháp chaining open addressing Winter 2017 215 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Ví dụ Bài tập: Có bảng băm T, chiều dài m = 11; hàm băm h(k) = k mod m Cho dãy phần tử theo thứ tự sau: 10, 22, 31, 4, 15, 28, 17, 88, 59 Hãy trình bày kết thêm phần tử vào bảng băm, với phương pháp xử lý đụng độ: • • • • Nối kết (Chaining) Dị (Linear probing) Dò bậc (Quadratic probing) Băm kép (Double hashing), với h’(k) = + (k mod (m – 1)) Winter 2017 216 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt ... chiều cao bên trái (p->left) chiều cao bên phải (p->right) chênh lệch không pTAVL: abs(hp->left - hp->right) Winter 2017 130 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM... CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Các cấu trúc liệu nâng cao (Advanced Data Structures) 3.1 Cây nhị phân tìm kiếm cân 3.2 B-Cây 3.3 Bảng băm... CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu (1) Cấu trúc node, tree tương tự BST Thêm vào node field balance, diễn