1. Trang chủ
  2. » Công Nghệ Thông Tin

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

30 348 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 30
Dung lượng 330,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

– Order: Thứ tự các phần tử thêm vào vật chứa– Mối quan hệ giữa các phần tử – Unique: tính duy nhất • Ví dụ: danh sách người có thể được sắp xếp dựa trên thứ tự tên alphabetical hay được

Trang 1

Teacher: Nguyễn Xuân Vinh Email: nguyenxuanvinh@hcmuaf.edu.vn

CẤU TRÚC DỮ LIỆU DATA STRUCTURES

[214331]

Trang 3

Graph, Tree, Hashtable…

– Linear: stack, queue, set, hashtable…

– Non-Linear: tree, graph…

Non-Linear collection

Non-Linear collection

Trang 4

– Order: Thứ tự các phần tử thêm vào vật chứa

– Mối quan hệ giữa các phần tử

– Unique: tính duy nhất

• Ví dụ: danh sách người có thể được sắp xếp dựa trên thứ tự tên (alphabetical) hay được lưu trữ phụ thuộc vào thứ tự thêm vào

Trang 5

• Tập hợp là một cấu trúc dạng phi tuyến nhưng chúng ta vẫn có thể dùng một cấu trúc dạng tuyến tính để hiện thực nó.

Trang 6

• Mỗi 1 collection đều định nghĩa 1 tập hợp các phép toán giúp chúng ta tương tác với nó.

• Các phép toán này thông thường là:

– Thêm, xóa các phần tử

– Kiểm tra xem collection đó có rỗng hay không

– Tính kích thước của collection

– Iterator, xử lý từng phần tử trong collection đó

– Các phép toán dùng để tương tác với các collection khác

Trang 7

addAll Thêm tất cả các phần tử của 1 tập hợp vào trong 1 tập hợp khác

removeRandom Xóa 1 phần tử ngẫu nhiên trong tập hợp

remove Xóa 1 phần tử ra khỏi tập hợp

union Hợp các phần tử của 2 tập hợp vào 1 tập hợp thứ 3

contains Xác định xem 1 phần tử có nằm trong tập hợp hay không

equals Xác định xem 2 tập hợp có chứa các phần tử giống nhau hay không

isEmpty Xác định xem tập hợp có rỗng hay không

iterator Đưa ra 1 cách duyệt tất cả các phần tử trong tập hợp

toString Đưa ra 1 cách hiển thị cho tập hợp

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

Trang 8

union() contains() equals() isEmpty() size()

iterator() toString()

<<interface>>

Trang 12

• Các collection hỗ trợ Iterator thường có phương thức iterator() trả

về 1 đối tượng kiểu Iterator

• Iterator thực ra là một interface định nghĩa trong bộ thư viện

chuẩn của Java

• Các phương thức trong Iterator:

– hasNext(): trả về true nếu còn phần tử trong iterator

– next(): trả về phần tử kế tiếp trong iterator

– remove(Object obj): xóa một phần tử trong collection

Trang 13

• Các collection phải luôn quản lý các vấn đề trong các tình huống 1 cách thật cẩn thận.

– Ví dụ: xóa 1 phần tử ra khỏi danh sách rỗng

• Người thiết kế ra các collection có nhiệm vụ quyết định cách giải quyết cho những vấn đề này

– Ta có thể định nghĩa phương thức isEmpty() dùng để kiểm tra trước khi thực hiện xóa phần tử

– Ta cũng có thể ném ra ngoại lệ nếu tình huống này xảy ra

Trang 14

– Dùng mảng– Dùng danh sách liên kết

Trang 15

• Sức chứa của mảng cũng chính là sức 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

Trang 20

• 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

Trang 21

– 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

Trang 24

• 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: Set s = new HashSet();

Not: HashSet s = new HashSet();

Trang 25

• 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?

Trang 26

• 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()

Trang 27

• Sometimes it is useful to compare sets:

– subset: S1 is a subset of S2 if S2 contains every element from

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?

Trang 28

• 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 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))

Trang 29

• 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

• 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

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

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm