Cấu trúc dữ liệu và giải thuật (chương 11) docx

25 292 0
Cấu trúc dữ liệu và giải thuật (chương 11) docx

Đ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

A C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) B F D E Chương 11: Cây đa phân G K H Định nghĩa Cây đa phân Cây rỗng Hoặc có node gọi gốc (root) nhiều Biểu diễn: Mỗi node gồm có nhiều nhánh Mỗi node có liên kết first_child next_sibling Dùng nhị phân ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Biểu diễn ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Biểu diễn dạng nhị phân Nhị phân: left = black right = color ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Cây từ điển: Trie ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Thiết kế Trie class Trie { public: // Add method prototypes here private: // data members Trie_node *root; }; const int num chars = 28; struct Trie_node { // data members Record *data; Trie_node *branch[num_chars]; // constructors Trie_node( ); }; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Giải thuật tìm kiếm Trie Algorithm trie_search Input: target khóa cần tìm Output: mẫu tin tìm thấy Bắt đầu tìm từ node root với ký tự target while (cịn node để tìm chưa xét hết chuỗi target) 2.1 Nhảy đến node tương ứng tùy theo ký tự từ target 2.2 Xét ký tự chuỗi target if (có node liệu khác rỗng) 3.1 return liệu node return not_present End trie_search ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Mã C++ tìm kiếm Trie Error_code Trie :: trie_search(const Key &target, Record &x) const { int position = 0; char next_char; Trie_node *location = root; while (location != NULL && (next_char = target.key_letter(position)) !=‘ ’) { location = location->branch[alphabetic order(next char)]; position++; } if (location != NULL && location->data != NULL) { x = *(location->data); return success; } else return not present; } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Giải thuật thêm vào Trie Algorithm trie_insert Input: new_entry liệu cần thêm vào Output: sau thêm vào liệu if (cây rỗng) 1.1 Thêm node vào 1.2 Kết thúc Bắt đầu từ node root ký tự khóa new_entry while (vẫn chưa xét hết chuỗi khóa new_entry) 3.1 next_char ký tự khóa 3.2 if (node vị trí next_char khơng có) //Tìm thêm node trung gian khơng có liệu vào 3.2.1 Thêm node có liệu rỗng vào 3.3 Nhảy đến node tương ứng với vị trí next_char 3.4 Xét ký tự khóa Thêm liệu vào node End trie_insert ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân Mã C++ thêm vào Trie Error_code Trie :: insert(const Record &new_entry) { Error_code result = success; if (root == NULL) root = new Trie_node; int position = 0; char next_char; Trie_node *location = root; while ((next char = new entry.key letter(position)) != ‘ ’) { int next_position = alphabetic_order(next_char); if (location->branch[next_position] == NULL) location->branch[next_position] = new Trie_node; location = location->branch[next_position]; position++; } if (location->data != NULL) result = duplicate_error; else location->data = new Record(new_entry); return result; } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 10 Đánh giá trie Tìm kiếm: Lần so sánh = chiều dài khóa Từ điển tiếng Anh 100.000 từ, chiều dài tối đa 15 ký tự: Trie: Số lần so sánh tối đa = 15 Tìm nhị phân = k*lg (100.000) = 17k (k: chiều dài trung bình từ tiếng Anh) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 11 Cây đa phân tìm kiếm Cây đa phân tìm kiếm bậc m: node có tối đa m nhánh ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 12 Cây đa phân cân (B-tree) Một B-tree bậc m đa phân tìm kiếm bậc m: Tất node mức Tất node trung gian trừ node gốc có tối đa m nhánh tối thiểu m/2 nhánh (khác rỗng) Số khóa node trung gian so với số nhánh phân chia khóa nhánh theo cách tìm kiếm Node gốc có tối đa m nhánh con, tối thiểu nhánh node gốc không node khơng có nhánh có node gốc ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 13 Ví dụ B-tree B-tree bậc ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 14 Thiết kế B-tree template class B_tree { public: // Add public methods private: // data members B_node *root; // Add private auxiliary functions here }; template struct B_node { // data members: int count; Record data[order − 1]; B_node *branch[order]; // constructor: B_node( ); }; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 15 Giải thuật tìm kiếm B-tree Algorithm search_B_tree Input: subroot gốc target khóa cần tìm Output: liệu tìm thấy if (cây rỗng) 1.1 return not_present else 2.1 Tìm target liệu subroot 2.2 if (tìm thấy) 2.2.1 return liệu tìm thấy 2.3 else //Tìm khơng thấy ngừng vị trí có khóa vừa lớn khóa cần //tìm, có liên kết đến nhánh gồm khóa nhỏ 2.3.1 Nhảy đến nhánh vị trí khơng tìm thấy 2.3.1 Call search_B_tree với nhánh End search_B_tree ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 16 Mã C++ tìm kiếm B-tree template Error_code B_tree :: recursive_search_tree (B_node *current, Record &target) { Error_code result = not_present; int position = 0; if (current != NULL) { while (position < current->count && target > current>data[position]) position++; if (position < current->count && target == current->data[position]) result = success; if (result == not_present) result =recursive_search_tree(current->branch[position], target); else target = current->data[position]; } return result; } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 17 Thêm vào B-tree ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 18 Thêm vào B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 19 Thêm vào B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 20 Thêm vào B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 21 Xóa giá trị B-tree ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 22 Xóa giá trị B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 23 Xóa giá trị B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 24 Xóa giá trị B-tree (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 11 Cây đa phân 25 ... Thông tin Chương 11 Cây đa phân Giải thuật thêm vào Trie Algorithm trie_insert Input: new_entry liệu cần thêm vào Output: sau thêm vào liệu if (cây rỗng) 1.1 Thêm node vào 1.2 Kết thúc Bắt đầu từ... //Tìm thêm node trung gian khơng có liệu vào 3.2.1 Thêm node có liệu rỗng vào 3.3 Nhảy đến node tương ứng với vị trí next_char 3.4 Xét ký tự khóa Thêm liệu vào node End trie_insert ĐH Bách Khoa... đa phân 15 Giải thuật tìm kiếm B-tree Algorithm search_B_tree Input: subroot gốc target khóa cần tìm Output: liệu tìm thấy if (cây rỗng) 1.1 return not_present else 2.1 Tìm target liệu subroot

Ngày đăng: 13/07/2014, 21:20

Từ khóa liên quan

Mục lục

  • CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040)

  • Định nghĩa

  • Biểu diễn

  • Biểu diễn dạng nhị phân

  • Cây từ điển: Trie

  • Thiết kế Trie

  • Giải thuật tìm kiếm trên Trie

  • Mã C++ tìm kiếm trên Trie

  • Giải thuật thêm vào Trie

  • Mã C++ thêm vào Trie

  • Đánh giá trie

  • Cây đa phân tìm kiếm

  • Cây đa phân cân bằng (B-tree)

  • Ví dụ B-tree

  • Thiết kế B-tree

  • Giải thuật tìm kiếm trên B-tree

  • Mã C++ tìm kiếm trên B-tree

  • Thêm vào B-tree

  • Thêm vào B-tree (tt.)

  • Slide 20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan