Khoá luận tốt nghiệp 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

53 717 0
Khoá luận tốt nghiệp 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 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 TRƯỜNG ĐẠI HỌC sư PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ************* •••• HÀ NỘI - 2015 TRẦN THỊ SIM XÂY DựNG CHƯƠNG TRÌNH MÔ PHỎNG CÁC THUẬT TOÁN 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 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 HÀ NỘI - 2015 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 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 HÀ NỘI - 2015 đỏ đ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 HÀ NỘI - 2015 MỤC LỤC DANH MỤC HÌNH • 1.1. Hình ảnh . 1.2. Cây nhị phân 1.3. Cây nhị phân thứ tự . 1.4. Cây nhị phân lệch 1.5. Cây zíc-zắc . 1.6. Cây nhị phân hoản chỉnh . 1.7. Cây nhị phân đầy đủ 1.8. Cây nhị phân gần đầy 1.9. Cây nhị phân tìm kiếm . 1.10. Tìm nút với khóa x=55 1.11. Xóa nút với khóa X =40 1.12. Xóa nút với khóa X = 37 1.13. Xóa nút với khóa X = 18 1.14. Thêm nút với khóa X = 10 vào 1.15. Cây nhị phân ban đầu 1.16. Thêm nút có khóa X = 1.17. Tái cân lại thêm nút với khóa X = 2.1. Các nút chèn theo thứ tự tăng dần 2.2. Ví dụ đỏ đen . 2.3. Lật màu 2.4. Các biến dạng nút chèn với X cháu ngoại 2.5. Các biến dạng nút chèn với X cháu nội 2.6. Các khả chèn nút . 2.7. Nút p đỏ X cháu ngoại 2.8. p đỏ X nút cháu nội 2.9. Minh họa trường họp 2.10 Minh họa trường hợp 2.11. Minh họa trường hợp . 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 ừong 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 hom. 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 ừên 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 vĩ 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 ừong 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 cân từ giảm thiểu chi phí tìm kiếm liệu liệu danh sách tuyến tính . 6. Phương pháp nghiên cứu + Phương pháp nghiên cứu lý luận Nghiên cứu qua việc đọc sách, báo tài liệu liên quan nhằm xây dựng sở lý thuyết khóa luận biện pháp cần thiết để giải vấn đề khóa luận. + Phương pháp chuyên gia Tham khảo ý kiến chuyên gia để thiết kế chương trĩnh phù hợp với yêu cầu thực tiễn. Nội dung xử lý nhanh đáp ứng yêu cầu ngày cao người sử dụng. + Phương pháp thực nghiệm Thông qua quan sát thực tế, yêu cầu sở, lý luận nghiên cứu kết đạt qua phương pháp trên. 7. Cấu trúc khóa ỉuân Ngoài lòi cảm ơn, mở đầu, kết luận hướng phát triển, tài liệu tham khảo, khóa luận chia thành chương: Chương 1: Cây nhị phân tìm kiếm - Chương giới thiệu tổng quan cây, khái niệm tính chất cây, nhị phân, nhị phân tìm kiếm giải thuật tìm kiếm, thao tác chèn xóa, tìm kiếm nhị phân tìm kiếm, tính chất nhị phân tìm kiếm. Chương 2: Cây đỏ đen - Chương trình bày khái niệm, tính chất đỏ đen, phép toán chèn, xóa, tìm kiếm đỏ đen, hiệu sử dụng đỏ đen. Chương 3: Xây dựng chương trình mô - Chương phát biểu toán đỏ đen chương trình mô thuật toán chèn, xóa, thêm node ừên đỏ đen. CHƯƠNG 1. CÂY NHỊ PHÂN TÌM KIỂM 1.1. Định nghĩa Cây cấu trúc liệu có vai trò quan trọng ừong việc phân tích thiết kế thuật toán. Lưu trữ biểu diễn kiểu thấy nhiều lĩnh vực sống. Ví dụ gia phả lưu thông tin thành viên dòng họ, thành viên thứ bậc khác phân thành cấp khác biểu diễn hình gia phả. Sơ đồ tổ chức đơn vị thường biểu diễn thông qua cấu trúc cây. Các đơn vị nằm cấp đơn vị trực tiếp quản lý. Các đơn vị ngang hàng nằm cấp. Trong lĩnh vực máy tính, cách lưu trữ liệu hệ điều hành áp dụng kiểu lưu trữ cây. Các tệp tin lưu trữ thư mục, thư mục nằm thư mục cha.Cây định nghĩa sau: Cây tập hợp nút (các đinh) cạnh, thỏa mãn số yêu càu đó. Mỗi nút có định danh mang thông tin đó. Các cạnh dùng để liên kết nút với nhau. Một đường danh sách đinh phân biệt mà đỉnh trước có liên kết với đinh sau. Một tính chất quan trọng hình thành nên cây, có đường nối hai nút cây. Nếu tồn hai nút mà có nhiều đường lúc có đồ thị. Mỗi thường có nút gọi nút gốc. Mỗi nút coi nút gốc bao gồm nút bên nó. Trong biểu diễn hình học cây, nút gốc thường nằm vị trí cao nhất, nút kế tiếp. 12) + Quay lần với nút ông bà X (nút 25) đỉnh. Doi mau a) D6i mau va quay c) Tai can bang cay Hinh 25.8. P va x la nut chau noi 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 ừong 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), 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, Sị trái s sr 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. Neu 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ọfp 4, (anh em đen có nút đỏ S). Trong trường họp sau anh em N gọi s. H ì n h 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 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. 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, 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, 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 đỏ 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 ừong 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 đ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. Hình 30.13. Minh họa trường hợp 2.5.3. Tìm kiếm môt 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ự. CHƯƠNG 3. XÂY DƯNG CHƯƠNG TRÌNH MÔ PHỎNG m 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). 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ô 5.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; #defĩne 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 ừá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; /* 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; i f ( x != 3.2.4. NƯIL) x->parent = y;} 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*/ 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; rotateLeữ (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); 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; 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: S3 Untitled - DemoBlackAndRedTree File Edit View Help Click 'mui ten” de Insert gia tri vao oay Click 'X' de Delete gia trí khoi cay Click bieư tuong cuoi, de tim gia tri 'BEăH = Ready ỊlMUM Hình 31.1. From giao diện chương trình □ eg y m f ± XP\ File Edit View Hielp Hình 32.2. From chức chèn phàn tử 3.3.3. Chức xóa phần tử ■ □ Bi B I Ẵ % m Ị # f ik X P I_____________ DemoBlackA ndRedT . Hình 33.3. From chức xóa phần tử 3.3.4. Chức tìm phần tử File Edit View Help____________________________ DemoBiackAndRedT . 1—T%wj Tim thay ị QK i| Ready_____________________________________________________________________________________________________________________________________[ Hình 34.4. From chức tìm phần tử 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 ừên đườ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 ừánh khỏi sai sót. Em mong đóng góp ý kiến thầy, cô giáo 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. [...]... 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 đi xuống Phép thêm vào trong cây đỏ đen bắt đầu như trên cây tìm kiếm nhị phân thông thường: Đi theo một đường dẫn từ nút gốc... mỗi nút khác trên cây Các nút không có con được gọi là lá (leaf node) Trong cây đỏ đen, các lá được gán giả là null, nghĩa là chúng không chứa bất kỳ dữ 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 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 nhất không vượt quá hai lần đường đi ngắn nhất Do đó cây đỏ đen là gần cân bằng Vì các thuật toán chèn, xóa, tìm kiếm trong trường hợp xấu nhất đều tỷ lệ với chiều cao của cây nên cây đỏ đen rất hiệu quả trong các trường hợp xấu nhất, không giống như cây tìm kiếm nhị phân... 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 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á 2 9 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... 19.2 Ví dụ về cây đỏ đen Số lượng nút đen trên một đường dẫn từ gốc đến lá được gọi là chiều cao đen (black height) Có thể phát biểu quy tắc 4 theo 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 ừong 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... nút đỏ là đen và suy ra mọi nút đỏ có nút cha là 2 8 đen + 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 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. .. 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 gốc và các nút lá phải luôn luôn đen + Nếu một nút là đỏ, những nút con của nó phải đen 2 7 + Mọi đường dẫn từ gốc đến một lá phải có cùng số lượng node đen Khi chèn (hay xóa) một nút mới, cần phải tuân thủ các quy tắc ừên gọi là quy tắc đỏ - đen Nếu được tuân thủ cây. .. có các lá có chứa dữ liệu Tuy nhiên có thể biểu diễn cây đỏ đen, có một chút thay đổi mà không làm thay đổi tính 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 ừá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. .. 1.7 Cây nhị phân đày đủ Hình 1.8 Cây nhị phân gần đầy Các hình trên là một số dạng đặc biệt của cây nhị phân Các cây nhị phân hình 1.4 được gọi là cây nhị phân suy biến vì thực chất nó có dạng của một danh sách tuyến tính Cây nhị phân hình 1.5 được gọi là cây nhị phân hoàn chỉnh Các nút ứng với các mức trừ mức cuối cùng đều đạt tối đa và mức cuối cùng các nút đều dạt về ừái Cây nhị phân hình 1.6 có các. .. 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 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 nhị phân không có thứ tự 1 1 Hình 1.3 Cây nhị phân không có thứ tự a) Cây lệch trái b) Cây lệch phải 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ị . 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,. chọn đề tài: Xây dựng 7 chương trình mô phỏng các thuật toán cơ bản trên cây đỏ đen để làm khóa luận. 2. Mục đích của đề tài Đề tài nhằm nghiên cứu lý thuyết về cây đỏ đen, một dạng cây tìm kiếm nhị. NGHỆ THÔNG TIN ************* HÀ NỘI - 2015 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

Ngày đăng: 24/09/2015, 11:47

Từ khóa liên quan

Mục lục

  • 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

    • 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

      • MỤC LỤC

      • DANH MỤC HÌNH

      • MỞ ĐÀU

        • 1. Lý do chọn đề tài

        • 2. Mục đích của đề tài

        • 3. Nhiệm vụ nghiên cứu

        • 4. Đổi tượng và phạm vi nghiên cứu

        • 5. Ý nghĩa khoa học và thực tiễn

        • CHƯƠNG 1. CÂY NHỊ PHÂN TÌM KIỂM

          • 1.3. Cây nhị phân tìm kiếm

          • 1.4. Giải thuât tìm kiếm ■

          • 1.4.1. Tìm một node trên cây tìm kiếm

          • CHƯƠNG 2. CÂY ĐỎ ĐEN

            • 2.2. Định nghĩa

            • 2.3 Tính chất

            • 2.4 . Tính hiệu quả của cây đỏ đen

            • 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.3. Tìm kiếm môt nút

            • CHƯƠNG 3. XÂY DƯNG CHƯƠNG TRÌNH MÔ PHỎNG

              • 3.1. Phát biểu bài toán

              • 3.2. Xây dựng chương trình mô phỏng

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

Tài liệu liên quan