cấu trúc dữ liệu va giải thuật đỗ bích diệp ch5 cấu trúc cay sinhvienzone com

30 61 0
cấu trúc dữ liệu va giải thuật đỗ bích diệp ch5 cấu trúc cay sinhvienzone com

Đ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ấu trúc liệu Giải thuật Cấu trúc liệu Giải thuật Chương IV: Cấu trúc Cây Cấu trúc Cây z Nội dung Các khái niệm Cây tổng quát 3 Cây nhị phân ADT Cây Biểu diễn tổng quát Duyệt tổng quát Định nghĩa tính chất Duyệt nhị phân Biểu diễn nhị phân Ứng dụng cấu trúc cho biểu thức Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Định nghĩa Cây − Cây cấu trúc phi tuyến, thiết lập tập hữu hạn “nút” – – – – Tồn nút đặc biệt gọi “gốc” (root) Giữa nút tồn quan hệ phân cấp hay gọi quan hệ cha Một nút trừ nút gốc có cha Một nút có từ đến n Đỗ Bích Diệp - Khoa CNTT Định nghĩa Cây z Định nghĩa đệ quy Cây – – Một nút tạo thành Nếu có n T1, T2, …, Tn tách biệt có nút gốc r1, r2, … , rn; r nút có quan hệ cha-con với r1, r2, … , rn tồn T nhận r làm gốc r r1 r2 rn T1 T2 Tn Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ví dụ Cây Cây thư mục máy tính Desktop My Network Places My Computer Floppy(A:) WindowsXP (C:) CD Driver (D:) My Documents My Pictures My Received Files My Music Đỗ Bích Diệp - Khoa CNTT Ví dụ Cây Cây phân cấp chức hệ thống thơng tin Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ví dụ Cây Cây mục lục Sách Đỗ Bích Diệp - Khoa CNTT Các thuật ngữ liên quan đến – Cấp (Degree) nút z z Cấp nút số nút Cấp cấp cao nút Degree Degree A Degree Degree E B C F D G H I J K Degree P L M N Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các thuật ngữ liên quan đến – Đường cây: z Dãy nút n1, n2, , nk ni nút cha ni+1 ( i = k-1) đường từ n1 đến nk Path from A to M Length = A B C E F D G P L H M I J K N Đỗ Bích Diệp - Khoa CNTT Các thuật ngữ liên quan đến z Độ sâu hay mức (Depth – Level ) nút – Độ dài đường từ gốc đến nút + Depth A B E P C F G L Depth D H M N I J K Depth Depth Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các thuật ngữ liên quan đến z Độ cao (Height) nút – – Độ dài đường dài từ nút đến nút + Chiều cao chiều cao nút gốc Height =4 Height =3 A B C D Height = E F G P L H M I J K N Height = Đỗ Bích Diệp - Khoa CNTT Các thuật ngữ liên quan đến z z z Tổ tiên (Ancestor): A,C, G tổ tiên M Hậu duệ (descendants): E, F, G, H, L,M …đều hậu duệ A Anh em (siblings): E, F cặp anh em ; L, N cặp anh em A B E P C F D G L H M I J K N Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các thuật ngữ liên quan đến z Rừng tập hợp hữu hạn phân biệt , không giao B E C F D G L H M I J K N Đỗ Bích Diệp - Khoa CNTT Các thao tác Cây – Các thao tác truy nhập z z z z z z z – root() : trả nút gốc parent( Tree T, Node p): trả nút cha nút p T children(Tree T, Node p): trả danh sách nút nút p T left_most_child(Tree T, Node p) : trả nút cực trái nút p right_most_child(Tree T, Node p) : trả nút cực phải nút p left_sibling (Tree T, Node p) : trả nút anh em kề cận bên trái nút p right_sibling(Tree T, Node p) : trả nút anh em kề cận bên phải nút p Các thao tác khác height (Tree T) size(Tree T) z isRoot (Tree T, Node p); isLeaf (Tree T, Node p); isInternal (Tree T, Node p); z z Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn tổng quát – Dựa tham chiếu đến nút cha z z z Cây T có nút đánh số từ đến n Cây T biểu diễn danh sách tuyến tính nút thứ i chứa thành phần tham chiếu đến cha Nếu dùng mảng, A[i] = j j cha nút i ; i1là A gốc A[i] = 0; 1 3 6 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] B C D E G H L N Đỗ Bích Diệp - Khoa CNTT Biểu diễn tổng quát – Dựa danh sách nút z z z nút có danh sách nút Danh sách nút thường danh sách móc nối Trong trường hợp sử dụng danh sách móc nối, nút đầu danh sách lưu mảng Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn tổng quát Dựa danh sách nút – A[1] A[2] A[3] B A[4] A[5] A[6] NULL A[7] A[8] NULL A[9] NULL C D E G NULL 8 A H L N NULL Đỗ Bích Diệp - Khoa CNTT Biểu diễn tổng quát – Thông qua cấp z Với nút , quan tâm tới quan hệ – – z z Quan hệ 1-1 nút nút cực trái (con cả) Quan hệ 1-1 nút nút em kế cận bên phải Dựa vào nhận định này, người ta biểu diễn tổng quát dạng nhị phân gọi nhị phân tương đương (equivalent binary tree) Quy cách nút nhị phân tương đương sau LCHILD INFO RSIBLING Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn tổng quát z A Ví dụ: – Cây tổng quát B E – C F G D H I K A Cây nhị phân tương đương B E C F G D H I Đỗ Bích Diệp - Khoa CNTTK Duyệt theo thứ tự trước z z z Duyệt thăm nút theo thứ tự định, nút thăm lần Khi duyệt theo thứ tự trước, nút thăm trước hậu duệ Ứng dụng: In mục lục tài liệu Algorithm preOrder(v) visit(v) for each child w of v preOrder(w) I A B 1.1 E 1.2 F 2.1 G C 3.D 2.2 H 2.3 I Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 10 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt theo thứ tự trước Duyệt thăm nút theo thứ tự định, nút thăm lần Khi duyệt theo thứ tự trước, nút thăm trước hậu duệ Ứng dụng: In mục lục tài liệu z z z Algorithm preOrder(v) visit(v) for each child w of v ⇒ preOrder(w) I A B C D 1.1 E 1.2 F 2.1 G 2.2 H 2.3 I Đỗ Bích Diệp - Khoa CNTT Duyệt theo thứ tự trước Duyệt thăm nút theo thứ tự định, nút thăm lần Khi duyệt theo thứ tự trước, nút thăm trước hậu duệ Ứng dụng: In mục lục tài liệu z z z 1.1 E Và tiếp tục … I A B ⇒ Algorithm preOrder(v) visit(v) for each child w of v preOrder(w) C D 1.2 F 2.1 G 2.2 H 2.3 I Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 16 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt theo thứ tự sau z z Duyệt theo thứ tự sau nút thăm sau hậu duệ Ứng dụng: Xác định kích thước tệp thư mục thư mục Algorithm postOrder(v) for each child w of v postOrder(w) visit(v) cs16/ homeworks/ todo.txt 1K programs/ h1c.doc 3K h1nc.doc 2K DDR.java 10K Robot.java 20K Stocks.java 25K Đỗ Bích Diệp - Khoa CNTT Duyệt theo thứ tự z Duyệt theo thứ tự nút thăm sau hậu duệ cực trái trước hậu duệ cs16/ homeworks/ Algorithm inOrder(v) if (isLeaf(v)) then visit(v) else inOrder(left_most_child(v)) visit(v) for each child w of v (w is not the left most child) inOrder(w) todo.txt 1K programs/ h1c.doc 3K h1nc.doc 2K DDR.java 10K Stocks.java 25K Robot.java 20K Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 17 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Cây nhị phân ( Binary Tree) – Là mà nút có tối đa z Cây nút cần phải phân biệt rõ ràng thành trái (left subtree) phải (right subtree) A right-subtree left-subtree B C D F E G Đỗ Bích Diệp - Khoa CNTT Ví dụ nhị phân – Cây biểu thức số học với phép tốn ngơi + - / * x x z y Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 18 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Ví dụ nhị phân – Cây định Want a fast meal? No Yes How about coffee? On expense account? Yes No Yes Starbucks Spike’s Al Forno No Café Paragon Đỗ Bích Diệp - Khoa CNTT Ví dụ nhị phân – Kết thi đấu môn thể thao theo cặp nhiều vòng H A H E A A D C F H E B H G F Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 19 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các dạng đặc biệt nhị phân z Cây suy biến (degenerate binary tree) – Mỗi nút có nút A A C A A C C F F G (a) C F F G G (b) G (c) (d) Đỗ Bích Diệp - Khoa CNTT Các dạng đặc biệt nhị phân z Cây nhị phân đầy đủ (full binary tree) – A Mỗi nút có đầy đủ B C D G F E A z Cây nhị phân gần đầy – Ở mức cuối khơng có đầy đủ nút B D H C E F I J K Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com G 20 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Các dạng đặc biệt nhị phân z Cây nhị phân hoàn chỉnh – – Là nhị phân gần đầy Tất nút mức cuối lệch bên trái A B C D H z F E L I J G K Cây nhị phân cân đối z Cây trái phải lệch khơng q đơn vị Đỗ Bích Diệp - Khoa CNTT Tính chất Cây nhị phân Số lượng tối đa nút mức i nhị phân 2i-1 (i >= 1) Số lượng tối đa nút nhị phân có chiều cao h 2h – (h >= 1) Một nhị phân có n nút có chiều cao tối thiểu ⎡log (n + 1)⎤ Một nhị phân đầy đủ có độ sâu n có 2n -1 nút Một nhị phân hồn chỉnh có chiều cao h có số lượng nút nằm khoảng 2h-1 đến 2h – Trong nhị phân có n0 nút n2 nút cấp ta có n0 = n2 + Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 21 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn nhị phân – Biểu diễn sử dụng mảng z z Đánh số nút theo trình tự từ mức 1, hết mức đến mức khác, từ trái sang phải Lưu trữ vector lưu trữ V theo nguyên tắc phần tử V[i] lưu thông tin nút đánh số i Đỗ Bích Diệp - Khoa CNTT Biểu diễn nhị phân – Ví dụ – I B D C E A F G K Cây cho lưu trữ vector lưu trữ V sau A B C D E F G I K V[1] V[2] V[3] V[4] V[5] V[6] V[7] V[8] V[9] Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 22 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn nhị phân z z Cách lưu trữ phù hợp để lưu trữ nhị phân gần đầy đầy đủ Với dạng khác dẫn đến lãng phí nhớ A A C V[1] V[2] F V[3] V[4] V[5] V[6] V[7] V[8] C F G Đỗ Bích Diệp - Khoa CNTT Biểu diễn nhị phân z Biểu diễn móc nối sử dụng trỏ – Mỗi nút lưu trữ phần tử có quy cách sau LPTR INFO RPTR INFO: chứa liệu nút LPTR: chứa địa nút gốc trái z RPTR: chứa địa nút gốc phải Cần nắm trỏ T trỏ tới nút gốc Nếu rỗng T = NULL z z – Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 23 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Biểu diễn nhị phân T A A B D B C E F C D E F K K Đỗ Bích Diệp - Khoa CNTT Biểu diễn nhị phân struct Tnode{ int info; struct Tnode * lptr; struct Tnode * rptr; }; typedef struct Tnode TREENODE; typedef TREENODE *TREENODEPTR; Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 24 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt nhị phân – Phép duyệt nhị phân z z Phép duyệt phép “thăm” nút cho nút thăm lần Tồn phép duyệt khác nhị phân – – – Duyệt theo thứ tự trước Duyệt theo thứ tự Duyệt theo thứ tự sau: Đỗ Bích Diệp - Khoa CNTT Duyệt nhị phân – Ví dụ: Thực duyệt z z z A Duyệt theo thứ tự trước ABDHEIJCFGK Duyệt theo thứ tự HDBIEJAFCKG Duyệt theo thứ tự sau HDIJEBFKGCA B D H C E I G F J K Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 25 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Duyệt nhị phân theo thứ tự trước void PREORDER(TREENODEPTR tree) { if (tree != NULL) { printf(“%3d”, tree->info; PREORDER(tree->lptr); PREORDER(tree->rptr); } } Đỗ Bích Diệp - Khoa CNTT Duyệt nhị phân – Ví dụ 2: Cho nhị phân biểu diễn biểu thức số học sau, đưa dãy nút thăm thực phép duyệt theo thứ tự trước, sau Nhận xét dãy thu + - x ^ / * y y z Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 26 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Cây biểu thức – Bài toán 1: Dựng biểu diễn biểu thức số học: z z Cho biểu thức số học dạng hậu tố, dựng biểu diễn biểu thức số học Ví dụ: Cho biểu thức x y * - y z / ^ + Dựng biểu diễn biểu thức sau + - x ^ / * y y z Đỗ Bích Diệp - Khoa CNTT Dựng biểu diễn biểu thức z Giải thuật Function BUILD_TREE_POSTFIX(TOKENS, n) {TOKENS : mang cac token cua xâu ký tự biểu diễn biểu thức ban đầu biểu thức dạng hậu tố, dạng mảng n số ký tự xâu} { S : Stack de chua du lieu tam thoi} Begin for i = to n Begin TK = TOKENS[i]; if isNumber(TK) | isChar(TK) Then begin Node = CreateTreeNode(TK); {tạo có nút gốc hạng tử } PUSH(S, Node); end; Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 27 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Dựng biểu diễn biểu thức z Giải thuật (tiếp) Else {TK la toan tu} begin Right = POP(S); Left = POP(S); Node = CreateTreeNode(TK, Right, Left); {tao cay gom nut goc la toan tu TK va nut la hang tu la right, left} PUSH(S,Node); end; end; T= POP(S); Return T; End; Đỗ Bích Diệp - Khoa CNTT Cây biểu thức – Bài tốn 2: Tính giá trị biểu thức số học biểu diễn nhị phân z z Các nút biểu diễn giá trị toán hạng Các nút nhánh biểu diễn dấu phép toán – – Các dấu phép tốn sử dụng toán là: +, - , *, /, ^ teta (biểu diễn dấu âm ) Qui ước với nút nhánh teta tốn hạng phải Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 28 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Tính giá trị biểu thức số học Ví dụ – + * teta 20 ^ Đỗ Bích Diệp - Khoa CNTT Tính giá trị biểu thức z Giải thuật tính giá trị biểu thức biểu diễn cấu trúc Function COMPUTE_EXPRESSION(T) Begin IF IsLeaf(T) THEN Result := VAL(INFO(T)); ELSE BEGIN leftvalue := COMPUTE_EXPRESSION(LPTR(T)); rightvalue := COMPUTE_EXPRESSION(RPTR(T)); case (INFO(T)) '+' : Result = leftvalue + rightvalue; '-' : Result = leftvalue - rightvalue; '*' : Result = leftvalue * rightvalue; '/' : Result = leftvalue / rightvalue; ‘^' : Result = leftvalue ^ rightvalue; ‘teta' : Result = -( rightvalue); end case; END; return Result; End Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 29 https://fb.com/sinhvienzonevn Cấu trúc liệu Giải thuật Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone.com 30 https://fb.com/sinhvienzonevn ... CNTT - ĐHBKHN SinhVienZone. com 29 https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone. com 30 https://fb .com/ sinhvienzonevn... h1nc.doc 2K DDR.java 10K Stocks.java 25K Robot.java 20K Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone. com 17 https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Cây nhị... Node); end; Đỗ Bích Diệp - Khoa CNTT Đỗ Bích Diệp - Khoa CNTT - ĐHBKHN SinhVienZone. com 27 https://fb .com/ sinhvienzonevn Cấu trúc liệu Giải thuật Dựng biểu diễn biểu thức z Giải thuật (tiếp)

Ngày đăng: 30/01/2020, 21:08

Từ khóa liên quan

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

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

Tài liệu liên quan