1. Trang chủ
  2. » Thể loại khác

Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C

28 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

Thông tin cơ bản

Định dạng
Số trang 28
Dung lượng 2,07 MB

Nội dung

Bài 5: Cây BÀI 5: CÂY Mục tiêu Nội dung Sau học này, bạn có thể:  Mô tả khái niệm cây, nhị phân, tổng qt cách xác  Trình bày cách cài đặt tổng quát, nhị phân thực cài đặt thao tác nhị phân cách xác ngơn ngữ lập trình C  Xác định số ứng dụng nhị phân trò chơi  Sử dụng cấu trúc liệu dạng cho phù hợp để giải số toán      Các khái niệm Cây nhị phân Ứng dụng nhị phân Cây tổng quát Cây biểu diễn trò chơi Thời lượng học 10 tiết CS101_Bai5_v2.0014101214 81 Bài 5: Cây Trong nghiên cứu mơ hình liệu Cây cấu trúc liệu phổ biến khoa học máy tính, cấu trúc liệu phi tuyến tính sử dụng để lưu liệu theo thứ tự Cây sử dụng rộng rãi nhiều vấn đề khác Chẳng hạn, áp dụng để tổ chức thông tin hệ sở liệu, để mô tả cấu trúc cú pháp chương trình nguồn xây dựng chương trình dịch Rất nhiều toán lĩnh vực khác quy việc thực phép toán Do vậy, tìm hiểu định nghĩa khái niệm Chúng ta xét phương pháp cài đặt thực phép toán Sau nghiên cứu kỹ dạng đặc biệt, nhị phân 5.1 Các khái niệm Cây cấu trúc quen thuộc thuận tiện cho việc biểu diễn kết cấu phân cấp dạng rẽ nhánh Nó liên tưởng đến đời sống thực thường dùng thuật ngữ liên quan như: gốc, cành, Đặc điểm cấu trúc nút có thứ bậc Một nút cha có nhiều nút Mỗi nút trực thuộc nút cha Các nút trực thuộc nút cha có quan hệ anh em Các nút sau (khơng có con) gọi nút Số lượng cành từ nút đến gốc bậc nút Các nút có thứ bậc tạo thành lớp Trong sống, thường xuyên sử dụng sơ đồ dạng để biểu diễn mối quan hệ thành viên gia đình, dịng họ hay biểu diễn mơ hình tổ chức cơng ty, tổ chức xã hội đó… Bây ta hay quan sát sơ đồ quan hệ gia đình đây: Lộc Nam Hòa Lan Lan Anh Phong Cường Dương Hoa Hoàng Từ sơ đồ ta thấy mối quan hệ thành viên gia đình: Lộc có ba người Nam, Lan Cường, Hòa Lan Anh hai anh em ruột, Hòa cháu họ Lan Cường, Phong cháu ngoại Lộc, Phong Hoàng anh em họ với Như từ sơ đồ ta dễ dàng xác định mối quan hệ thành viên gia đình Các tổ chức xã hội thường có cấu trúc thường mơ tả sơ đồ 82 CS101_Bai5_v2.0014101214 Bài 5: Cây Trong khoa học máy tính, để biểu diễn mối quan hệ đối tượng sơ đồ này, người ta xây dựng cấu trúc liệu gọi cấu trúc liệu dạng – gọi tắt Cây (Tree) Định nghĩa Cây cấu trúc liệu trừu tượng gồm tập hữu hạn phần tử gọi nút (hay đỉnh), nút có quan hệ phân cấp gọi quan hệ “cha – con” tập hợp hữu hạn cạnh nối cặp nút cha – với Nếu khơng rỗng, có nút gọi nút gốc (root) Có thể định nghĩa đệ quy sau: Mỗi nút cây, nút gốc Nếu n nút T1, T2,…, Tk với n1, n2,…, nk gốc, T tạo lập cách cho n trở thành cha nút n1, n2,…, nk; nghĩa n gốc T1, T2,…, Tk các (subtrees) gốc Lúc đó, n1, n2,…, nk nút n Để tiện, người ta cho phép tồn khơng có nút gọi rỗng (null tree) CS101_Bai5_v2.0014101214 83 Bài 5: Cây Ví dụ 5.1 Xét có dạng sau: Hình 5.1 Cây Hình 5.1 minh hoạ T Đó tập hợp T gồm 11 phần tử, T = {a, b, c, d, e, f, g, h, i, j, k} Các phần tử T gọi đỉnh T Tập T có cấu trúc sau Các đỉnh T phân thành lớp không cắt nhau: lớp thứ gồm đỉnh a, đỉnh gọi gốc cây; lớp thứ hai gồm đỉnh b, c ; lớp thứ ba gồm đỉnh d, e, f, g, h lớp cuối gồm đỉnh i, j, k, đỉnh thuộc lớp (trừ gốc), có cung nối với đỉnh thuộc lớp kề (Cung biểu diễn mối quan hệ đó) Một số khái niệm Từ định nghĩa ta thấy rằng, đỉnh gốc của Số đỉnh gọi bậc đỉnh Các đỉnh có bậc khơng gọi Nếu đỉnh b gốc đỉnh a ta nói đỉnh b đỉnh a a cha b Như vậy, bậc đỉnh số đỉnh nó, cịn đỉnh khơng có Các đỉnh có gọi đỉnh Các đỉnh là đỉnh Các đỉnh có cha gọi anh em Một dãy đỉnh a1, a2,…, an (n  1), cho (i = 1, 2, , n – 1) cha + gọi đường từ a1 đến an Chiều dài đường số cành n – Ta có nhận xét rằng, ln tồn đường từ gốc tới đỉnh Mỗi nút có đường với chiều dài đến Nếu có đường từ đỉnh a đến đỉnh b có độ dài k  1, ta nói a tiền thân b b hậu a Ví dụ 5.2 Trong hình 5.1, đỉnh c cha đỉnh f, g, h Các đỉnh d, i, j, k, f h lá, đỉnh lại đỉnh a, c, g, k đường có độ dài từ a đến k Đỉnh b tiền thân đỉnh d, e, i, j Cây Từ định nghĩa ta có, đỉnh T gốc đó, ta gọi T Nó gồm đỉnh a tất đỉnh lại hậu a Chẳng hạn, với T hình 5.1, T1 = {c, f, g, h, k} 84 CS101_Bai5_v2.0014101214 Bài 5: Cây Độ cao, mức đỉnh Trong cây, độ cao đỉnh a độ dài đường dài từ a đến Độ cao gốc gọi độ cao Mức (độ sâu) đỉnh a độ dài đường từ gốc đến a Như gốc có mức Ví dụ 5.3 Trong hình 5.1, đỉnh b có độ cao 2, có độ cao Các đỉnh b, c có mức 1; đỉnh d, e, f, g, h có mức 2, cịn mức đỉnh i, j, k Cây Trong cây, đỉnh theo thứ tự định, gọi Chẳng hạn, hình 4.3 minh hoạ hai khác Hình 5.2 Hai khác Giả sử T, đỉnh a có theo thứ tự: b1, b2,…, bk (k  1) Khi ta nói, b1 trưởng a, bi anh liền kề bi + (bi + em liền kề bi), i = 1, 2, , k – Ta nói, với i < j bi bên trái bj (bj bên phải bi) Quan hệ mở rộng sau Nếu a bên trái b hậu a bên trái hậu b Ví dụ: hình 5.1, f trưởng c, anh liền kề đỉnh g Đỉnh i bên trái đỉnh g Cây gắn nhãn Cây gắn nhãn mà đỉnh gắn với giá trị (nhãn) Nói cách khác, gắn nhãn với ánh xạ từ tập hợp đỉnh vào tập hợp giá trị (các nhãn) Chúng ta xem nhãn thông tin liên kết với đỉnh Nhãn liệu đơn số nguyên, số thực, liệu phức tạp ghi Cần biết rằng, đỉnh khác có nhãn Rừng Một rừng F danh sách cây: F = (T1, T2,…, Tn) Ti (i = 1, , n) (cây sắp) Chúng ta có tương ứng – tập hợp tập hợp rừng Thật vậy, T với gốc r gốc theo thứ tự từ trái sang phải T1, T2,…, Tn, T = (r, T1, T2,…, Tn) tương ứng với rừng F = (T1, T2,…, Tn) ngược lại CS101_Bai5_v2.0014101214 85 Bài 5: Cây 5.2 Cây nhị phân 5.2.1 Khái niệm Khái niệm Một dạng quan trọng cấu trúc nhị phân Cây nhị phân mà nút có nhiều hai Từ định nghĩa nhị phân, ta suy rằng, đỉnh nhị phân có nhiều hai đỉnh con, đỉnh bên trái (đó gốc trái) đỉnh bên phải (đó gốc phải) Hình 5.3 Một nhị phân Cần lưu ý rằng, (cây có gốc) nhị phân hai khái niệm khác Cây không trống, ln ln chứa đỉnh, đỉnh khơng có, có hay nhiều Cịn nhị phân trống, đỉnh ln ln có hai phân biệt bên trái bên phải Chẳng hạn, hình 5.4 minh hoạ hai nhị phân khác Cây nhị phân hình 5.4a có trái gốc gồm đỉnh, phải trống Cây nhị phân hình 5.4b có trái gốc trống, phải gồm đỉnh Song ta có cây: mà gốc có gồm đỉnh Hình 5.4 Hai nhị phân khác Một số dạng đặc biệt nhị phân:  Cây nhị phân lệch phải, nhị phân lệch trái, zíc-zắc Các dạng nhị phân thường gọi nhị phân suy biến 86 CS101_Bai5_v2.0014101214 Bài 5: Cây Hình 5.5 Các dạng nhị phân suy biến Trong hình 5.5, a gọi lệch phải, b gọi lệch trái, c d gọi zíc-zắc  Cây nhị phân hồn chỉnh (Complete binary tree): nhị phân mà nút có mức < h – có nút với h chiều cao (hay nói cách khác, nút có con)  Cây nhị phân đầy đủ (Full binary tree): nhị phân mà nút có mức  h – có nút với h chiều cao (hay nói cách khác, nhị phân đầy đủ nhị phân hoàn chỉnh mà tất nút gốc có độ cao nhau) Hình 5.6 Cây nhị phân hồn chỉnh (a) nhị phân đầy đủ (b) 5.2.2 Cài đặt nhị phân Cách thông dụng ta sử dụng cấu trúc liên kết để biểu diễn nhị phân Khi đó, nút ghi gồm trường:  Trường Info: chứa giá trị lưu nút  Trường Left Ptr: Chứa liên kết (con trỏ) tới nút trái, tức chứa thông tin đủ để nhận biết nút trái nút nút Trong trường hợp khơng có nút trái, trường gắn giá trị đặc biệt giá trị trống (null) CS101_Bai5_v2.0014101214 87 Bài 5: Cây  Trường Right Ptr: Chứa liên kết (con trỏ) tới nút phải, tức chứa thông tin đủ để nhận biết nút phải nút nút nào, trường hợp khơng có nút phải, trường gắn giá trị đặc biệt (giá trị trống – null) Left Ptr Info Right Ptr Hình 5.7 Cấu trúc liên kết biểu diễn nút nhị phân Dưới ta cài đặt nhị phân cấu trúc mảng trỏ 5.2.2.1 Cài đặt mảng Ta sử dụng mảng để lưu giữ đỉnh nhị phân Mỗi đỉnh biểu diễn ghi gồm ba trường: trường infor mô tả thông tin gắn với đỉnh, truờng trái (left) đỉnh trái, trường phải (right) đỉnh phải Giả sử đỉnh đánh số theo thứ tự từ mức trở đi, hết mức đến mức khác từ trái sang phải nút mức Khi đó, cấu trúc liệu biểu diễn nhị phân khai báo sau: #define max N; typedef Item; typedef struct Node { Item infor; int left; int right; }; Node Tree[N]; Hình minh họa cấu trúc liệu biểu diễn nhị phân hình 5.3 mảng infor left right A B C D E 10 F 0 G 11 H 0 I 0 10 J 0 11 K 0 Hình 5.8 Cấu trúc liệu mảng biểu diễn nhị phân 88 CS101_Bai5_v2.0014101214 Bài 5: Cây 5.2.2.2 Cài đặt trỏ Ngoài cách cài đặt nhị phân mảng, cịn sử dụng trỏ để cài đặt nhị phân Trong cách ghi biểu diễn đỉnh chứa hai trỏ: trỏ trái (left) trỏ tới đỉnh trái, trỏ phải (right) trỏ tới đỉnh phải Ta có khai báo sau cho nhị phân: typedef ElementType; //cấu trúc nút struct Node { ElementType infor; struct TreeNode *left; struct TreeNode *right; }; typedef struct Node *Tree;//định nghĩa Tree Root;//con trỏ trỏ tới nút gốc Với cách cài đặt này, cấu trúc liệu biểu diễn nhị phân hình 5.3 minh hoạ hình 5.9 Hình 5.9 Cấu trúc liệu biểu diễn Từ sau sử dụng cách biểu diễn trỏ nhị phân Các phép toán nhị phân sau thể cách biểu diễn trỏ 5.2.3 Các thao tác nhị phân 5.2.3.1 Khởi tạo nhị phân Việc khởi tạo nhị phân đơn giản cho trỏ quản lý địa nút gốc trỏ NULL Thủ tục khởi tạo sau: void BTree_Init(Tree *Root) { (*Root) = NULL; } CS101_Bai5_v2.0014101214 89 Bài 5: Cây 5.2.3.2 Tạo nút Việc cài đặt thủ tục tương tự cài đặt thủ tục tạo nút cho danh sách liên kết Thủ tục cài đặt sau: Node *CreateNode(ElementType NewData) { Node *p; p = (Node*)malloc(sizeof(struct Node)); if(p!= NULL) { p –> left = NULL; p –> right = NULL; p –> Data = NewData; } return p; } 5.2.3.3 Thêm nút vào nhị phân Việc thêm nút vào vào diễn bên trái bên phải Do đó, ta có hai thao tác thêm riêng biệt //thêm nút vào bên trái tạo nút NewNodePtr cần thêm if (NewNodePtr == NULL) khỏi thác tác chèn else { if(Root == NULL) { Root = NewNodePtr; } else { LPtr = Root; while(LPtr –> left!= NULL)//cây trái không rỗng { LPtr = LPtr –> left; } LPtr –> left = NewNodePtr; } } Cài đặt thuật toán: void Add_Left(ElementType X,Tree Root); { Tree LPtr; if(Root == NULL) { Root = CreateNode(X); } else { LPtr = Root; While (LPtr –> left!= NULL) { LPtr = LPtr –> left; }LPtr –> left = CreateNode(X); } } 90 CS101_Bai5_v2.0014101214 Bài 5: Cây Hình 5.11 biểu diễn tìm kiếm nhị phân, khố đỉnh số nguyên Hình 5.11 Một tìm kiếm nhị phân Khi qua phép duyệt theo thứ tự nút gốc ta qua nút tìm kiếm nhị phân theo thứ tự tăng dần Điều dẫn đến ta có thuật tốn xếp khác dựa nhị phân tìm kiếm Ví dụ, duyệt tìm kiếm nhị phân hình 5.11 theo thứ tự nút gốc ta dãy số xếp theo thứ tự tăng dần: 5, 6, 7, 8, 10, 12, 14, 15, 16, 18, 19 Ta nghiên cứu kỹ tìm kiếm nhị phân cách cài đặt máy tính thao tác tìm kiếm nhị phân sau (bài 6) 5.4 Cây tổng quát Trong thực tế, có số ứng dụng đòi hỏi cấu trúc liệu dạng khơng bó buộc số lượng nút, ví dụ cấu trúc thư mục ổ đĩa hay hệ thống đề mục sách Cấu trúc đó, nút có nhiều hai gọi tổng quát Trong phần này, trình bày phương pháp cài đặt tổng quát Ví dụ 5.6 Hình mơ tả tổng qt Hình 5.12 Mơ hình tổng qt Các phép tốn tổng qt: Ngồi phép tốn (thao tác) nhị phân, tổng qt cịn có số phép toán sau: 94 CS101_Bai5_v2.0014101214 Bài 5: Cây  Tìm nút cha nút cây: hàm PARENT(n) trả nút cha nút n T, n nút gốc hàm cho giá trị $ Trong cài đặt cụ thể $ giá trị ta chọn Nó phụ thuộc vào cấu trúc liệu mà ta dùng để cài đặt  Tìm nút trái nút: hàm ELDEST_CHILD(n) cho nút trái nút n T Nếu n hàm cho giá trị $  Tìm nút anh em ruột nút n cây: hàm NEXT_SIBLING(n) cho nút anh em ruột phải nút n T Nếu n khơng có anh em ruột phải hàm cho giá trị $ 5.4.1 Biểu diễn danh sách đỉnh Đây phương pháp thông dụng để biểu diễn Với đỉnh ta thành lập danh sách đỉnh theo thứ tự từ trái sang phải 5.4.1.1 Cài đặt mảng Trong cách cài đặt này, ta sử dụng mảng để lưu giữ đỉnh Mỗi thành phần mảng tế bào chứa thông tin gắn với đỉnh danh sách đỉnh Danh sách đỉnh đỉnh biểu diễn mảng danh sách liên kết Tuy nhiên, số đỉnh thay đổi nhiều, ta sử dụng danh sách liên kết Để tiện cho việc truy cập đến đỉnh cây, ta nên tổ chức lưu trữ đỉnh sử dụng cấu trúc mảng Giả sử ta gán tên cho nút 1,2,…n Như vậy, ta mô tả đỉnh ghi gồm hai trường: trường info chứa thông tin gắn với đỉnh, trường Child trỏ tới danh sách đỉnh Giả sử đỉnh đánh số từ đến N với cách cài đặt này, ta khai báo cấu trúc liệu biểu diễn sau: #define N…;//N số lớn đỉnh mà có typedef Item; typedef struct Member { int id;//id danh đỉnh Member *Next;//Next:trỏ tới em liền kề }; typedef struct Node { Item infor; Member *child; //con trỏ trỏ tới danh sách }; typedef Node Tree[N];// mảng Tree T; Trong khai báo trên, Member biểu diễn thành phần danh sách con, Node biểu diễn đỉnh Với cách cài đặt này, cấu trúc liệu biểu diễn hình 5.13(a) minh họa theo dạng bảng hình 5.13(b) CS101_Bai5_v2.0014101214 95 Bài 5: Cây Hình 5.13 Cấu trúc liệu biểu diễn 5.4.1.2 Cài đặt trỏ Nếu không dùng mảng để lưu giữ đỉnh cây, ta sử dụng trỏ trỏ tới đỉnh Tại đỉnh, ta sử dụng danh sách trỏ trỏ tới nó, danh sách cài đặt mảng trỏ Một trỏ Root sử dụng để trỏ tới gốc Ta khai báo cấu trúc liệu biểu diễn cách cài đặt sau: #define K…;//K số tối đa đỉnh typedef Item; typedef struct Node //khai báo đỉnh { Item info;//lưu thông tin đỉnh Node *childs[K];//chứa đỉnh }; typedef struct Node *TreeNode;//khai báo TreeNode Root; //Root trỏ, trỏ tới gốc Với cách cài đặt này, cấu trúc liệu biểu diễn trỏ minh họa hình sau: Hình 5.14 Cấu trúc liệu biểu diễn 96 CS101_Bai5_v2.0014101214 Bài 5: Cây 5.4.2 Biểu diễn trưởng em liền kề đỉnh Một phương pháp thông dụng khác để biểu diễn là: với đỉnh ta trưởng em liền kề 5.4.2.1 Cài đặt mảng Giả sử đỉnh đánh số từ đến N Dùng mảng để lưu giữ đỉnh cây, đỉnh biểu diễn ghi gồm ba trường, trường infor, trường EldestChild NextSibling lưu trưởng em liền kề đỉnh Ta khai báo sau: typedef Item; typedef struct Node { Item info;//lưu giá trị phần tử đỉnh int EldestChild;//chứa danh đỉnh trưởng int NextSibling;//chứa danh đỉnh em liền kề }; Node Tree[N];//cây mảng nút Hình sau minh hoạ cấu trúc liệu biểu diễn hình 5.13a Infor EldestChild NextSibling A 2 B 3 C D 5 E F 7 G 11 8 H 0 I 10 10 K 0 11 M 0 Hình 5.15 Cấu trúc liệu biểu diễn 5.4.2.2 Cài đặt trỏ Thay cho dùng mảng, ta sử dụng trỏ để cài đặt Khi đó, ghi Node, trường EldestChild NextSibling trỏ Cây biểu diễn cấu trúc sau typedef Item; typedef struct Node { Item infor; Node *EldestChild;//trỏ tới gốc đỉnh Node *NextSibling;//trỏ tới gốc em liền kề đỉnh }; typedef struct Node *Tree; Tree Root; CS101_Bai5_v2.0014101214 97 Bài 5: Cây Trong cách cài đặt này, hình 5.13a biểu diễn cấu trúc liệu hình sau: Hình 5.16 Cấu trúc liệu biểu diễn 5.4.3 Biểu diễn cha đỉnh Trong số áp dụng, người ta sử dụng cách biểu diễn đơn giản sau Giả sử đỉnh đánh số từ đến N Dựa vào tính chất, đỉnh (trừ gốc) có cha Ta dùng mảng A[1 N] để biểu diễn cây, A[k] = m đỉnh m cha đỉnh k Trong trường hợp cần quan tâm đến thông tin gắn với đỉnh, ta cần phải đưa vào thành phần mảng trường infor để mô tả thông tin đỉnh Cây biểu diễn cấu trúc sau #define N …; typedef Item; typedef struct Node { Item infor; int parent; } ; Hình 5.17 minh hoạ cấu trúc liệu biểu diễn hình 5.13 (a) infor Parent A B C D E F G H I 10 K 11 M Hình 5.17 Cấu trúc liệu biểu diễn 98 CS101_Bai5_v2.0014101214 Bài 5: Cây 5.5 Cây biểu diễn trò chơi 5.5.1 Cây trò chơi Khi nghiên cứu trò chơi có hai người tham gia (gọi Trắng – Đen), chẳng hạn loại cờ (cờ vua, cờ tướng, cờ ca rơ ), thấy chúng có đặc điểm sau: hai người chơi thay phiên đưa nước tuân theo luật Các luật cho hai người Điển hình cờ vua Trong cờ vua, hai người chơi áp dụng luật tốt, xe, để đưa nước Luật đi, tốt Trắng, xe Trắng, giống luật tốt Đen, xe Đen, Một đặc điểm khác hai người chơi biết thông tin đầy đủ tình trị chơi (khơng chơi bài, người chơi biết người chơi khác cịn gì) Vấn đề chơi cờ xem vấn đề tìm kiếm nước Mỗi lần đến lượt mình, người chơi phải tìm số nhiều nước hợp lệ (tuân theo luật đi), nước tốt cho qua dãy nước thực hiện, giành phần thắng Việc tìm kiếm phức tạp có đối thủ Người chơi khơng biết đối thủ nước tương lai Vấn đề chơi cờ xem vấn đề tìm kiếm khơng gian trạng thái Mỗi trạng thái tình (sự bố trí qn hai bên bàn cờ)  Trạng thái ban đầu xếp quân cờ hai bên lúc bắt đầu chơi  Các toán tử nước hợp lệ  Các trạng thái kết thúc tình mà chơi dừng, thường xác định số điều kiện dừng  Một hàm kết (payoff function) ứng trạng thái kết thúc với giá trị Chẳng hạn cờ vua, trạng thái kết thúc thắng, thua (đối với Trắng) hịa Do đó, ta xác định hàm kết hàm nhận giá trị trạng thái kết thúc thắng (đối với Trắng), –1 trạng thái kết thúc thua (đối với Trắng) trạng thái kết thúc hòa Trong số trò chơi khác, chẳng hạn trò chơi tính điểm, hàm kết nhận giá trị nguyên khoảng [–k, k] với k số nguyên dương Như vậy, vấn đề người chơi tìm dãy nước cho xen kẽ với nước đối thủ tạo thành đường từ trạng thái ban đầu tới trạng thái kết thúc thắng cho Để thuận lợi cho việc nghiên cứu chiến lược chọn nước đi, biểu diễn không gian trạng thái dạng gọi trò chơi Cây trò chơi xây dựng sau: Gốc ứng với trạng thái ban đầu Ta gọi đỉnh ứng với trạng thái mà Trắng (Đen) đưa nước đỉnh Trắng (Đen) Nếu đỉnh Trắng (Đen) ứng với trạng thái u, đỉnh tất đỉnh biểu diễn trạng thái v V nhận từ u Trắng (Đen) thực nước hợp lệ Do đó, mức cây, đỉnh Trắng Đen, ứng với trạng thái kết thúc trị chơi Ví dụ 5.7 Xét trò chơi Dodgen (được tạo Colin Vout) Có hai quân Trắng hai quân Đen, ban đầu xếp vào bàn cờ 3*3 (Hình vẽ 5.18) Quân Đen tới trống bên phải, Quân Trắng tới trống bên trái, bên phải, Quân Đen cột ngồi bên phải khỏi bàn cờ, quân Trắng CS101_Bai5_v2.0014101214 99 Bài 5: Cây hàng khỏi bàn cờ Ai đưa hai quân khỏi bàn cờ trước thắng, tạo tình bắt đối phương khơng thắng Hình 5.18 Trị chơi Dodgen Giả sử Đen trước, ta có trị chơi biểu diễn hình 5.19 Hình 5.19 Cây trị chơi Dodgen với đen trước 5.5.2 Phương pháp Minimax Quá trình chơi trò chơi hai người (Trắng – Đen) trình Trắng Đen thay phiên đưa định, thực số nước hợp lệ Trên trị chơi, q trình tạo đường từ gốc tới Giả sử tới thời điểm đó, đường dẫn tới đỉnh u Nếu u đỉnh Trắng (Đen) Trắng (Đen) cần chọn tới đỉnh Đen (Trắng) v u Tại đỉnh Đen (Trắng) v mà Trắng (Đen) vừa chọn, Đen (Trắng) phải chọn tới đỉnh Trắng (Đen) u v Quá trình dừng lại đạt tới đỉnh Giả sử Trắng cần tìm nước đỉnh u Nước tối ưu cho Trắng nước dần tới đỉnh v đỉnh tốt (cho Trắng) số đỉnh u Ta cần giả thiết rằng, đến lượt đối thủ chọn nước từ v, Đen chọn nước tốt cho Như vậy, để chọn nước tối ưu cho Trắng đỉnh u, ta cần phải xác định giá trị đỉnh trò chơi gốc u Giá trị đỉnh (ứng với trạng thái kết thúc) giá trị hàm kết Đỉnh có giá trị lớn tốt cho Trắng, đỉnh có giá trị nhỏ tốt cho Đen Để xác định giá trị đỉnh trò chơi gốc u, ta từ mức thấp lên gốc u Giả sử, v đỉnh giá trị đỉnh xác định, v đỉnh Trắng giá trị xác định giá trị lớn giá trị đỉnh Cịn, v đỉnh Đen giá trị giá trị nhỏ giá trị đỉnh 100 CS101_Bai5_v2.0014101214 Bài 5: Cây Ví dụ 5.8 Xét trị chơi hình 5.20 Gốc a đỉnh Trắng Giá trị đỉnh số ghi cạnh đỉnh Đỉnh i Trắng, nên giá trị max(3, –2) = 3, đỉnh d đỉnh Đen, nên giá trị min(2, 3, 4) = Hình 5.20 Gán giá trị cho đỉnh trò chơi Việc gán giá trị cho đỉnh thực hàm đệ quy MaxVal MinVal Hàm MaxVal xác định giá trị cho đỉnh Trắng Hàm MinVal xác định giá trị cho đỉnh Đen Các hàm xây dựng thủ tục đệ quy sau: int MaxVal(u) //xác định giá trị cho đỉnh trắng { if(u đỉnh kết thúc) MaxVal(u)=f(u); else MaxVal(u) = Max{MinVal(v)|v đỉnh u} }; int MinVal(u) //xác định giá trị cho đỉnh đen { if(u đỉnh kết thúc) MinVal(u) = f(u); else MinVal(u) = Min{MaxVal(v)|v đỉnh u} }; Trong hàm đệ quy trên, f(u) giá trị hàm kết đỉnh kết thúc u Sau thủ tục chọn nước cho trắng đỉnh u Trong thủ tục Minimax(u,v), v biến lưu lại trạng thái mà Trắng chọn tới từ u Thủ tục chọn nước gọi phương pháp Minimax, Trắng chọn nước dẫn tới đỉnh có giá trị max giá trị đỉnh con, Đen đáp lại nước tới đỉnh có giá trị giá trị đỉnh Thuật tốn Minimax thuật tốn tìm kiếm theo độ sâu Ở đây, ta cài đặt thuật toán Minimax hàm đệ quy Về mặt lý thuyết, chiến lược Minimax cho phép ta tìm nước tối ưu cho Trắng Song khơng thực tế Chúng ta khơng có đủ thời gian để tính nước tối ưu, thuật tốn Minimax địi hỏi phải xem xét toàn đỉnh trò chơi Trong trò chơi phức tạp, trò chơi lớn Chẳng hạn, cờ vua, tính đến độ sâu 40, trị chơi có khoảng 10120 đỉnh! Nếu có độ cao m, đỉnh có b nước độ phức tạp thời gian thuật toán Minimax O(bm) CS101_Bai5_v2.0014101214 101 Bài 5: Cây void Minimax(u,v) { val  –; for w đỉnh u { if (val eval(v), ta khơng cần xuống để đánh giá đỉnh a mà khơng ảnh hưởng dến đánh giá đỉnh c Nói cách khác, ta cắt bỏ gốc a Lập luận tương tự cho trường hợp a đỉnh Đen, trường hợp eval(u) < eval(v) ta cắt bỏ gốc a Để cài đặt kỹ thuật cắt cụt alpha – beta, đỉnh nằm đường từ gốc tới đỉnh thời, ta sử dụng tham số  để ghi lại giá trị lớn giá trị đỉnh đánh giá đỉnh Trắng, tham số  ghi lại giá trị nhỏ đỉnh đánh giá đỉnh Đen Giá trị   cập nhật trình tìm kiếm   sử dụng biến địa phương hàm MaxVal(u, , ) (hàm xác định giá trị đỉnh Trắng u) Minval(u, , ) (hàm xác định giá trị đỉnh Đen u) Hình 5.24 Cắt bỏ gốc a, eval(u) > eval(v) int MaxVal(u, , ); { if (u hạn chế u đỉnh kết thúc) MaxVal  eval(u) else { for (mỗi đỉnh v u) {   max[, MinVal(v, , )]; // Cắt bỏ từ đỉnh v lại if (  ) exit; } } MaxVal  ; } 104 CS101_Bai5_v2.0014101214 Bài 5: Cây Thuật tốn tìm nước cho Trắng sử dụng kỹ thuật cắt cụt alpha – beta, cài đặt thủ tục Alpha_beta(u,v), đó, v tham biến ghi lại đỉnh mà Trắng cần tới từ u void Alpha_beta(u,v) {   –;   ; for (mỗi đỉnh w u) if (  MinVal(w, , )) {   MinVal(w, , ); v  w; } } Ví dụ 5.11 Xét trò chơi gốc u (đỉnh Trắng) giới hạn độ cao h = (hình 5.25) Số ghi cạnh giá trị hàm đánh giá Áp dụng chiến lược Minimax kỹ thuật cắt cụt, ta xác định nước tốt cho Trắng u, nước dẫn tới đỉnh v có giá trị 10 Cạnh đỉnh, ta cho giá trị cặp tham số (, ) Khi gọi hàm MaxVal MinVal để xác định giá trị đỉnh đó, nhánh bị cắt bỏ hình: Hình 5.25 Xác định giá trị đỉnh kỹ thuật cắt cụt 5.5.3 Trò chơi Tic – Tac - Toe Tic - tac - toe trò chơi phổ biến dùng cách viết bàn cờ giấy có chín ơ, 3x3 cho hai người chơi Một hai đối thủ trước, đánh X (hoặc O) vào ô trống bàn cờ Hai người thay phiên đánh vào ô trống người tạo dãy ba ký hiệu mình, ngang dọc hay chéo thắng Nếu hết cờ mà khơng người chơi có qn cờ nằm đường thẳng ván hòa Người Việt thường chơi trò tương tự, gọi Cờ ca – rô, bàn cờ không giới hạn ơ, vẽ thêm ơ, để kéo rộng người đạt dãy thắng CS101_Bai5_v2.0014101214 105 Bài 5: Cây Như vậy, mục tiêu trò chơi đến lượt, người chơi cố gắng tạo quân cờ đường thẳng để người chiến thắng ngăn cản người lại tạo quân cờ đường thẳng Để giải toán sử dụng giải thuật minimax – chế cắt tỉa alpha beta để tìm nước tốt cho người chơi Giả sử hai người chơi gọi MIN va MAX MAX đại diện cho người chơi dành thắng lợi hay cố gắng tối ưu Hình 5.26: Trị chơi Tic-tac-toe hóa ưu Ngược lại MIN người chơi với phần thắng thuộc người O cố tối thiểu hóa điểm số MAX Khi áp dụng thủ thuật minimax, đánh dấu ln phiên mức khơng gian tìm kiếm phù hợp với đối thủ có nước mức Kết việc áp dụng Minimax vào cho chơi Tic – tac – toe thể hình 5.27 Hình 5.27 Cây thể áp dụng giải thuật minimax cho trò chơi Tic – tac – toe Áp dụng vào trò chơi 106 CS101_Bai5_v2.0014101214 Bài 5: Cây TÓM LƯỢC CUỐI BÀI Trong tìm hiểu dạng cấu trúc liệu trừu tượng, Tìm hiểu sâu dạng đặc biệt nhị phân Các bạn cần lưu ý số vấn đề sau:  Trình bày khái niệm cây, con, độ cao mức đỉnh…  Trình bày khái niệm nhị phân, cách cài đặt nhị phân, thao tác nhị phân  Trình bày ứng dụng nhị phân giải toán CS101_Bai5_v2.0014101214 107 Bài 5: Cây BÀI TẬP Trình bày khái niệm, đặc điểm cấu trúc liệu nhị phân tổng quát? So sánh với danh sách liên kết? Trình bày biểu thức duyệt tiền tự, trung tự, hậu tự sau: Duyệt theo mức duyệt gốc, duyệt nút nằm mức theo thứ tự từ trái sang phải, đến nút nằm mức theo thứ tự từ trái sang phải Hãy liệt kê nút theo thứ tự duyệt theo mức Vẽ nhị phân biểu diễn cho biểu thức ((a + b) + c * (d + e) + f) * (g + h) Trình bày biểu thức tiền tố hậu tố biểu thức cho Cho nhị phân a) Hãy trình bày kết phép duyệt: tiền tự (node – left – right), trung tự (left – node – right), hậu tự (left – right – node) b) Minh hoạ lưu trữ nút mảng 108 CS101_Bai5_v2.0014101214

