Bài giảng cấu trúc dữ liệu chương 6 nguyễn xuân vinh

30 346 0
Bài giảng cấu trúc dữ liệu  chương 6   nguyễn xuân vinh

Đ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

GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU CẤU TRÚC DỮ LIỆU DATA STRUCTURES [214331] TẬP HỢP (SET) /XX 12/3/15 Teacher: Nguyễn Xuân Vinh Email: nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Nội dung  Nhắc lại Collection  Tập hợp gì?  Phân loại tập hợp  Set (tập hợp) phép toán  Hiện thực Set  Bằng mảng  Bằng danh sách liên kết  Collection cấu trúc gồm nhiều phần tử  Có nhiều kiểu collection: Stack, Queue, List, Set, Graph, Tree, Hashtable…  Nó phân thành nhóm:  Linear: stack, queue, set, hashtable…  Non-Linear: tree, graph… MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Collection /XX 12/3/15 Non-Linear Non-Linear collection collection Linear Linear collection collection GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Collection  Việc tổ chức phần tử bên collection thường dựa yếu tố sau:  Order: Thứ tự phần tử thêm vào vật chứa  Mối quan hệ phần tử  Unique: tính  Ví dụ: danh sách người xếp dựa thứ tự tên (alphabetical) hay lưu trữ phụ thuộc vào thứ tự thêm vào GV: NGUYỄN XUÂN VINH Tập hợp (Set)  Tập hợp nhóm phần tử mà mối quan hệ phần tử không xét đến Giống bạn ném tất phần tử vào hộp Và phần tử  Tập hợp cấu trúc dạng phi tuyến dùng cấu trúc dạng tuyến tính để thực /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Các phép toán Collection  Mỗi collection định nghĩa tập hợp phép toán giúp tương tác với  Các phép toán thông thường là:  Thêm, xóa phần tử  Kiểm tra xem collection có rỗng hay không  Tính kích thước collection  Iterator, xử lý phần tử collection  Các phép toán dùng để tương tác với collection khác GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Các phép toán Set Phép toán Mô tả add Thêm phần tử vào tập hợp addAll Thêm tất phần tử tập hợp vào tập hợp khác removeRandom Xóa phần tử ngẫu nhiên tập hợp remove Xóa phần tử khỏi tập hợp union Hợp phần tử tập hợp vào tập hợp thứ contains Xác định xem phần tử có nằm tập hợp hay không equals Xác định xem tập hợp có chứa phần tử giống hay không isEmpty Xác định xem tập hợp có rỗng hay không size Xác định số phần tử tập hợp iterator Đưa cách duyệt tất phần tử tập hợp toString Đưa cách hiển thị cho tập hợp GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX Mô hình UML lớp SetADT SetADT add() addAll() removeRandom() remove() union() contains() equals() isEmpty() size() iterator() toString() /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH SetADT.java 10 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH SetADT.java GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 16 Dùng mảng: Quản lý sức chứa  Hai cách lựa chọn đầu buộc người dùng tập hợp phải cảnh giác giải với tình xảy  Cách thứ tốt hơn, đặc biệt hỗ trợ việc tách rời phần thực lớp interface  Sức chứa vấn đề thực, không nên giao cho người dùng giải lý đặc biệt  Các phần tử tập hợp lưu trữ kế đầu mảng  Chúng ta cần:  biến count để lưu trữ tổng số phần tử có tập hợp  Một mảng content dùng để chứa nội dung tập hợp 17 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Dùng mảng: Hiện thực tập hợp Các phần tử lưu trữ kề 18 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Dùng mảng: Các phương thức cần cài đặt GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 19 Dùng mảng: Demo  SetADT.java  ArraySet.java  ArrayIterator.java  EmptySetException.java  ElementNotFoundException.java GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 20 Dùng mảng: Độ phức tạp phép toán  Nếu tập hợp chưa đầy, phép thêm phần tử: O(1)  Mở rộng tập hợp: O(n)  Loại bỏ phần tử định khỏi tập hợp: O(n)  Loại bỏ phần tử khỏi tập hợp: O(1)  Thêm tập hợp vào tập hợp này: O(n)  Phép hợp hai tập hợp: O(m+n) với m kích thước tập hợp thứ hai GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 21 Dùng Linked List: Hiện thực tập hợp  Chúng ta cần:  Một biến count để lưu trữ số phần từ có tập hợp  Một biến contents dùng để lưu trữ node tập hợp 22 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Dùng Linked List: UML GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 Dùng Linked List: Độ phức tạp  Vì ta không quan tâm đến thứ tự, độ phức tạp thêm phần tử vào tập hợp O(1)  Xóa phần tử cho trước có độ phức tạp O(n) phải duyệt qua danh sách để tìm phần tử  Xóa phần tử có độ phức tạp O(n) GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Set implementations in Java  Set is an interface; you can't say new Set()  There are two implementations:  java.util.HashSet is best for most purposes  we won't use the other one: TreeSet  Java's set implementations have been optimized so that it is very fast to search for elements in them contains method runs in constant time! (How?!)  Preferred: HashSet s = new HashSet(); 24 /XX 12/3/15 Not: Set s = new HashSet(); 24 GV: NGUYỄN XUÂN VINH  Why are these methods missing from Set?  get(int index)  add(int index, Object o)  remove(int index)  How we access the elements of the set?  How we get a particular element out of the set, such as element or element 7?  What happens when we print a Set? Why does it print what it does? 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Limitations of Sets 25 GV: NGUYỄN XUÂN VINH  A set has a method iterator to create an iterator over the elements in the set  The iterator has the usual methods:  boolean hasNext()  Object next()  void remove() 26 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Iterators for Sets 26 GV: NGUYỄN XUÂN VINH Typical set operations  Sometimes it is useful to compare sets:  subset: S1 is a subset of S2 if S2 contains every element from S1    union: S1 union S2 contains all elements that are in S1 or S2 intersection: S1 intersect S2 contains only the elements that are in both S1 and S2 difference: S1 difference S2 contains the elements that are in S1 that are not in S2  How could we implement these operations using the methods in Java's Set interface? 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU  Many times it is useful to combine sets in the following ways: 27 GV: NGUYỄN XUÂN VINH How does a HashSet work?  every object has a reasonably-unique associated number called a hash code  public int hashCode() in class Object  HashSet stores its elements in an array a such that a given element o is stored at MÔN: CẤU TRÚC DỮ LIỆU index o.hashCode() % array.length   any element in the set must be placed in one exact index of the array searching for this element later, we just have to check that one place to see if it's there (O(1))  "Tom Katz".hashCode() % 10  "Sarah Jones".hashCode() %  "Tony Balognie".hashCode() == 10 == % 10 == 28 /XX 12/3/15  you don't need to understand this 28 GV: NGUYỄN XUÂN VINH Membership testing in HashSets  When testing whether a HashSet contains a given object:   Java computes the hashCode for the given object looks in that index of the HashSet's internal array  Java compares the given object with the object in the HashSet's array using equals; if they are equal, returns true MÔN: CẤU TRÚC DỮ LIỆU  Hence, an object will be considered to be in the set only if both:   It has the same hash code as an element in the set, and The equals comparison returns true  an object that is put into a HashSet works best if it has a public int hashCode()method defined String, Integer, Double, etc have this already 29 /XX 12/3/15  29 30 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP [...]... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH 1 Dùng mảng: Hiện thực tập hợp Các phần tử được lưu trữ kề nhau 18 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH 1 Dùng mảng: Các phương thức cần cài đặt GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 19 1 Dùng mảng: Demo  SetADT.java  ArraySet.java  ArrayIterator.java  EmptySetException.java  ElementNotFoundException.java GV: NGUYỄN XUÂN... hợp thứ hai GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 21 2 Dùng Linked List: Hiện thực tập hợp  Chúng ta cần:  Một biến count để lưu trữ số phần từ hiện có của tập hợp  Một biến contents dùng để lưu trữ node đầu tiên của tập hợp 22 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH 2 Dùng Linked List: UML GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 23 2 Dùng Linked List:... cũng có thể ném ra ngoại lệ nếu tình huống này xảy ra  Có nhiều cách để hiện thực tập hợp  Dùng mảng  Dùng danh sách liên kết GV: NGUYỄN XUÂN VINH /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Cài đặt tập hợp 14 Danh sách liên kết Mảng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 15 1 Dùng mảng: Quản lý sức chứa  Một mảng khi khởi tạo cần biết trước kích thước của nó, gọi là sức chứa (capacity)... interface? 27 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU  Many times it is useful to combine sets in the following ways: 27 GV: NGUYỄN XUÂN VINH How does a HashSet work?  every object has a reasonably-unique associated number called a hash code  public int hashCode() in class Object  HashSet stores its elements in an array a such that a given element o is stored at MÔN: CẤU TRÚC DỮ LIỆU index o.hashCode() %... MÔN: CẤU TRÚC DỮ LIỆU  Hence, an object will be considered to be in the set only if both:   It has the same hash code as an element in the set, and The equals comparison returns true  an object that is put into a HashSet works best if it has a public int hashCode()method defined String, Integer, Double, etc have this already 29 /XX 12/3/15  29 30 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH. .. GV: NGUYỄN XUÂN VINH  Why are these methods missing from Set?  get(int index)  add(int index, Object o)  remove(int index)  How do we access the elements of the set?  How do we get a particular element out of the set, such as element 0 or element 7?  What happens when we print a Set? Why does it print what it does? 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Limitations of Sets 25 GV: NGUYỄN XUÂN VINH. ..GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 11 Iterator  Iterator là một đối tượng cho phép người dùng triệu gọi và sử dụng từng phần tử trong collection  Chương trình thiết kế để xác định:  Thứ tự của các phần tử  Cách mà iterator sẽ hiện thực  Trong trường hợp của Set không có 1 thứ tự đặc biệt nào cho các phần tử nên sự sắp xếp của các phần tử trong iterator là ngẫu nhiên GV: NGUYỄN... has a method iterator to create an iterator over the elements in the set  The iterator has the usual methods:  boolean hasNext()  Object next()  void remove() 26 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Iterators for Sets 26 GV: NGUYỄN XUÂN VINH Typical set operations  Sometimes it is useful to compare sets:  subset: S1 is a subset of S2 if S2 contains every element from S1    union: S1 union S2 contains... XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 20 1 Dùng mảng: Độ phức tạp của các phép toán  Nếu tập hợp chưa đầy, phép thêm 1 phần tử: O(1)  Mở rộng 1 tập hợp: O(n)  Loại bỏ một phần tử được chỉ định ra khỏi tập hợp: O(n)  Loại bỏ một phần tử bất kỳ ra khỏi tập hợp: O(1)  Thêm 1 tập hợp vào tập hợp này: O(n)  Phép hợp hai tập hợp: O(m+n) với m là kích thước của tập hợp thứ hai GV: NGUYỄN XUÂN VINH. .. chứa của tập hợp  Chúng ta nên làm gì khi người dùng cố thêm 1 phần tử vào tập hợp đã đầy:  Ném biệt lệ  Trả về 1 trạng thái chỉ thị  Tự động mở rộng kích thước mảng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 16 1 Dùng mảng: Quản lý sức chứa  Hai cách lựa chọn đầu buộc người dùng tập hợp phải cảnh giác và giải quyết với các tình huống xảy ra  Cách thứ 3 tốt hơn, đặc biệt là hỗ trợ ... /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH SetADT.java 10 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH SetADT.java GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX... graph… MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Collection /XX 12/3/15 Non-Linear Non-Linear collection collection Linear Linear collection collection GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15...  Dùng danh sách liên kết GV: NGUYỄN XUÂN VINH /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Cài đặt tập hợp 14 Danh sách liên kết Mảng GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 15 Dùng mảng:

Ngày đăng: 03/12/2015, 06:43

Mục lục

    Các phép toán trên Collection

    Mô hình UML của lớp SetADT<T>

    Các lỗi trên Tập hợp (Set)

    Cài đặt tập hợp

    1. Dùng mảng: Quản lý sức chứa

    1. Dùng mảng: Quản lý sức chứa

    1. Dùng mảng: Hiện thực tập hợp

    1. Dùng mảng: Các phương thức cần cài đặt

    1. Dùng mảng: Độ phức tạp của các phép toán

    2. Dùng Linked List: Hiện thực tập hợp

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

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

Tài liệu liên quan