Thực thi các phương pháp ADT từ điển có sắp thứ tự dùng một cây AVL

9 313 0
Thực thi các phương pháp ADT từ điển có sắp thứ tự dùng một cây AVL

Đang tải... (xem toàn văn)

Thông tin tài liệu

Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng Lời nói đầu Ngày phát triển ngành tin học đóng vai trò to lớn đời sống ngời Tin học đợc ứng dụng rộng rãi nhiều ngành, nhiều lĩnh vực hiệu cao, giải nhiều công việc mà tởng chừng ngời khó thực Tuy nhiên hệ thống tin học ngày phức tạp, xu áp dụng phơng pháp thiết kế hớng đối tợng ngày đợc sử dụng rộng rãi thay cho phơng pháp cấu trúc (là phơng pháp truyền thống) ngày đợc phổ biến xây dựng phần mềm lớn phức tạp Vì môn học Lập trình hớng đối tợng môn học đợc dạy hầu hết khoa Công nghệ thông tin trờng Đại học Với mục tiêu trang bị cho sinh viên khoa Công nghệ thông tin kiến thức sở lập trình hớng đối tợng, làm móng để phát triển sau Với kiến thức học, tài liệu tham khảo, dới trực tiếp giảng dạy hớng dẫn thầy Huỳnh Quyết Thắng, tìm hiểu xây dựng toán Thực thi phơng pháp ADT từ điển có thứ tự dùng AVL Vì trình độ nh thời gian có hạn nên không tránh khỏi khuyết điểm, không đầy đủ , thiếu sót, mong bạn đóng góp ý kiến Cuối xin chân thành cám ơn hớng dẫn nhiệt tình thầy Huỳnh Quyết Thắng - Bộ môn Công nghệ phần mềm, dẫn tận tình giúp đỡ hoàn thành tập ! Đối với toán đợc đa , có cách khác để giải toán, cho khảo sát, sử dụng hiệu khác Trong báo cáo giải thích cách khảo sát khác để giải toán thực thi từ điển có thứ tự Tức ta Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng ngnhiên cứu vài cấu trúc liệu dựa khác để thể từ điển có thứ tự Thao tác tìm kiếm nhị phân tìm kiếm thao tác quan trọng, làm sở, móng cho thao tác khác Thao tác dựa thủ tục TreeSearch(k,v) k: khóa tìm kiếm ; v: nút nhị phân tìm kiếm; kết trả nút w T(v) TreeSearch (int k,CBTNode *v) { if (isExternal(v)) return v; if (k== v->keys()) return v; else if (kkeys()) return TreeSearch(k,v->getLeft()); else return TreeSearch(k,v->getRight()); } Cũng nh vậy, thao tác cập nhật nhị phân tìmkiếm với thao tác Chèn(insertitem(k,e)) Gỡ bỏ(removeElement(k)) từ điển D đợc thực thi với nhị phân tìm kiếm Với phép chèn: ta bắt đầu bằng cách gọi thủ tục TreeSearch(k,T.root()) T phép xử lý kết trả Vì số lợng nút thăm tỷ lệ với chiều cao h T trong trờng hợp xấu thao tác thực với thời gian O(h) Với phép gỡ bỏ: ta phải bắt đầu với thủ tục TreeSearch(k,T.root()) phép xử lý kết trả (Kết thúc không tìm thấy nút có khóa k phép gỡ bỏ cấu trúc lại) Thuật toán gỡ bỏ tơng tự nh thuật toán chèn tìm Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng kiếm Ta bỏ O(1) thời gian nút thăm trờng hợp xấu , số lợng nút thăm tỷ lệ với chiều cao h T thao tác removeElement(k) chạy thời gian O(h) Khả vận hành: Phép toán Thời gian Size , isEmpty O(1) FindElement, insertitem,remove Element O(h) FindAllElements, remove AllElements O(h+s) Để mô tả lớp nhị phân tìm kiếm ta xây dựng lớp BinarySearchTree, lớp lu trữ cặp khóa - thành phần lớp item(lu trữ vị trí (các nút) nhị phân sở nó) Lớp BinarySearchTree độc lập với cách thực thi cụ thể nhị phân vận dụng khả dùng lại mã CBinaryTree root CItem roots() setRoot() isInternal() isExternal() insertItem() removeElement() TreeSearch() key elem keys() elements() setKey() setElement() Mô hình nhị phân mang lại nhiều điểm lý thú , nhiên khả vận hành trờng hợp xấu mà đạt đợc cho nhiều phép toán khác theo thời gian tuyến tính không tốt khả vận hành thực thi từ điển gốc Khắc phục vấn đề (để đạt đợc thời gian loga cho tất phép toán từ điển bản) cách bổ sung quy tắc vào phần định nghĩa nhị phân tìm kiếm; tính chất chiều cao cân đối Tính chất chiều cao cân đối: Với nút T, chiều cao của v khác tối đa Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng H.9.9(a) H.9.9(b) 9.9.a: Hình sau thêm nút có khoá 54 nút có khoá (78 44) trở nên không cân 9.9.b: Hình sau nút đợc cấu trúc( xếp) lại Các phép toán chèn gỡ bỏ AVL tơng tự nh trờng hợp nhị phân tìm kiếm; song phải thực phép toán bổ sung để đảm bảo tính chất AVL Và nh phải bổ xung thêm thủ tục Restructure(x) - phơng pháp cấu trúc lại nút; thời gian chạy cho trờng hợp đạt đợc thời gian loga Khả vận hành: Phép toán Thời gian Size , isEmpty O(1) FindElement, insertitem,remove Element O(logn) FindAllElements, remove AllElements O(logn+s) Để mô tả cho AVL xây dựng lớp AVLitem - mở rộng lớp item; lớp AVLTree mở rộng lớp BinarySearchTree CAVLTree reStructure_a() reStructure_b() reStructure_c() reStructure_d() reStructure() tallerChild() setHeightTree() CAVLItem height getHeight() setHeight() Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng Trong vài cấu trúc liệu mà ta thờng gặp đa hớng(các có mắt có trở lên) nh rõ ràng khả lu trữ tăng lên rõ rệt Tuy nhiên ta không đề cập đến thao tác cập nhật tìm kiếm đa hớng Việc tìm kiếm đa hớng đơn giản: ta thực lần tìm kiếm nh cách vẽ lộ trình T gốc Khi nút v-d(là nút có d khóa ) ta so sánh k với khóa k1, k2, , kd-1 đợc lu trữ v; k = ki đợt tìm kiếm kết thúc thành công Bằng không ta tiếp tục tìm kiếm nh vậy; đạt đến nút mà khôn có nút có khóa k đợt tìm kiếm kết thúc không thành công A B C Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng Hỡnh 9.3: (A) Mt cõy tỡm kim a ng; (B) Tỡm ng i T cho khoỏ 12 (khụng thnh cụng); (C) Tỡm ng i T cho khoỏ 24 (thnh cụng) Trờng hợp đặc biệt đa hớng (2,4); (2,4) có đặc điểm trì đa hớng trạng thái cân Muốn phải trì hai tính chất đơn giản sau: Tính chất kích cỡ: mắt có tối đa mắt Tính chất chiều sâu: tất mắt có chiều sâu Các thao tác cập nhật tìm (2,4) đợc thực với việc bắt đầu việc tìm kiếm khóa k (nh việc tìm kiếm tìm đa hớng) Khả vận hành: Phép toán Thời gian Size , isEmpty O(1) FindElement, insertitem,remove Element O(logn) FindAllElements, remove AllElements O(logn+s) Đối với phơng pháp chèn bảo đảm tính chất chiều sâu; nhng vi phạm tính chất kích cỡ kiểu vi phạm đợc gọi cố tràn nút v; để sửa cố tràn thực phép tách(split) v Chúng ta dễ dàng nhận thấy tổng thời gian để thực phép chèn (2,4) thời gian O(logn) Phép gỡ bỏ bảo đảm tính chất chiều sâu; nhng vi phạm tính chất kích cỡ v Mặc dù AVL (2,4) có số thuộc tính tốt nhng có ứng dụng từ điển mà chúng không phù hợp Ví dụ, AVL yêu cầu nhiều thao tác xây dựng lại có phần tử đợc loại bỏ; AVL yêu cầu nhiều thao tác hợp loại bỏ Còn trúc liệu mà xét chơng này, đỏ đen, hạn chế đó, nhiên yêu cầu thay đổi có cấu trúc O(1) đợc phép tạo sau lần cập nhật để trì cân Một đỏ đen Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng nhị phân nhị phân tìm kiếm mà nút đợc tô màu đỏ đen theo cách nh sau : Gốc màu đen Mọi nút màu đen Các nút đỏ đen Các nút có độ sâu đen nh nhau, đợc định nghĩa số tổ tiên đen trừ Mô tả lớp đỏ đen: CRBTree insertItem() removeElement() reStructureRB_a() reStructureRB_b() reStructureRB_c() reStructureRB_d() reStructureRB() reStructureRBTree() reStructure1() reStructure2() reStructure3() Xem xét việc chèn phần tử x với khoá k đỏ đen T, sử dụng tơng ứng T (2,4) T thuật toán chèn cho T Thuật toán chèn thao tác nh nhị phân tìm kiếm Đó là, tìm k T gặp nút T, thay nút nút z, lu trữ (k,x) có nút Nếu z gốc T, ta tô màu đen cho z, trờng hợp khác tô màu đỏ Chúng ta tô màu z màu đen Thao tác tơng ứng với việc chèn (k.x) vào nút (2,4) T với Thêm vào hành động bảo toàn thuộc tính gốc, độ sâu T nhng vi phạm thuộc tính Thực z gốc T cha v z đỏ có cha (đó v z) màu đỏ Chú ý theo thuộc tính gốc, v gốc Tvà theo thuộc tính (đã đợc thoả mãn trớc ) cha u cua v phải đen Vì z cha Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng đỏ nhng ông z u lại đen nên gọi vi phạm thuộc tính đỏ kép nút z Cũng nh loại bỏ phần tử khỏi xuất tình trạng đen kép Trong tất trờng hợp nh phải sử dụng thủ tục reStructure() để xây dựng lại Từ phân tích xây dựng lớp sơ đồ kế thừa nh sau: (trang sau) Báo cáo tổng hợp đồ án môn học Lập trình hớng đối tợng CItem key elem keys() elements() setKey() setElement() CAVLTree reStructure_a() reStructure_b() reStructure_c() reStructure_d() reStructure() tallerChild() setHeightTree() CBTNode left right parent sibling CAVLItem height getLeft() getRight() getParent() getSibling() setLeft() setRight() setParent() setSibling() isBalanced() isDoubleRed() isDoubleBlack() maxHeight() setHeightNode() getHeight() setHeight() CBinaryTree root roots() setRoot() isInternal() isExternal() insertItem() removeElement() TreeSearch() CRBTree insertItem() removeElement() reStructureRB_a() reStructureRB_b() reStructureRB_c() reStructureRB_d() reStructureRB() reStructureRBTree() reStructure1() reStructure2() reStructure3()

Ngày đăng: 23/06/2016, 17:15

Từ khóa liên quan

Mục lục

  • Lêi nãi ®Çu

  • PhÐp to¸n

  • Thêi gian

  • PhÐp to¸n

  • Thêi gian

  • PhÐp to¸n

  • Thêi gian

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

Tài liệu liên quan