Ngày đăng: 12/10/2022, 11:50

HÌNH ẢNH LIÊN QUAN

Trong bài này chúng ta sẽ nghiên cứu mơ hình dữ liệu cây. Cây là một cấu trúc dữ liệu rất phổ biến trong khoa học máy tính, là một cấu trúc dữ liệu phi tuyến tính và được sử dụng để lưu dữ  liệu theo một thứ tự nào đó - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
rong bài này chúng ta sẽ nghiên cứu mơ hình dữ liệu cây. Cây là một cấu trúc dữ liệu rất phổ biến trong khoa học máy tính, là một cấu trúc dữ liệu phi tuyến tính và được sử dụng để lưu dữ liệu theo một thứ tự nào đó (Trang 2)
Hình 5.1 minh hoạ một cây T. Đó là một tập hợp T gồm 11 phần tử, T= {a, b, c, d, e, f, g, h, i, j, k} - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.1 minh hoạ một cây T. Đó là một tập hợp T gồm 11 phần tử, T= {a, b, c, d, e, f, g, h, i, j, k} (Trang 4)
Hình 5.1. Cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.1. Cây (Trang 4)
Trong cây ở hình 5.1, đỉnh b có độ cao là 2, cây có độ cao là 3. Các đỉnh b, c có mức 1; các đỉnh d, e, f, g, h có mức 2, còn mức của các đỉnh i, j, k là 3 - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
rong cây ở hình 5.1, đỉnh b có độ cao là 2, cây có độ cao là 3. Các đỉnh b, c có mức 1; các đỉnh d, e, f, g, h có mức 2, còn mức của các đỉnh i, j, k là 3 (Trang 5)
Hình 5.3. Một cây nhị phân - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.3. Một cây nhị phân (Trang 6)
Hình 5.5. Các dạng cây nhị phân suy biến - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.5. Các dạng cây nhị phân suy biến (Trang 7)
Trong hình 5.5, cây a gọi là cây lệch phải, cây b được gọi là cây lệch trái, các cây c và d gọi là cây zíc-zắc - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
rong hình 5.5, cây a gọi là cây lệch phải, cây b được gọi là cây lệch trái, các cây c và d gọi là cây zíc-zắc (Trang 7)
Hình 5.7. Cấu trúc liên kết biểu diễn một nút của cây nhị phân - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.7. Cấu trúc liên kết biểu diễn một nút của cây nhị phân (Trang 8)
Với cách cài đặt này, cấu trúc dữ liệu biểu diễn cây nhị phân trong hình 5.3 được minh hoạ bởi hình 5.9 - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
i cách cài đặt này, cấu trúc dữ liệu biểu diễn cây nhị phân trong hình 5.3 được minh hoạ bởi hình 5.9 (Trang 9)
Hình 5.9. Cấu trúc dữ liệu biểu diễn cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.9. Cấu trúc dữ liệu biểu diễn cây (Trang 9)
Hình 5.11. Một cây tìm kiếm nhị phân - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.11. Một cây tìm kiếm nhị phân (Trang 14)
ở hình 5.13(a) được minh họa theo dạng bảng ở hình 5.13(b). - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
h ình 5.13(a) được minh họa theo dạng bảng ở hình 5.13(b) (Trang 15)
Hình 5.14. Cấu trúc dữ liệu biểu diễn cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.14. Cấu trúc dữ liệu biểu diễn cây (Trang 16)
Hình 5.13. Cấu trúc dữ liệu biểu diễn cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.13. Cấu trúc dữ liệu biểu diễn cây (Trang 16)
Hình 5.15. Cấu trúc dữ liệu biểu diễn cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.15. Cấu trúc dữ liệu biểu diễn cây (Trang 17)
Trong cách cài đặt này, cây trong hình 5.13a được biểu diễn bởi cấu trúc dữ liệu trong hình sau:  - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
rong cách cài đặt này, cây trong hình 5.13a được biểu diễn bởi cấu trúc dữ liệu trong hình sau: (Trang 18)
Hình 5.16. Cấu trúc dữ liệu biểu diễn cây - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.16. Cấu trúc dữ liệu biểu diễn cây (Trang 18)
Ví dụ 5.8. Xét cây trò chơi trong hình 5.20. Gố ca là đỉnh Trắng. Giá trị của các đỉnh - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
d ụ 5.8. Xét cây trò chơi trong hình 5.20. Gố ca là đỉnh Trắng. Giá trị của các đỉnh (Trang 21)
Hình 5.21. Đánh giá các quân trong trò chơi Dodgen - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.21. Đánh giá các quân trong trò chơi Dodgen (Trang 23)
đỉn ha là b và b có người anh em u dã được đánh giá. Giả sử cha của b là c (Xem hình - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
n ha là b và b có người anh em u dã được đánh giá. Giả sử cha của b là c (Xem hình (Trang 24)
Xét cây trò chơi gố cu (đỉnh Trắng) giới hạn bởi độ cao =3 (hình 5.25). Số ghi cạnh các lá là giá trị của hàm đánh giá - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
t cây trò chơi gố cu (đỉnh Trắng) giới hạn bởi độ cao =3 (hình 5.25). Số ghi cạnh các lá là giá trị của hàm đánh giá (Trang 25)
MinVal để xác định giá trị của đỉnh đó, các nhánh bị cắt bỏ được chỉ ra trong hình: - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
in Val để xác định giá trị của đỉnh đó, các nhánh bị cắt bỏ được chỉ ra trong hình: (Trang 25)
Hình 5.27. Cây thể hiện áp dụng giải thuật minimax cho trò chơi Tic – tac – toe - Trình bày các cách cài đặt về cây tổng quát, cây nhị phân thực hiện cài đặt thao tác trên cây nhị phân một cách chính xác bằng một ngôn ngữ lập trình C
Hình 5.27. Cây thể hiện áp dụng giải thuật minimax cho trò chơi Tic – tac – toe (Trang 26)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w