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

37 354 0
Bài giảng cấu trúc dữ liệu  chương 8   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 CẤU TRÚC DỮ LIỆU DATA STRUCTURES MÔN: CẤU TRÚC DỮ LIỆU [214331] HASH TABLE Nguyễn Xuân Vinh /XX 12/3/15 nguyenxuanvinh@hcmuaf.edu.vn GV: NGUYỄN XUÂN VINH  Giới thiệu  Các vấn đề với ArrayList, Linked List  Bảng băm “hoàn hảo”  Hàm băm hoàn hảo  Phương pháp xây dựng hàm băm  Ưu điểm bảng băm  Các cách giải xung đột (collision)  Các bảng băm phổ biến (đọc them)  Java Map Interface  Map implementations in Java  HashMap example /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Nội dung 2 GV: NGUYỄN XUÂN VINH Giới thiệu MÔN: CẤU TRÚC DỮ LIỆU Tất thao tác 12/3/15 phải so sánh khoá!!! /XX Khắc phục? 3  Bài toán: cần lưu trữ mẫu tin thực thao tác  Thêm mẫu tin  Xoá mẫu tin  Tìm mẫu tin theo khóa  Tìm cách thức thực cách hiệu quả? /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 4  Unsorted array  Sử dụng mảng để lưu mẫu tin, thứ tự  Thêm: thêm cuối nhanh O(1)  Xoá: chậm tìm xoá O(n)  Tìm kiếm: chậm O(n) /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 5  Sorted array  Sử dụng mảng lưu trữ mẫu tin, có thứ tự  Thêm: chèn vào vị trí, chậm O(n)  Xoá: phải dời phần tử phía sau, chậm O(n)  Tìm: nhị phân, nhanh O(logn) /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 6  Linked list  Lưu trữ mẫu tin danh sách liên kết  Thêm: nhanh, O(1)  Xoá: nhanh xoá nút, chậm tìm O(n)  Tìm kiếm: tìm kiếm O(n) /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 7  Cấu trúc liệu phức tạp hơn, thực thi tốt  Tree BST  Hash table /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 8 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Array as table 0012345 An 8.15 0033333 Binh 90 0056789 Danh 5.68 9801010 Phuong 2.0 9802020 Minh 10.0 9903030 Thao 7.3 9908080 Tung 4.9 /XX 12/3/15 Vấn đề: lưu trữ 10,000,000 mẫu tin sinh viên tìm kiếm theo mã số sinh viên Vấn đề: lưu trữ 10,000,000 mẫu tin sinh viên tìm kiếm theo mã số sinh viên GV: NGUYỄN XUÂN VINH Array as table MÔN: CẤU TRÚC DỮ LIỆU : : : An 8.15 : : Binh 9.0 : : Danh 5.68 : : : : : : Tung 4.9 : : 12345 : 33333 : 56789 : 9999999 /XX 12/3/15 9908080 Một cách “stupid” lưu trữ mẫu tin mảng cực lớn 9999999 Một cách “stupid” lưu trữ mẫu tin mảng cực lớn 9999999 Index sử dụng mã số sinh viên Khi mẫu tin sv với Index sử dụng mã số sinh viên Khi mẫu tin sv với ms 0012345 lưu trữ A[12345]! ms 0012345 lưu trữ A[12345]! 10 10 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 24 Collision: PP kết nối trực tiếp  Bảng băm có tập khóa số nguyên, tập địa có 10 địa Bảng 30 50 11 21 32 62 33 53 54 74 25 55 36 56 27 47 48 98 39 59 41 74 địa 57 69 GV: NGUYỄN XUÂN VINH Collision: PP dò tuyến tính (Linear Probe)  Nếu băm lần đầu bị xung đột băm lại lần 1, bị xung đột băm lai lần 2,… Quá trình băm lại diễn không xung đột  Các phép băm lại (rehash function) thường chọn địa khác cho phần tử hi(key)=(h(key)+i) %M 25 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU với h(key) hàm băm bảng băm GV: NGUYỄN XUÂN VINH Collision: PP dò bậc hai (Quadratic Probing)  Hàm băm lại phương pháp dò bậc hai truy xuất địa cách bậc  Hàm băm lại hàm i biểu diễn công thức sau: hi(key)=( h(key) + i ) % M 26 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU với h(key) hàm băm bảng băm  Nếu dò đến cuối bảng trở dò lại từ đầu bảng  M nên số nguyên tố GV: NGUYỄN XUÂN VINH  Phương pháp băm kép (Double hashing Method): phương pháp băm lại dùng lúc hai hàm băm  Sinh viên đọc thêm tài liệu:  Nguyễn Hồng Chương, CTDL ứng dụng cài đặt C, NXB TPHCM, 2005, p413    http://en.wikipedia.org/wiki/Hash_table http://www.sparknotes.com/cs/searching/hashtables/section1.html http://www.cs.auckland.ac.nz/software/AlgAnim/hash_tables.html /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Các bảng băm phổ biến khác 27 27 GV: NGUYỄN XUÂN VINH Java's Map interface public interface Map { Object put(Object key, Object value); Object get(Object key); Object remove(Object key); Basic ops boolean containsKey(Object key); boolean containsValue(Object value); MÔN: CẤU TRÚC DỮ LIỆU int size(); boolean isEmpty(); void putAll(Map map); Bulk ops void clear(); Set keySet(); Collection Collection values(); views 28 /XX 12/3/15 } 28 GV: NGUYỄN XUÂN VINH  Map is an interface; you can't say new Map()  There are two implementations:  java.util.HashMap is best for most purposes  we won't use the other one: TreeMap  Preferred: Not: Map m = new HashMap(); HashMap m = new HashMap(); 29 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Map implementations in Java 29 GV: NGUYỄN XUÂN VINH HashMap example HashMap grades = new HashMap(); HashMap grades grades.put("Martin", "A"); grades.put("Nelson", "F"); HashMapEntry grades.put("Milhouse", "B"); MÔN: CẤU TRÚC DỮ LIỆU // What grade did they get? System.out.println( "Martin" "A" HashMap grades.get("Nelson")); System.out.println( HashMapEntry grades.get("Martin")); grades.put("Nelson", "W"); "Nelson" "F" grades.remove("Martin"); HashMapEntry 30 /XX 12/3/15 System.out.println( grades.get("Nelson")); System.out.println( "Milhouse" "B" grades.get("Martin")); 30 GV: NGUYỄN XUÂN VINH public class Birthday { public static void main(String[] args){ Map m = new HashMap(); m.put("Newton", new Integer(1642)); m.put("Darwin", new Integer(1809)); System.out.println(m); } } Output: {Darwin=1809, Newton=1642} 31 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Map example 31 GV: NGUYỄN XUÂN VINH Some Map methods in detail  public Object get(Object key)   public boolean containsKey(Object key)   returns true if the map contains a mapping for the specified key (constant time) public boolean containsValue(Object val)  returns true if the map contains the specified object as a value  this method is not constant-time O(1) why not? 32 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU returns the value at the specified key, or null if the key is not in the map (constant time) 32 GV: NGUYỄN XUÂN VINH  A map itself is not regarded as a collection  Map does not implement Collection interface  although, in theory, it could be seen as a collection of pairs, or a relation in discrete math terminology  Instead collection views of a map may be obtained  Set of its keys  Collection of its values (not a set why?) 33 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Collection views 33 GV: NGUYỄN XUÂN VINH Iterators and Maps  Map interface has no iterator method; you can’t get an Iterator directly  must first call either MÔN: CẤU TRÚC DỮ LIỆU   keySet() returns a Set of all the keys in this Map values() returns a Collection of all the values in this Map  then call iterator() on the key set or values  Examples: Iterator keyItr = grades.keySet().iterator(); Iterator elementItr = grades.values().iterator();  If you really want the keys or element values in a more familiar collection such as an ArrayList, use the ArrayList constructor that ArrayList elements = new ArrayList(grades.values()); 34 /XX 12/3/15 takes a Collection as its argument 34 GV: NGUYỄN XUÂN VINH Examining all elements  Usually iterate by getting the set of keys, and iterating over that Set keys = m.keySet(); Iterator itr = keys.iterator(); while (itr.hasNext()) { MÔN: CẤU TRÚC DỮ LIỆU Object key = itr.next(); System.out.println(key + "=>" + m.get(key)); } Output: Darwin => 1809 35 /XX 12/3/15 Newton => 1642 35 GV: NGUYỄN XUÂN VINH Map practice problems  Write code to invert a Map; that is, to make the values the keys and make the keys the values Map byName = new HashMap(); byName.put("Darwin", "748-2797"); MÔN: CẤU TRÚC DỮ LIỆU byName.put("Newton", "748-9901"); Map byPhone = new HashMap(); // your code here! System.out.println(byPhone); Output: {748-2797=Darwin, 748-9901=Newton} Write a program to count words in a text file, using a hash map to store the number of occurrences of each word 36 /XX 12/3/15 ? 36 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 37 Tóm tắt  Giới thiệu  Các vấn đề với ArrayList, Linked List  Bảng băm “hoàn hảo”  Hàm băm hoàn hảo  Phương pháp xây dựng hàm băm  Hàm băm dạng bảng tra  Hàm băm sử dụng phương pháp chia  Hàm băm sử dụng phương pháp trung phương(Middle Square)  Sử dụng phương pháp nhân  Ưu điểm bảng băm  Các cách giải xung đột (collision)  Collision: Phương pháp kết nối trực tiếp  Collision: Phương pháp Bảng băm kết nối hợp  Collision: Phương pháp Bảng băm dò tìm tuyến tính  Các bảng băm phổ biến (đọc them)  Java Map Interface  Map implementations in Java  HashMap example 38 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH HỎI ĐÁP [...]... là null MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Array as table - U - 0 1 (universe of key) 2 3 4 6 2 3 9 0 7 - 4 1 5 5 12/3/15 K (actual keys) 2 - 3 8 - 6 7 11 /XX 5 8 - 8 9 11  Lưu trữ mẫu tin trong mảng lớn: chỉ mục tương đương khóa  Thêm: rất nhanh O(1)  Xóa: rất nhanh O(1)  Tìm: rất nhanh O(1)  Nhưng lãng phí rất nhiều bộ nhớ! /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Array as... phần tử ⇒ tiếp tục /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU tìm kiếm trên danh sách liên kết 23 23 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 24 Collision: PP kết nối trực tiếp  Bảng băm có tập khóa là số nguyên, tập địa chỉ có 10 địa chỉ Bảng 0 30 50 1 11 21 2 32 62 3 33 53 4 54 74 5 25 55 6 36 56 7 27 47 8 48 98 9 39 59 41 74 địa chỉ 57 69 GV: NGUYỄN XUÂN VINH Collision: PP dò tuyến tính (Linear... GV: NGUYỄN XUÂN VINH Hàm băm: Một số PP xây dựng  Sử dụng phương pháp trung phương(Middle Square) k Với M = 2 (k>=1) (M là kích thước của mảng) 19 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU w W = 2 (w: là số lượng bit của một số int = 32) GV: NGUYỄN XUÂN VINH Hàm băm: Một số PP xây dựng  Sử dụng phương pháp nhân  Sử dụng công thức 20 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU x là khóa, M là kích thước bảng GV: NGUYỄN... byName.put("Darwin", "7 48- 2797"); MÔN: CẤU TRÚC DỮ LIỆU byName.put("Newton", "7 48- 9901"); Map byPhone = new HashMap(); // your code here! System.out.println(byPhone); Output: {7 48- 2797=Darwin, 7 48- 9901=Newton} Write a program to count words in a text file, using a hash map to store the number of occurrences of each word 36 /XX 12/3/15 ? 36 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU 12/3/15 /XX 37 Tóm...  Ít xảy ra đụng độ  Xử lý được các loại khóa có kiểu dữ liệu khác nhau /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Hàm băm 17 17 GV: NGUYỄN XUÂN VINH Hàm băm: Một số PP xây dựng  Hàm băm dạng bảng tra  Ví dụ: cho bảng chữ cái alphabet, chữ cái a được băm vào địa chỉ 0, chữ cái b được băm vào địa chỉ 1, , của bảng băm 18 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU  Hàm băm sử dụng phương pháp chia  Dùng số dư: h(x)... Collection values(); views 28 /XX 12/3/15 } 28 GV: NGUYỄN XUÂN VINH  Map is an interface; you can't say new Map()  There are two implementations:  java.util.HashMap is best for most purposes  we won't use the other one: TreeMap  Preferred: Not: Map m = new HashMap(); HashMap m = new HashMap(); 29 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Map implementations in Java 29 GV: NGUYỄN XUÂN VINH HashMap example HashMap... tức thì  Nếu dung lượng bộ nhớ có giới hạn thì tổ chức khóa cùng địa chỉ  Bảng băm ứng dụng nhiều trong thực tế, thích hợp tổ chức dữ liệu có kích thước lớn và lưu trữ ngoài /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Ưu điểm bảng băm 16 16 GV: NGUYỄN XUÂN VINH  Hàm băm: biến đổi khóa thành chỉ mục trên bảng băm  Khóa có thể là dạng số hay dạng chuỗi  Chỉ mục được tính từ 0 M-1, với... http://www.cs.auckland.ac.nz/software/AlgAnim/hash_tables.html /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Các bảng băm phổ biến khác 27 27 GV: NGUYỄN XUÂN VINH Java's Map interface public interface Map { Object put(Object key, Object value); Object get(Object key); Object remove(Object key); Basic ops boolean containsKey(Object key); boolean containsValue(Object value); MÔN: CẤU TRÚC DỮ LIỆU int size(); boolean isEmpty(); void putAll(Map... /XX 12/3/15 H(‘99 080 80’) = 3 GV: NGUYỄN XUÂN VINH Hàm băm “hoàn hảo” MÔN: CẤU TRÚC DỮ LIỆU 0 3 Để lưu trữ 1 mẫu tin, gọi Hash(stud_id) và lưu Để lưu trữ 1 mẫu tin, gọi Hash(stud_id) và lưu 67 trữ vào vị trí Hash(stud_id) trong mảng trữ vào vị trí Hash(stud_id) trong mảng Để tìm một sinh viên, chỉ cần gọi Để tìm một sinh viên, chỉ cần gọi Hash(stud_id) Hash(stud_id) 134 999 : : 99 080 80 Tung 4.9 : : :... map may be obtained  Set of its keys  Collection of its values (not a set why?) 33 /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU Collection views 33 GV: NGUYỄN XUÂN VINH Iterators and Maps  Map interface has no iterator method; you can’t get an Iterator directly  must first call either MÔN: CẤU TRÚC DỮ LIỆU   keySet() returns a Set of all the keys in this Map values() returns a Collection of all the values ... MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 7  Cấu trúc liệu phức tạp hơn, thực thi tốt  Tree BST  Hash table /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Vấn đề 8 GV: NGUYỄN XUÂN... lãng phí nhiều nhớ! /XX 12/3/15 MÔN: CẤU TRÚC DỮ LIỆU GV: NGUYỄN XUÂN VINH Array as table 12 12 GV: NGUYỄN XUÂN VINH Hàm băm “hoàn hảo” MÔN: CẤU TRÚC DỮ LIỆU int Hash(KeyType key) H(‘0012345’)... đề 8 GV: NGUYỄN XUÂN VINH MÔN: CẤU TRÚC DỮ LIỆU Array as table 0012345 An 8. 15 0033333 Binh 90 0056 789 Danh 5. 68 980 1010 Phuong 2.0 980 2020 Minh 10.0 9903030 Thao 7.3 99 080 80 Tung 4.9 /XX 12/3/15

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

Từ khóa liên quan

Mục lục

  • Slide 1

  • Nội dung

  • Giới thiệu

  • Vấn đề cơ bản

  • Vấn đề cơ bản

  • Vấn đề cơ bản

  • Vấn đề cơ bản

  • Vấn đề cơ bản

  • Array as table

  • Array as table

  • Array as table

  • Array as table

  • Hàm băm “hoàn hảo”

  • Hàm băm “hoàn hảo”

  • Bảng băm với hàm băm hoàn hảo

  • Ưu điểm bảng băm

  • Hàm băm

  • Hàm băm: Một số PP xây dựng

  • Hàm băm: Một số PP xây dựng

  • Hàm băm: Một số PP xây dựng

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

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

Tài liệu liên quan