1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Cây

26 3 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

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 3: Cây. Chương này có nội dung trình bày về: định nghĩa và khái niệm cơ bản; một số phép toán trên cây; cài đặt cây; cây nhị phân; cây tìm kiếm nhị phân; cây cân bằng;... Mời các bạn cùng tham khảo!

8/4/2020 2.2.4 Cài đặt mảng ❖Ưu điểm: ▪ Truy cập nhanh, ngẫu nhiên phần tử nhờ vào số ▪ Thao tác tìm kiếm dễ dàng ❖Nhược điểm ▪ Kích thước mảng ngơn ngữ lập trình cố định→ Hạn chế độ dài danh sách, danh sách thường xuyên thêm bớt không cố định độ dài ▪ Việc thêm bớt khó khăn phải dịch chuyển nhiều phần tử (thời gian chạy O(n)) Cấu trúc liệu giải thuật 79 CHƯƠNG 3: CÂY (9t) 3.1 ĐỊnh nghĩa khái niệm 3.2 Một số phép toán 3.3 Cài đặt 3.4 Cây nhị phân 3.5 Cây tìm kiếm nhị phân 3.6 Cây cân Chương Cây 80 40 8/4/2020 3.1 Định nghĩa khái niệm 3.1.1 Định nghĩa 3.1.2 Các khái niệm Chương Cây 81 3.1.1 Định nghĩa Cây: (Tree) ❖ Cây T , đó: V: Tập hữu hạn phần tử (nút) E: Tập hữu hạn(cung) thể mối quan hệ phân cấp quan hệ “ cha – con” Kí hiệu: T= ❖ Nút gốc (root): nút nút ❖ Cây rỗng (null tree): khơng có nút Chương Cây 82 41 8/4/2020 3.1.1 Định nghĩa Các ví dụ cấu trúc ❖Mục lục sách ❖Cấu trúc thư mục đĩa máy tính ❖Sơ đồ nhân tổ chức ❖Cây phả hệ ❖Dùng để biểu diễn biểu thức số học, chẳng hạn: ( a+b) x (c-d/e) Chương Cây 83 3.1.1 Định nghĩa x - + / c a b d Chương Cây e 84 42 8/4/2020 3.1.2 Các khái niệm ❖Số nút gọi cấp/bậc (degree) nút ▪ Nút có bậc gọi nút (leaf) ▪ Các nút nút gọi nút nhánh ( branch) ▪ Bậc cao có nút gọi bậc ❖Mức-Level: Gốc có mức 1, nút có mức i nút nút có mức i+1 ▪ Chiều cao (height) số mức lớn nút có Chương Cây 85 3.1.2 Các khái niệm ❖Cây có thứ tự: mà có xét đến thứ tự nút ▪ Con trưởng/con cực trái nút: thứ quan hệ thứ tự nút cha ▪ Em liền kề nút: nút đứng sau quan hệ thứ tự nút cha ❖Cây có nhãn: nút gán nhãn Nhãn kiểu số nguyên, kiểu ký tự hay kiểu liệu khác khác tạp ❖Rừng:Tập hợp hữu hạn phân biệt gọi rừng (forest) Chương Cây 86 43 8/4/2020 3.1.2 Các khái niệm A B E F D C G H J I K Chương Cây 87 3.2 Một số phép toán ❖Khởi tạo rỗng: void Initialize(TypeTree T); ❖Xác định nút gốc: Ref Root(TypeTree T); ❖Xác định nút cha nút: Ref Parent(TypeTree T, TypeNode V); ❖Tìm trưởng nút Ref EldestChild(TypeTree T, TypeNode V); ❖Xác định em liền kề nút: Ref NextSibling(TypeTree T,TypeNode V); ❖Duyệt cây: truy cập nút để thực xử lý →khơng sót, khơng lặp: Void Traverse(TypeTree T); Chương Cây 88 44 8/4/2020 3.3 Cài đặt 3.3.1 Cài đặt mảng 3.3.2 Cài đặt danh sách 3.3.3 Cài đặt trỏ 3.3.4 Ứng dụng Chương Cây 89 3.3.1 Cài đặt mảng ❖ Quy ước: ❖ Cho T có n nút ❖ Gán tên cho nút 0, 1, 2, , n-1 ❖ Dùng mảng chiều a để lưu trữ cách cho a[i] = j với j nút cha nút i Nếu i nút gốc ta cho a[i] = -1 nút gốc khơng có cha ❖ Nếu T có nhãn, ta dùng thêm mảng chiều L chứa nhãn cách cho L[i] = x với x nhãn nút i, khai báo a struct có ba trường: trường Parent mảng giữ số nút cha; trường Data mảng giữ nhãn nút trường MaxNode giữ số nút có Chương Cây 90 45 8/4/2020 3.3.1 Cài đặt mảng ❖Nhận xét ▪ Hàm PARENT(n,T) tốn thời gian ▪ Các hàm địi hỏi thơng tin khơng làm việc tốt (vì phải tốn vịng lặp để dị tìm), vd: tìm nút trái nút i xác định ❖Khắc phục qui ước: ▪ Đánh số theo thứ tự tăng dần bắt đầu nút gốc ▪ Nút cha đánh số trước nút ▪ Các nút nút cha đánh số từ trái sang phải →Cách lưu trữ phù hợp với mà nút khác đôi Chương Cây 91 3.3.1 Cài đặt mảng ❖Ví dụ A B D E F G C I J H A B C D E I J F G H … Nhãn nút -1 0 1 2 4 … Cha nút … Chỉ số mảng Chương Cây 92 46 8/4/2020 3.3.1 Cài đặt mảng ❖ Khai báo cấu trúc liệu #define MAXSIZE /* số tối đa mảng */ typedef DataType; typedef int Node; typedef struct { DataType Data[MAXSIZE];/* Nhãn nút */ Node Parent[MAXSIZE]; /* Cha nút */ int MaxNode; /* Số nút thực */ } Tree; Chương Cây 93 3.3.1 Cài đặt mảng ❖Cài đặt phép tốn (u cầu sv viết chương trình) Chương Cây 94 47 8/4/2020 3.3.2 Cài đặt danh sách ❖Quy ước: ▪ Mỗi nút có danh sách nút ▪ Vì số nút nút trước nên dùng danh sách liên kết ❖Khai báo cấu trúc liệu typedef struct node { DataType Item; node *next; } typedef node *childlist; childlist tree[maxsize]; ❖Ví dụ: Chương Cây 95 3.3.2 Cài đặt danh sách Chương Cây 96 48 8/4/2020 3.3.2 Cài đặt danh sách ❖Nhận xét ❖Các hàm đòi hỏi thông tin làm việc thuận lợi, hàm PARENT lại khơng làm việc tốt ❖Ví dụ: tìm nút cha nút G địi hỏi ta phải duyệt tất danh sách chứa nút Chương Cây 97 3.4 Cây nhị phân (Binary Tree) 3.4.1 Khái niệm 3.4.2 Biểu diễn thao tác 3.4.3 Ứng dụng Chương Cây 98 49 8/4/2020 3.4.1 Khái niệm ❖Cây nhị phân đầy đủ ( Complete Binary tree): nhị phân mà liệt kê nút theo trình tự từ mức thấp đến mức cao, mức theo trình tự từ trái sang phải ta dãy liên tục không khuyết nút (cây đầy đủ trái) Chương Cây 101 3.4.2 Biểu diễn phép toán ❖Biểu diễn mảng ▪ Đánh số thứ tự nút theo thứ tự “ – dưới” “trái – phải” ▪ Với nút i • nút trái 2i nút phải 2i+1 • Nút cha [i/2] Chương Cây 102 51 8/4/2020 3.4.2 Biểu diễn phép toán ❖Ví dụ A C B E D F 6 A B E C D F G G Chương Cây 103 3.4.2 Biểu diễn phép toán ❖Ưu điểm: ▪ Cấu trúc mảng tạo thuận lợi triển khai phép toán ▪ Truy cập nhanh chóng vào nút nào, chi phí truy cập đồng cho nút (từ con→cha ngược lại dễ dàng) ❖Nhược điểm: ▪ Lãng phí nhớ gầy, khuyết nhiều nút Chương Cây 104 52 8/4/2020 3.4.2 Biểu diễn phép toán ❖Biểu diễn danh sách liên kết ❖Quy ước: Mỗi nút ghi bao gồm: ▪ Trường Data lưu giá trị ▪ Trường Left chứa liên kết trỏ tới nút trái Null ▪ Trường Right chứa liên kết trỏ tới nút phải Null → Nút gốc nút danh sách móc nối, nút có trường Left Right chứa giá trị Null Chương Cây 105 3.4.2 Biểu diễn phép toán Chương Cây 106 53 8/4/2020 3.4.2 Biểu diễn phép toán ❖Khai báo cấu trúc liệu typedef struct node { int data; struct node *left; struct node *right; }node; typdef struct node *btree; Chương Cây 107 3.4.2 Biểu diễn phép toán ❖Duyệt nhị phân: thực thao tác xử lý phần liệu nút lần ❖Quy tắc duyệt: nút ‘thăm’ nút ‘thăm’ lần ❖Cách duyệt: dựa theo thứ tự duyệt nút gốc, trái phải Phép duyệt thực cách đệ quy ▪ Duyệt theo thứ tự trước (preorder traversal) ▪ Duyệt theo thứ tự (inorder traversal) ▪ Duyệt theo thứ tự sau (postorder traversal) Chương Cây 108 54 8/4/2020 3.4.2 Biểu diễn phép toán ❖Duyệt theo thứ tự trước ▪ Thăm nút → xử lý liệu ▪ Duyệt trái theo thứ tự trước ▪ Duyệt phải theo thứ tự trước Thứ tự duyệt: abdce Chương Cây 109 3.4.2 Biểu diễn phép toán ❖Duyệt theo thứ tự sau: ▪ Duyệt trái theo thứ tự ▪ Duyệt phải theo thứ tự trước ▪ Thăm nút Thứ tự duyệt: dbeca Chương Cây 110 55 8/4/2020 3.4.2 Biểu diễn phép toán ❖Duyệt theo thứ tự ▪ Duyệt trái theo thứ tự ▪ Thăm nút ▪ Duyệt phải theo thứ tự giưa Thứ tự duyệt: bdaec Chương Cây 111 3.4.2 Biểu diễn phép toán ❖Ví dụ: Chương Cây 112 56 8/4/2020 3.4.2 Biểu diễn phép toán ❖Cài đặt chương trình void firstorder(btree t){ // duyệt thứ tự trước if (t==NULL) exit(0); else { coutleft); cout

Ngày đăng: 06/07/2022, 22:05

TỪ KHÓA LIÊN QUAN