1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng cấu trúc dữ liệu và giải thuật cây nhị phân (tt)

37 8 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

Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên – Priority Queue Winter 2017 85 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân tìm kiếm (BST)  Ý nghĩa BST  Binary Search Tree ADT  Cài đặt cấu trúc liệu BST  Đánh giá/So sánh  Bài tập Winter 2017 86 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Ý nghĩa BST (1)  Tìm phần tử nhị phân ?  Thuật toán ?  Chi phí ? Winter 2017 87 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Ý nghĩa BST (2)  Điểm yếu điểm mạnh mảng ?  Điểm yếu điểm mạnh danh sách liên kết ?  Một cấu trúc liệu có điểm mạnh mảng danh sách liên kết ? Winter 2017 88 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Binary Search Tree ADT (1)  Cây nhị phân tìm kiếm là:  Một nhị phân  Mỗi node có khóa (key)  Mỗi node p thỏa: • Tất node thuộc trái có khóa nhỏ khóa p q  p->left: q->key < p->key • Tất node thuộc phải có khóa lớn khóa p q  p->right: q->key > p->key Winter 2017 89 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Binary Search Tree ADT (2) Winter 2017 90 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Binary Search Tree ADT (3) Winter 2017 91 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Binary Search Tree ADT (4)  Các thao tác bản:          Khởi tạo rỗng Xóa Thêm node Xóa node Tìm node Duyệt Kiểm tra rỗng Đếm số node Tính chiều cao Winter 2017 92 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu BST (1) template class BSTNode public: T key; BSTNode *left; BSTNode *right; { // key of node // pointer to left child // pointer to right child BSTNode() { } BSTNode(T newItem) { key = newItem; left = right = NULL; } }; // end class Winter 2017 93/203 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu BST (2) template class BINARY_SEARCH_TREE { private: BSTNode *root; // pointer to root of tree bool insertNode(BSTNode *&p, T newItem); bool removeNode(BSTNode *&p, T key); int countNode(BSTNode *p); int height(BSTNode *p); void LNR(BSTNode *p); void NLR(BSTNode *p); void LRN(BSTNode *p); public: BINARY_SEARCH_TREE(); // default constructor BINARY_SEARCH_TREE(const BINARY_SEARCH_TREE &aTree);// copy constructor ~BINARY_SEARCH_TREE(); // destructor // operations bool insert(T newItem); bool remove(T key); BSTNode*findNode(T key); bool isEmpty(); int countNode(); int height(); void preorder(); void inorder(); void postorder(); }; // end class Winter 2017 // add new node with ‘newItem’ // find and remove node with ‘key’ // find node with ‘key’ // // // // // 94 CuuDuongThanCong.com call call call call call countNode(root) height(root) NLR(root) LNR(root) LRN(root) (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Xóa node (5) Xóa key = 13 (chỉ có trái) Winter 2017 107 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Xóa node (6)  Xố node có trái: P P pCurr L L Trước xóa pCurr Sau xóa pCurr P->right = pCurr->left; delete pCurr; Winter 2017 108 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Xóa node (7) Xóa key = 15 (có con) Winter 2017 109 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Xóa node (8)  Xóa node p có con:  Thay xóa trực tiếp node p, ta (i) tìm phần tử thay cho p (gọi phần tử ptt), (ii) copy nội dung ptt sang p, (iii) xóa node ptt  Phần tử thay ptt:  Cách 1: phần tử lớn bên trái p  Cách 2: phần tử nhỏ bên phải p  phần tử ptt có tối đa Winter 2017 110 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Xóa node (9) Hai cách chọn phần tử thay cho p Winter 2017 111 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Đánh giá/So sánh (1)  So sánh BST với mảng thứ tự Danh sách liên kết ? Winter 2017 112 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Đánh giá/So sánh (2) Tiêu chí Cây BST (*) Mảng thứ tự Danh sách liên kết Chi phí tìm kiếm O(log2n) O(log2n) O(n) Chi phí thêm phần tử O(log2n) O(n) O(1) Chi phí xóa phần tử O(log2n) O(n) O(1) Bộ nhớ sử dụng cho phần tử Sizeof(key)+8 Sizeof(key) Sizeof(key)+4 (*) Xét cân Winter 2017 113 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên – Priority Queue Winter 2017 114 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Hàng đợi ưu tiên  Priority Queue ADT  Cài đặt cấu trúc liệu Winter 2017 115 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Priority Queue ADT (1)  Trong số ứng dụng thực tế, tính chất FIFO queue nhiều không phù hợp  Các ví dụ:  Sắp hàng mua vé: ưu tiên người già, phụ nữ có thai,…  Trạm thu phí: ưu tiên xe cứu thương, xe cảnh sát, xe cứu hỏa  Thang máy: yêu cầu xảy sau thực trước (nếu hướng đường thang di chuyển)  tối ưu hiệu suất  Process P2 HĐH thực trước process P1 có vai trị quan trọng  …  cần cấu trúc hàng đợi (có độ) ưu tiên Winter 2017 116 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Priority Queue ADT (2)  Hàng đợi ưu tiên  Là tập hợp nhiều phần tử, thao tác FIFO  Mỗi phần tử có “key”, độ ưu tiên phần tử  Khi thêm hay xóa phần tử, queue điều chỉnh lại cho phần tử có độ ưu tiên cao đầu queue  Các thao tác bản:  Khởi tạo hàng đợi rỗng  Xóa hàng đợi  Thêm phần tử vào queue hiệu chỉnh vị trí (insert)  Lấy phần tử nhỏ (hay lớn nhất) xóa (deleteMin)  Lấy phần tử nhỏ (hay lớn nhất) khơng xóa  Kiểm tra queue rỗng Winter 2017 117 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)  Sử dụng mảng thứ tự  deleteMin: O(1)  insert: O(n)  Sử dụng BST (*)  deleteMin: O(log2n)  insert: O(log2n)  Sử dụng Heap (min heap/max heap)  deleteMin: O(log2n)  insert: O(log2n) Winter 2017 118 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu (2) Bước 1: chèn vào cuối heap Bước 2: hiệu chỉnh ngược lên Insert: thêm hiệu chỉnh vị trí key=14 Winter 2017 119 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu (3) Bước 1: lấy phần tử đầu heap Bước 2: thay phần tử đầu heap phần tử cuối heap Bước 3: heapify phần tử đầu Winter 2017 120 CuuDuongThanCong.com deleteMin: xóa phần tử đầu heap Heapify (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cài đặt cấu trúc liệu (4) template class PRIORITY_QUEUE { private: T *items; // array of queue items int rear; int maxSize; // maximum size of queue void heapify(int i); // adjust heap at position “i” public: PRIORITY_QUEUE(int size); // create queue with // ‘size’ items PRIORITY_QUEUE(const PRIORITY_QUEUE &aQueue); ~PRIORITY_QUEUE(); // destructor // operations bool isEmpty(); bool insert(T newItem); bool deleteMin(T &item); bool minValue(T &item); }; // end class Winter 2017 121 CuuDuongThanCong.com (C) Nguyen Tri Tuan - Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt ... Truong DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Cây nhị phân  Các khái niệm thuật ngữ  Cài đặt cấu trúc liệu  Duyệt  Cây nhị phân tìm kiếm – Binary Search Tree  Hàng đợi ưu tiên –.. .Cây nhị phân tìm kiếm (BST)  Ý nghĩa BST  Binary Search Tree ADT  Cài đặt cấu trúc liệu BST  Đánh giá/So sánh  Bài tập Winter 2017 86 CuuDuongThanCong.com... DH.KHTN DHQG-HCM https://fb.com/tailieudientucntt Binary Search Tree ADT (1)  Cây nhị phân tìm kiếm là:  Một nhị phân  Mỗi node có khóa (key)  Mỗi node p thỏa: • Tất node thuộc trái có khóa

Ngày đăng: 26/12/2021, 17:20

Xem thêm: