Dưới đây là bài giảng Cơ sở dữ liệu giải thuật: Bài 8 - Cây. Mời các bạn tham khảo bài giảng để hiểu rõ hơn về các khái niệm cơ bản, duyệt cây, cây nhị phân, cây tìm kiếm nhị phân. Bài giảng hữu ích với những bạn quan tâm tới lĩnh vực này.
Bài 8: Cây Giảng viên: Hồng Thị Điệp Khoa Cơng nghệ Thông tin – Đại học Công Nghệ Nguồn tham khảo chính: Cua học COEN 352 Data Structures and Algorithms tác giả Rachida Dssouli Mục tiêu học Các khái niệm Duyệt Cây nhị phân Cây tìm kiếm nhị phân diepht@vnu Các khái niệm diepht@vnu Giới thiệu • Ví dụ: tập hợp thành viên dịng họ với quan hệ cha – • Trong ngành cơng nghệ thơng tin, mơ hình trừu tượng cấu trúc phân cấp • Một bao gồm đỉnh với quan hệ cha – • Ứng dụng – Sơ đồ tổ chức – Hệ thống file – Các mơi trường lập trình diepht@vnu Computers”R”Us Sales US Europe Manufacturing International Asia Laptops R&D Desktops Canada Định nghĩa Tốn học: thơng qua đồ thị định hướng Đệ quy diepht@vnu Đồ thị định hướng • Đồ thị – mơ hình tốn học – biểu diễn tập đối tượng có quan hệ với theo cách • Một đồ thị định hướng G = (V,E) – Gồm tập hữu hạn V đỉnh tập E cung – Mỗi cung cặp có thứ tự đỉnh khác (u,v) • (u,v) (v,u) hai cung khác diepht@vnu Cây & Đồ thị định hướng • Cây đồ thị định hướng thỏa mãn tính chất sau – Có đỉnh đặc biệt gọi gốc – Mỗi đỉnh C gốc, tồn đỉnh P có cung từ P đến C Đỉnh P gọi cha đỉnh C, C P – Có đường từ gốc tới đỉnh A gốc B C mức D mức đỉnh E diepht@vnu F G mức Các thuật ngữ • • • • • Trong có đường từ đỉnh A tới đỉnh B A gọi tổ tiên B, hay B cháu A Các đỉnh cha xem anh em Các đỉnh khơng có gọi Một đỉnh A với tất cháu lập thành gốc A Cây gọi cho Độ cao đỉnh độ dài đường dài từ đỉnh tới A B E C F D G – Độ cao • • Độ cao độ cao gốc Độ sâu đỉnh độ dài đường từ gốc tới đỉnh – Độ sâu gốc diepht@vnu Các thuật ngữ (2) • Cây CTDL phân cấp: Các đỉnh phân thành mức A – Gốc mức – Mức đỉnh = mức đỉnh cha + • Cây sắp: đỉnh đỉnh sếp theo thứ thứ tự xác định B E diepht@vnu C F D G Ví dụ: Cây biểu thức * + / diepht@vnu - 10 KDLTT nhị phân BinaryTree • KDLTT nhị phân BinaryTree thừa kế KDLTT Tree • Bổ sung phương thức: – position leftChild(p) – position rightChild(p) – position sibling(p) • Các phương thức cập nhật định nghĩa theo CTDL cài đặt KDLTT nhị phân diepht@vnu 27 Cài đặt nhị phân A template class Node{ T data; Node* left; Node* right; }; Node* root; C B D E F root A G B C D E F G diepht@vnu 28 Duyệt nhị phân theo thứ tự • Mơ tả thủ tục – duyệt trái r theo thứ tự – thăm đỉnh r – duyệt phải r theo thứ tự Algorithm inOrder(v) if isInternal (v) inOrder (leftChild (v)) visit(v) if isInternal (v) inOrder (rightChild (v)) • Ứng dụng: vẽ nhị phân – x(v) = số thứ tự v kết duyệt inorder – y(v) = độ sâu v diepht@vnu 29 Cây tìm kiếm nhị phân diepht@vnu 30 Cài đặt KDLTT tập động insert remove find Bằng mảng ? ? ? Bằng mảng ? ? ? Bằng DSLK đơn ? ? ? Bằng tìm kiếm nhị phân ? ? ? diepht@vnu 31 Cài đặt KDLTT tập động insert remove find ? ? ? Bằng mảng O(N) O(N) O(logN) Bằng DSLK đơn O(N) O(N) O(N) ? ? ? Bằng mảng Bằng tìm kiếm nhị phân diepht@vnu 32 Cài đặt nhị phân • Biểu diễn đỉnh đối tượng bao gồm: – – – – ∅ Phần tử liệu Địa đỉnh cha Địa đỉnh trái Địa đỉnh phải B ∅ B A diepht@vnu A D C ∅ D ∅ E ∅ C ∅ ∅ E 33 Cây tìm kiếm nhị phân • Cây tìm kiếm nhị phân nhị phân lưu khóa (hoặc cặp khóa-giá trị) đỉnh thỏa mãn tính chất sau: • Duyệt tìm kiếm nhị phân theo thứ tự thăm khóa theo thứ tự tăng dần – Gọi u, v, w đỉnh cho u nằm trái v w nằm phải v Ta có key(u) ≤ key(v) ≤ key(w) • Các tạm thời khơng lưu liệu diepht@vnu 34 Tìm kiếm đỉnh có khóa k Algorithm TreeSearch(k, v) • Để tìm khóa k, ta lần theo đường xuất phát if T.isExternal (v) từ gốc return v • Xác định đỉnh cần thăm if k < key(v) dựa so return TreeSearch(k, T.left(v)) sánh k với khóa đỉnh else if k = key(v) return v • Nếu ta tiến tới else { k > key(v) } kết luận không thấy return TreeSearch(k, T.right(v)) khóa trả null • Ví dụ: find(4): < – gọi tới TreeSearch(4,root) diepht@vnu > = 35 Thêm đỉnh có khóa k < • Để thực insert(k, o), ta tìm khóa k (dùng TreeSearch) • Giả sử k khơng có cây, gọi w trả phép tìm kiếm • Ta thêm k vào đỉnh w phát triển w thành đỉnh • Ví dụ: insert > > w w diepht@vnu 36 Loại bỏ đỉnh có khóa k • Để thực remove(k), ta tìm khóa k • Giả sử thấy k cây, gọi v đỉnh chứa k • Nếu đỉnh v có w, ta loại bỏ v w khỏi phép toán removeExternal(w) Phép toán loại w cha • Ví dụ: remove > v w diepht@vnu < 37 Loại bỏ đỉnh có khóa k (2) • Trường hợp k lưu đỉnh v có đỉnh – ta tìm đỉnh w đứng sau v phép duyệt theo thứ tự – key(w) vào đỉnh v – ta loại đỉnh w trái z (z phải lá) phép tốn removeExternal(z) • Ví dụ: remove • Phương án khác? diepht@vnu v w z v 38 Phân tích độ phức tạp • Xét tập hợp có n phần tử cài đặt tìm kiếm nhị phân độ cao h – không gian sử dụng O(n) – hàm find, insert remove thực thời gian O(h) • Độ cao h O(n) trường hợp xấu O(log n) trường hợp tốt diepht@vnu 39 Mục tiêu học Các khái niệm Duyệt Cây nhị phân Cây tìm kiếm nhị phân diepht@vnu 40 Chuẩn bị buổi tới • Kiểm tra kì: – khơng sử dụng tài liệu • Đọc chương giáo trình (Bảng băm) diepht@vnu INT2203/w08 41 ... r • Duyệt T1, , Tk theo thứ tự trước • Cịn gọi kỹ thuật tìm kiếm theo độ sâu B E C F D G A-B-E-F-C-D-G diepht@vnu 16 Preorder Algorithm preOrder(r) visit(r) for each child s of r preOrder (s)... tự A • Duyệt trái T1 theo thứ tự • Thăm gốc r • Duyệt T2, , Tk theo thứ tự B D C E F D-B-E-A-F-C diepht@vnu 18 Inorder Algorithm inOrder(r) if isInternal (r) then inOrder (leftChild (r)) visit(r)... diepht@vnu 19 Duyệt theo thứ tự sau A • Duyệt T1, Tk theo thứ tự sau • Thăm gốc r B E C F D G E-F-B-C-G-D-A diepht@vnu 20 Postorder Algorithm postOrder(r) for each child s of r postOrder (s) visit(r)