Xây dựng chương trình mô phỏng các thuật toán cơ bản trên cây đỏ đen

56 760 0
Xây dựng chương trình mô phỏng các thuật toán cơ bản trên cây đỏ đen

Đ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

TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ************* TRẦN THỊ SIM XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC THUẬT TOÁN CƠ BẢN TRÊN CÂY ĐỎ ĐEN KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC Chuyên ngành: Khoa học máy tính HÀ NỘI – 2015 TRƯỜNG ĐẠI HỌC SƯ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ************* TRẦN THỊ SIM XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC THUẬT TOÁN CƠ BẢN TRÊN CÂY ĐỎ ĐEN KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC Chuyên ngành: Khoa học máy tính Người hướng dẫn khoa học PGS. TS. BÙI THẾ HỒNG HÀ NỘI – 2015 LỜI CẢM ƠN Lời em xin chân thành cảm ơn hướng dẫn tận tình thầy giáo PGS. TS Bùi Thế Hồng, trực tiếp hướng dẫn bảo tận tình cho em hoàn thành khóa luận này. Em xin chân thành cảm ơn thầy, cô giáo khoa Công nghệ thông tin, thầy, cô giáo trường giảng dạy giúp đỡ em năm học vừa qua. Chính thầy, cô giáo xây dựng cho chúng em kiến thức tảng kiến thức chuyên môn để em hoàn thành khóa luận tốt nghiệp chuẩn bị cho công việc sau này. Cuối em xin bày tỏ lòng biết ơn tới gia đình bạn bè giúp đỡ động viên em nhiều suốt trình học tập để em thực tốt khóa luận này. Do kiến thức thời gian hạn chế nên khóa luận không tránh khỏi thiếu sót. Kính mong nhận đóng góp ý kiến thầy, cô giáo bạn để khóa luận hoàn thiện hơn. Hà Nội, tháng 05 năm 2015 Sinh viên Trần Thị Sim LỜI CAM ĐOAN Tên em là: Trần Thị Sim Sinh viên lớp: K37A – CNTT, khoa Công nghệ thông tin, trường Đại học sư phạm Hà Nội 2. Em xin cam đoan: 1. Đề tài “Xây dựng chương trình mô thuật toán đỏ đen ” nghiên cứu riêng em, hướng dẫn thầy giáo PGS.TS Bùi Thế Hồng. 2. Khóa luận hoàn toàn không chép tác giả khác. Nếu sai em xin hoàn toàn chiu trách nhiệm. Hà Nội, tháng 05 năm 2015 Người cam đoan Trần Thị Sim MỤC LỤC MỞ ĐẦU . CHƯƠNG 1. CÂY NHỊ PHÂN TÌM KIẾM 1.1. Định nghĩa . 1.2. Cây nhị phân . 1.3. Cây nhị phân tìm kiếm 10 1.4. Giải thuật tìm kiếm . 11 1.4.1. Tìm node tìm kiếm 11 1.4.2. Xóa nút tìm kiếm 13 1.4.3. Thêm nút tìm kiếm 16 CHƯƠNG 2. CÂY ĐỎ ĐEN 21 2.1. Giới thiệu 21 2.2. Định nghĩa . 22 2.3 Tính chất 23 2.4 . Tính hiệu đỏ đen . 25 2.5. Các thuật toán đỏ đen 25 2.5.1. Thêm nút . 25 2.5.2. Xóa nút . 33 2.5.3. Tìm kiếm nút . 37 CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG . 38 3.1. Phát biểu toán 38 3.2. Xây dựng chương trình mô 39 3.2.1. Khởi tạo . 39 3.2.2. Xoay trái x 39 3.2.3. Xoay phải x . 40 3.2.4. Thêm nút x vào . 41 3.2.5. Cấp phát thêm nút vào . 41 3.2.6. Xóa nút x vào 42 3.2.7. Tìm nút x . 44 3.3. Thiết kế giao diện . 44 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 46 TÀI LIỆU THAM KHẢO . 48 DANH MỤC HÌNH Hình 1.1. Hình ảnh Hình 1.2. Cây nhị phân . Hình 1.3. Cây nhị phân thứ tự . Hình 1.4. Cây nhị phân lệch Hình 1.5. Cây zíc – zắc . Hình 1.6. Cây nhị phân hoản chỉnh . Hình 1.7. Cây nhị phân đầy đủ . Hình 1.8. Cây nhị phân gần đầy Hình 1.9. Cây nhị phân tìm kiếm 11 Hình 1.10. Tìm nút với khóa x=55 12 Hình 1.11. Xóa nút với khóa x =40 . 13 Hình 1.12. Xóa nút với khóa x = 37 . 14 Hình 1.13. Xóa nút với khóa x = 18 . 16 Hình 1.14. Thêm nút với khóa x = 10 vào 17 Hình 1.15. Cây nhị phân ban đầu 20 Hình 1.16. Thêm nút có khóa x = 20 Hình 1.17. Tái cân lại thêm nút với khóa x = 7. 20 Hình 2.1. Các nút chèn theo thứ tự tăng dần 21 Hình 2.2. Ví dụ đỏ đen . 23 Hình 2.3. Lật màu . 26 Hình 2.4. Các biến dạng nút chèn với x cháu ngoại 27 Hình 2.5. Các biến dạng nút chèn với x cháu nội. . 27 Hình 2.6. Các khả chèn nút 28 Hình 2.7. Nút P đỏ X cháu ngoại . 30 Hình 2.8. P đỏ x nút cháu nội 32 Hình 2.9. Minh họa trường hợp . 34 Hình 2.10 Minh họa trường hợp 35 Hình 2.11. Minh họa trường hợp . 35 Hình 2.12. Minh họa trường hợp . 36 Hình 2.13. Minh họa trường hợp . 37 Hình 3.1. From giao diện chương trình 44 Hình 3.2. From chức chèn phần tử 45 Hình 3.3. From chức xóa phần tử . 45 Hình 3.4. From chức tìm phần tử 45 MỞ ĐẦU 1. Lý chọn đề tài Trong khoa học máy tính, cấu trúc liệu cách lưu liệu máy tính cho sử dụng cách hiệu quả. Thông thường, cấu trúc liệu chọn cẩn thận cho phép thực thuật toán hiệu hơn. Việc chọn cấu trúc liệu thường việc chọn cấu trúc liệu trừu tượng. Một cấu trúc liệu thiết kế tốt cho phép thực nhiều phép toán, sử dụng tài nguyên, thời gian xử lý không gian nhớ tốt. Tìm kiếm đòi hỏi thường xuyên đời sống hàng ngày xử lý tin học. Vấn đề tìm kiếm xét cách tổng quát, hiểu tìm đối tượng thỏa mãn số đòi hỏi đó, tập rộng lớn đối tượng. Có nhiều phương pháp tìm kiếm phổ biến, liệu nhớ nghĩa tìm kiếm trong, liệu nhớ tìm kiếm ngoài. Đối với tìm kiếm trong, tìm kiếm nhị phân phương pháp thông dụng, chi phí ít, đạt kết tốt. Tuy nhiên, sử dụng tìm kiếm nhị phân, dãy khóa phải xếp rồi, nghĩa thời gian chi phí cho xếp phải kể đến. Nếu dãy khóa biến động lúc chi phí cho xếp lại lên rõ điều bộc lộ nhược điểm phương pháp này. Để khắc phục nhược điểm vừa nêu tìm kiếm nhị phân đáp ứng yêu cầu tìm kiêm bảng biến động, phương pháp hình thành dựa sở bảng tổ chức dạng nhị phân mà ta gọi nhị phân tìm kiếm. Trong đỏ đen cấu trúc liệu hay, với nhị phân tìm kiếm cấu trúc liệu có điểm mạnh việc lưu trữ tìm kiếm liệu. Song đỏ đen với đặc tính tái cân lại tạo nên khác biệt cho phương pháp này. Chính em chọn đề tài: “Xây dựng chương trình mô thuật toán đỏ đen” để làm khóa luận. 2. Mục đích đề tài Đề tài nhằm nghiên cứu lý thuyết đỏ đen, dạng tìm kiếm nhị phân tự cân để thấy điểm mạnh kiểu cấu trúc liệu này. Trên sở thực mô phép toán chèn, xóa, tìm kiếm đỏ đen, đề tài nhằm khẳng định tính chất, việc sử dụng cấu trúc liệu đỏ đen vào việc lưu trữ liệu thực tìm kiếm toán tìm kiếm việc nên làm. 3. Nhiệm vụ nghiên cứu Nghiên cứu làm rõ khái niệm, tính chất cấu trúc liệu cây, nhị phân, nhị phân tìm kiếm. Trên sở xây dựng cấu trúc đỏ đen. Nghiên cứu phép toán chèn, xóa, tìm kiếm cấu trúc liệu đỏ đen, đánh giá chúng so với nhị phân tìm kiếm. Mô phép toán chèn, xóa, tìm kiếm node đỏ đen. 4. Đối tượng phạm vi nghiên cứu Đối tượng nghiên cứu: Cây đỏ đen Phạm vi nghiên cứu: Các phép chèn, xóa, tìm kiếm node đỏ đen. 5. Ý nghĩa khoa học thực tiễn Ý nghĩa khoa học: Cây đỏ đen đời, phát triển có sở khoa học vững giúp cho việc nghiên cứu chứng minh việc sử dụng phương pháp đỏ đen vào việc lưu trữ liệu thực việc tìm kiếm toán tìm kiếm việc nên làm. Hiện nay, việc làm để giảm thiểu chi phí tìm kiếm lĩnh vực chuyên gia nghiên cứu phát triển. Ý nghĩa thực tiễn: Chương trình thử nghiệm thành công biết hình dạng phát triển nhị phân tìm kiếm 2.5.2. Xóa nút Trong tìm kiếm nhị phân bình thường xóa nút có hai (không NULL), tìm phần tử lớn trái phần tử nhỏ phải, chuyển giá trị vào nút muốn xóa. Khi xóa nút copy giá trị, nút có hai (không NULL). Vì việc copy giá trị không làm tính chất đỏ đen nên không cần phải sửa chữa cho thao tác này. Việc đặt xóa nút có nhiều (không NULL). Về việc xóa nút có nhiều (không NULL). Nếu xóa nút đỏ, chắn nút đen. Tất đường đi qua nút bị xóa đơn giản bớt nút đỏ tính chất không thay đổi. Ngoài ra, nút cha nút nút bị xóa nút đen, tính chất tính chất giữ nguyên. Một trường hợp đơn giản khác xóa nút đen có nút đỏ. Khi xóa nút tính chất tính chất bị phá vỡ, gán lại màu cho nút đen chúng lại khôi phục. Trường hợp phức tạp xảy nút bị xóa nút đen. Sẽ bắt đầu việc thay nút bị xóa nút nó. Nút gọi S (trong vị trí N, anh em với nó, khác nút cha mới). Tiếp theo dùng P cha N, trái S phải S (nó tồn S lá). Giữa trường hợp khác nhau, vai trò nhãn nút thay đổi. Trong hình vẽ màu đỏ đen thể màu nút rõ ràng, đường thẳng gạch biểu thị nút chưa rõ màu (hoặc đỏ đen). Vì thế, cần hoàn chỉnh NULL sau phép thay đổi. Nếu nút bị xóa N khác “lá NULL”, dễ dàng thấy tính chất thỏa mãn. Còn N “lá NULL”, sửa chữa lược đồ để tất trường hợp tính chất thỏa mãn. 33 Nếu tất N gốc ban đầu đen sau xóa đường qua “N” giảm bớt nút đen. Do vi phạm tính chất 5, cần phải cân lại. Có trường hợp sau: Trường hợp 1: N gốc mới. Trong trường hợp dừng lại giải phóng nút đen khỏi đường gốc lại đen. Không tính chất bị vi phạm. Như vậy, trường hợp 2, quy ước N trái P. Nếu phải left right trao đổi cho nhau. Trường hợp 2: S đỏ. Trong trường hợp tráo đổi màu P S, sau quay trái P, làm cho S trở thành nút ông N. P có màu đen có màu đỏ. Tất đường có số nút đen giống nhau, N có anh em màu đen cha màu đỏ, tiếp tục với trường hợp 4, (anh em đen có nút đỏ S). Trong trường hợp sau anh em N gọi S. S P N S S P S S N S Hình 26.9. Minh họa trường hợp Trường hợp 3: P, S S đen. Trong trường hợp này, gán lại màu đỏ. Kết đường qua S (tất nhiên không qua N, có nút đen). Vì việc xóa cha trước N làm tất đường qua N bớt nút đen, nên nhau. Tuy nhiên, tất đường qua P 34 bầy có nút đen so với đường không qua P, tính chất (tất đường từ gốc tới nút có số nút đen) bị vi phạm. Để sửa chữa phải tái cân P, trường hợp 1. P P N S N S S S Hình 27.10 Minh họa trường hợp Trường hợp 4: S S đen P đỏ. Trong trường hợp này, phải đổi ngược màu S P. Điều không ảnh hưởng tới số nút đen đường thông qua N, thêm nút đen đường qua N, thay cho nút bị xóa đường này, S P N p S S N S Hình 28.11. Minh họa trường hợp Trường hợp 5: S đen, trái S đỏ, phải S đen, N trái cha nó. Trong trường hợp phải quay phải S, 35 trái S trở thành cha S N anh em nó. Sau đó, phải tráo đổi màu S cha nó. Tất đường có số nút đen nhau, N có người anh em bên phải lại đỏ S S S S S Hình 29.12. Minh họa trường hợp Trường hợp 6: S đen, phải S đỏ N trái nút cha P. Trong trường hợp phải quay trái P, S trở thành cha P phải S. Phải hoán đổi màu P S, gán cho phải S màu đen. Cây giữ nguyên màu gốc tính chất (cả hai nút đỏ đen) tính chất không bị vi phạm này. Tuy nhiên, N có thêm nút đen tiền nhiệm: Hoặc P bị tô đen, đen sẵn S nút ông trở thành đen. Như đường qua N có thêm nút đen. Trong lúc này, với đường không qua N có hai khả năng: + Đi qua nút anh em N. Khi trước sau quay phải qua S P, thay đổi màu sắc hai nút tráo đổi màu cho nhau. Như vậy, đường không bị thay đổi số nút đen. + Đi qua nút bác N, phải S. Khi đó, trước quay qua S, cháu S, phải S, sau quay qua nút S phải S, S nhận màu cũ cha P phải S đổi màu từ đỏ thành đen. Kết số nút 36 đen đường không thay đổi. Do tính chất khôi phục. Đường kẻ gạch hình vẽ nối tiếp nút đỏ nút đen, phải ghi lại trước sau thay đổi. P P N S N S S S S S Hình 30.13. Minh họa trường hợp 2.5.3. Tìm kiếm nút Khi xây dựng cấu trúc đỏ đen thao tác tìm kiếm cấu trúc liệu thực nhị phân tìm kiếm. Khi tìm kiếm khoá x có hay không, phải so sánh x với khóa gốc có trường hợp sau xuất hiện: + Không có gốc (cây rỗng), x cây: Phép tìm kiếm không thỏa. + X trùng với khóa gốc: Phép tìm kiếm thỏa. + X nhỏ khóa gốc: Tìm kiếm thực tiếp tục cách xét trái gốc với cách làm tương tự. + X lớn khóa gốc: Tìm kiếm thực tiếp tục xét bên phải gốc với cách làm tương tự. 37 CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG 3.1. Phát biểu toán Tìm kiếm đòi hỏi thường xuyên làm để tìm kiếm nhanh đề cao đời sống hàng ngày xử lý tin học. Vấn đề tìm kiếm nói cách tổng quát tìm đối tượng đó, thỏa mãn số yêu cầu biết trước tập lớn đối tượng xác định. Có nhiều phương pháp tìm kiếm phổ biến. Đối với tìm kiếm bên (dữ liệu nhớ trong), tìm kiếm nhị phân lại phương pháp thông dụng phổ biến, chi phí đạt kết tốt. Tuy nhiên, sử dụng tìm kiếm nhị phân, dãy khóa phải xếp rồi, nghĩa thời gian xếp phải kể đến. Nếu dãy khóa biến động chị phí lên rõ điều bộc lộ nhược điểm phương pháp này. Để khắc phục nhược điểm vừa nêu tìm kiếm nhị phân đáp ứng yêu cầu tìm kiếm bảng biến động, phương pháp hình thành dựa tổ chức nhị phân mà ta gọi nhị phân tìm kiếm. Cây nhị phân tìm kiếm làm tốt cân trường hợp suy biến việc tìm kiếm trở lên vô tốn thời gian. Vậy câu hỏi đặt làm để tạo cân bằng? Cây đỏ đen phương pháp để giải vấn đề này. Nó xây dựng dựa tính chất của nhị phân tìm kiếm. Tuy nhiên, lại có đặc tính riêng bật khả tự cân bằng, từ giúp cho thời gian tìm kiếm tất trường hợp. Như toán đỏ đen phát biểu sau: Cho n dãy khóa tạo nhị phân tìm kiếm cân (hay số nút bên trái gần với số nút bên phải). 38 Nhiệm vụ toán cần giải thêm xóa nút luôn tạo nhị phân tìm kiếm cân (hay số nút bên trái gần với số nút bên phải). 3.2. Xây dựng chương trình mô 3.2.1. Khởi tạo Typedef int KeyType; /* Kiểu liệu khoá */ /* Dữ liệu lưu trữ */ typedef Struct { int stuff } RecType; #define compLT(a,b) (a < b); #define compEQ(a,b) (a == b); /* Khai báo cấu trúc liêu */ typedef enum { BLACK, RED } nodeColor; typedef struct NodeTag { struct NodeTag *left; /* Con trái */ struct NodeTag *right; /* Con phải */ struct NodeTag *parent; /* Cha */ nodeColor color; /* Màu node (BLACK, RED) */ KeyType key; /* Khoá sử dụng tìm kiếm */ RecType rec; /* Dữ liệu node */ } NodeType; typedef NodeType *iterator; #define NIL &sentinel /* Node cầm canh */ static NodeType sentinel = { &sentinel, &sentinel, 0, BLACK, 0}; static NodeType *root = NIL; /* Node gốc */ 3.2.2. Xoay trái x Static void rotateLeft(NodeType *x) { NodeType *y = x->right; /* Thiết lập liên kết x->right */ x->right = y->left; if (y->left != NIL) y->left->parent = x; 39 /* Thiết lập liên kết y->parent */ if (y != NIL) y->parent = x->parent; if (x->parent) { if (x == x->parent->left) x->parent->left = y; else x->parent->right = y; } else { root = y; } /* link x and y */ y->left = x; if (x != NIL) x->parent = y; } 3.2.3. Xoay phải x Static void rotateRight(NodeType *x) { NodeType *y = x->left; /* Thiết lập liên kết x->left */ x->left = y->right; if (y->right != NIL) y->right->parent = x; /* Thiết lập liên kết y->parent */ if (y != NIL) y->parent = x->parent; if (x->parent) { if (x == x->parent->right) x->parent->right = y; else x->parent->left = y; } else { root = y; } /* liên kết x y */ y->right = x; if (x != NUIL) x->parent = y; } 40 3.2.4. Thêm nút x vào Static void insertFixup(NodeType *x) { /* Kiểm tra thuộc tính đỏ đen */ while (x != root && x->parent->color == RED) { /* we have a violation */ if (x->parent == x->parent->parent->left) { NodeType *y = x->parent->parent->right; if (y->color == RED) { /* bác RED */ x->parent->color = BLACK; y->color = BLACK; x->parent->parent->color = RED; x = x->parent->parent; } else { /* bác BLACK */ if (x == x->parent->right) { /* tạo x trái*/ x = x->parent; rotateLeft(x); } /* đổi màu xoay */ x->parent->color = BLACK; x->parent->parent->color = RED; rotateRight(x->parent->parent); } } root->color = BLACK; } 3.2.5. Cấp phát thêm nút vào StatusEnum insert(KeyType key, RecType *rec) { NodeType *current, *parent, *x; /*Tìm cha mới*/ 41 current = root; parent = 0; while (current != NIL) { if (compEQ(key, current->key)) return STATUS_DUPLICATE_KEY; } } 3.2.6. Xóa nút x vào void CRedAndBlac::deleteFixup(NodeType *x) { while (x != root && x->color == BLACK) { if (x == x->parent->left) { NodeType *w = x->parent->right; if (w->color == RED) { w->color = BLACK; x->parent->color = RED; rotateLeft (x->parent); w = x->parent->right; } if (w->left->color == BLACK && w->right->color == BLACK) { w->color = RED; x = x->parent; } else { if (w->right->color == BLACK) { w->left->color = BLACK; w->color = RED; rotateRight (w); 42 w = x->parent->right; } w->color = x->parent->color; x->parent->color = BLACK; w->right->color = BLACK; rotateLeft (x->parent); x = root; } } else { NodeType *w = x->parent->left; if (w->color == RED) { w->color = BLACK; x->parent->color = RED; rotateRight (x->parent); w = x->parent->left; } if (w->right->color == BLACK && w->left->color == BLACK) { w->color = RED; x = x->parent; } else { if (w->left->color == BLACK) { w->right->color = BLACK; w->color = RED; rotateLeft (w); w = x->parent->left; } w->color = x->parent->color; x->parent->color = BLACK; 43 w->left->color = BLACK; rotateRight (x->parent); x = root; } } } x->color = BLACK; } 3.2.7. Tìm nút x Static void findFixup(NodeType *p) { while(p!= NULL) { if( p->data ==x) return p; else if (xdata) p = p->left; else p = p->right; } return NULL; } 3.3. Thiết kế giao diện 3.3.1. Giao diện chương trình Dưới giao diện chương trình: Hình 31.1. From giao diện chương trình 44 3.3.2. Chức chèn phần tử Hình 32.2. From chức chèn phần tử 3.3.3. Chức xóa phần tử Hình 33.3. From chức xóa phần tử 3.3.4. Chức tìm phần tử Hình 34.4. From chức tìm phần tử 45 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN Khóa luận nghiên cứu lý thuyết đỏ đen dạng nhị phân tìm kiếm tự cân để thấy điểm mạnh cấu trúc này, nhằm khẳng định tính chất, việc sử dụng cấu trúc liệu đỏ đen vào việc lưu trữ liệu thực phép tìm kiếm toán tìm kiếm. Khóa luận xây dựng chương trình mô thuật toán đỏ đen đạt kết sau đây: + Khái niệm cây, nhị phân, nhị phân tìm kiếm. + Giới thiệu đỏ đen. + Các tính chất đỏ đen. + Tính hiệu đỏ đen. + Thuật toán tìm kiếm. + Thuật toán xóa. + Thuật toán thêm nút. + Xây dựng chương trình thử nghiệm thuật toán đỏ đen. Khóa luận tìm hiểu nghiên cứu thuật toán đỏ đen. Trong nghiên cứu em tìm hiểu sâu để giải nhược điểm đỏ đen lập trình cài đặt phức tạp, tốn nhiều nhớ phải lưu trữ thêm thông tin để tái cân lại cây, xây dựng chương trình với thuật toán chèn, xóa, tìm kiếm phần tử xác giải trường hợp phức tạp tái cân cây, chất lượng hình ảnh tốt hơn, giao diện dễ sử dụng, thời gian chèn nhanh so với phép chèn nhị phân thường (do thời gian chèn tăng dần số phải thực thi phép lật màu quay đường xuống thời điểm chèn). Mặc dù cố gắng nhiều song chắn khóa luận không tránh khỏi sai sót. Em mong đóng góp ý kiến thầy, cô giáo 46 bạn để khóa luận hoàn thiện. Đồng thời có thêm kinh nghiệm để tiếp tục nghiên cứu sau này. 47 TÀI LIỆU THAM KHẢO Các tài liệu Tiếng Việt [1]. Đỗ Xuân Lôi –Cấu trúc liệu giải thuật –NXBĐHQGHN [2]. Nguyễn Trọng Tú, “ Cây đỏ đen – lý thuyết mô phỏng”, Bài tiểu luận [3]. Nguyễn Văn Linh, Trần Cao Đệ, Trương Thị Thanh, Tuyên Lâm Hoài Bảo, Phan Huy Cường, Trần Ngân Bình, “ Cấu trúc liệu”, ĐH Cần Thơ, 2003 Các tài liệu Tiếng Anh [1]. Rudolf Bayer, “symmetric Binary B-Trees: Data Structure and maintenance Algorithms”, Acta Informatica Các tài liệu từ Internet. 48 [...]... phân tìm kiếm Chương 2: Cây đỏ đen - Chương này trình bày về khái niệm, tính chất cây đỏ đen, các phép toán chèn, xóa, tìm kiếm trên cây đỏ đen, những hiệu quả khi sử dụng cây đỏ đen Chương 3: Xây dựng chương trình mô phỏng - Chương này phát biểu về bài toán cây đỏ đen và chương trình mô phỏng các thuật toán chèn, xóa, thêm node trên cây đỏ đen 3 CHƯƠNG 1 CÂY NHỊ PHÂN TÌM KIẾM 1.1 Định nghĩa Cây là một... cạnh đó cây đỏ đen còn được bổ sung một số đặc điểm Trong cây đỏ đen, việc cân bằng được thực thi trong khi chèn, xóa Khi thêm một phần tử thì thủ tục chèn sẽ kiểm tra xem tính chất cân bằng của cây có bị vi phạm hay không Nếu có, sẽ xây dựng lại cấu trúc cây Bằng cách này, cây luôn luôn được giữ cân bằng 2.5 Các thuật toán cơ bản trên cây đỏ đen 2.5.1 Thêm một nút mới 2.5.1.1 Các phép lật trên đường... liệu nào Các cây tìm kiếm nhị phân, bao gồm cả cây đỏ- đen, thỏa mãn tính chất: Mỗi nút được gán một giá trị sao cho giá trị trên mỗi nút nhỏ hơn hoặc bằng tất cả các giá trị trên các nút thuộc cây con phải và lớn hơn các giá trị nằm trên cây con trái Điều đó làm cho quá trình tìm kiếm nhanh hơn Cây đỏ đen là một cây nhị phân tìm kiếm (BST) tuân thủ các quy tắc sau: + Mọi nút phải là đỏ hoặc đen + Nút... một cách khác là mọi đường dẫn từ gốc đến lá phải có cùng chiều cao đen 2.3 Tính chất Mỗi nút của cây đỏ- đen có thuộc tính "màu" nhận một trong hai giá trị "đỏ" hoặc "đen" Ngoài ra: + Một nút hoặc là đỏ hoặc đen + Gốc là đen + Tất cả các lá là đen + Cả hai con của mọi nút đỏ là đen và suy ra mọi nút đỏ có nút cha là đen 23 + Tất cả các đường đi từ một nút đã cho tới các lá chứa một số như nhau các. .. chất cơ bản của cây và độ phức tạp của các thuật toán Với mục đích này, đưa thêm các lá null vào làm con phải hoặc con trái hoặc cả hai của những nút không có chúng, các lá này không chứa dữ liệu mà chỉ làm nhiệm vụ thông báo rằng tại đây cây đã kết thúc, như hình vẽ ở trên Việc thêm các nút này làm cho tất cả các nút trong của cây đều chứa dữ liệu và có hai con, hay khác đi cây đỏ đen cùng với các. .. số như nhau các nút đen Tính chất 5 còn được gọi là tính chất "cân bằng đen" Số các nút đen trên một đường đi từ gốc tới mỗi lá được gọi là độ dài đen của đường đi đó Trong bài này chỉ xét các đường đi từ gốc tới các lá vì vậy sẽ gọi tắt các đường đi như vậy là đường đi Sức mạnh của cây đỏ đen nằm trong các tính chất trên Từ các tính chất này suy ra trong các đường đi từ gốc tới các lá đường đi dài... 1.2 Cây nhị phân Cây nhị phân là một dạng quan trọng của cấu trúc cây Cây nhị phân có các đặc điểm là: Mọi nút trên cây chỉ có tối đa là 2 nút con Đối với mỗi cây con của mỗi nút thì phân biêt cây con trái và cây con phải 5 5 2 1 6 7 3 4 Hình 1.2 Cây nhị phân Cây nhị phân là loại cây có cấu trúc đơn giản và có nhiều ứng dụng trong tin học Các cây nhị phân sau đây là khác nhau, xong chúng đều là cây. .. giải quyết vấn đề của cây không cân bằng: Đó là cây đỏ đen (cây tìm kiếm nhị phân có thêm một vài đặc điểm) Có nhiều cách tiếp cận khác để bảo đảm cho cây cân bằng: Chẳng hạn cây 2-3-4 nhưng trong phần lớn trường hợp, cây đỏ đen là cây cân bằng hiệu quả nhất, ít ra thì khi dữ liệu được lưu trữ trong bộ nhớ chứ không phải trong những tập tin Trước khi khảo sát cây đỏ đen, hãy xem lại cây không cân bằng... phương pháp trên 7 Cấu trúc khóa luận Ngoài lời cảm ơn, mở đầu, kết luận và hướng phát triển, tài liệu tham khảo, khóa luận được chia thành 3 chương: Chương 1: Cây nhị phân tìm kiếm - Chương này giới thiệu tổng quan về cây, khái niệm và các tính chất của cây, cây nhị phân, cây nhị phân tìm kiếm và các giải thuật tìm kiếm, các thao tác chèn và xóa, tìm kiếm trên cây nhị phân tìm kiếm, tính chất của cây nhị... đen cùng với các lá null là cây nhị phân đầy dủ Khi đó số các "lá null" nhiều hơn số các nút chứa dữ liệu của cây một lá 24 Một số người định nghĩa cây đỏ đen bằng cách gán màu đỏ, đen cho các cạnh chứ không phải các nút Tuy nhiên điều đó không tạo nên sự khác biệt Khi ấy màu của mỗi nút tương ứng với màu của cạnh nối nó với nút cha 2.4 Tính hiệu quả của cây đỏ đen Khi cây một nhánh, sẽ trở thành . 3: Xây dựng chương trình mô phỏng - Chương này phát biểu về bài toán cây đỏ đen và chương trình mô phỏng các thuật toán chèn, xóa, thêm node trên cây đỏ đen. 4 CHƯƠNG 1. CÂY NHỊ PHÂN. kiếm. Chương 2: Cây đỏ đen - Chương này trình bày về khái niệm, tính chất cây đỏ đen, các phép toán chèn, xóa, tìm kiếm trên cây đỏ đen, những hiệu quả khi sử dụng cây đỏ đen. Chương 3: Xây dựng. 2.5. Các thuật toán cơ bản trên cây đỏ đen 25 2.5.1. Thêm một nút mới 25 2.5.2. Xóa một nút 33 2.5.3. Tìm kiếm một nút 37 CHƯƠNG 3. XÂY DỰNG CHƯƠNG TRÌNH MÔ PHỎNG 38 3.1. Phát biểu bài toán

Ngày đăng: 24/09/2015, 08:55

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