Giáo trình cấu trúc dữ liệu nâng cao phần 2

65 1.3K 0
Giáo trình cấu trúc dữ liệu nâng cao phần 2

Đ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

Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin

13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 1 Chương 2-Bảng băm Nội dung Khái Niệm về bảng băm Hàm băm. Các phương pháp giải quyết đụng độ 1. Phương pháp kết nối trực tiếp 2. Phương pháp kết nối hợp nhất 3. Phương pháp dò tuyến tính 4. Phương pháp dò bậc 2 5. Phương pháp băm kép Phân tích Phép băm 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 2 Khái niệmBảng băm Phép Băm (Hashing): Là quá trình ánh xạ mộtgiá trị khóa vào mộtvị trí trong bảng. Mộthàmbămánhxạ các giá trị khóa đếncácvị trí ký hiệu: h Bảng băm (Hash Table) là mảng lưutrữ các record, ký hiệu: HT HT có M vị trí được đánh chỉ mụctừ 0 đếnM, M là kích thướccủabảng băm. Bảng bămthíchhợpchocácứng dụng đượccài đặttrênđĩavàbộ nhớ, là mộtcấu trúc dung hòa giữathờigiantruyxuấtvàkhônggianlưutrữ. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 3 HÀM BĂM (Hash functions) h K h(K) Hàm bămbiến đổimộtkhóavàomộtbảng các địachỉ. Khóa có thể là dạng số hay số dạng chuỗi. Địachỉ tính ra đượclàsố nguyên trong khoảng 0 đếnM-1 vớiM làsốđịachỉ có trên bảng băm K1, K2,k3 H(k3) h(k1) h(k2) 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 4 Hàm băm(Hash Functions) Hàm bămtốtthỏamãncácđiềukiệnsau: Tính toán nhanh. Các khoá đượcphânbốđềutrongbảng. Ít xảyrađụng độ. good hash functions are very rare – birthday paradox Giảiquyếtvấn đề bămvới các khoá không phảilà số nguyên: Tìm cách biến đổ khoá thành số nguyên Trong ví dụ trên, loạibỏ dấu ‘-’ 9635-8904 đưavề số nguyên 96358904 Đốivớichuỗi, sử dụng giá trị các ký tự trong bảng mã ASCCI Sau đósử dụng các hàm bămchuẩntrênsố nguyên. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 5 HF: Phương pháp chia Dùng số dư: h ( k ) = k mod m k là khoá, m là kích thướccủabảng. vấn đề chọngiátrị m m = 2 n (không tốt) nếuchọn m= 2 n thông thường không tốt h(k) = k mod 2 n sẽ chọn cùng n bits cuốicủak m là nguyên tố (tốt) Gia tăng sự phân bốđều Thông thường m đượcchọnlàsố nguyên tố gầnvới2 n Chẳng hạnbảng ~4000 mục, chọn m = 4093 0110010111000011010 k mod 2 8 chọncácbits 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 6 HF: Phương pháp nhân Sử dụng h ( k ) = ⎣ m ( kA mod 1) ⎦ k là khóa, m là kích thướcbảng, A là hằng số: 0 < A < 1 Chọnm vàA M thường chọn m = 2 p Sự tối ưutrongviệcchọnA phụ thuộcvàođặc trưng củadữ liệu. Theo Knuth chọn A = ½(√5 -1) ≈ 0.618033987 đượcxemlàtốt. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 7 Phép bămphổ quát Việcchọnhàmbămkhôngtốtcóthể dẫn đếnxác suất đụng độ lớn. Giảipháp: Lựachọnhàmbămh ngẫunhiên. Chọnhàmbăm độclậpvớikhóa. KhởitạomộttậpcáchàmbămH phổ quát và từ đóh đượcchọnngẫunhiên. MộttậpcáchàmbămH làphổ quát ( universal ) nếu vớimọi ∀ f, k ∈H và 2 khoá k, l ta có xác suất: Pr{ f(k) = f(l) } ≤ 1/ m 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 8 Sựđụng độ là hiệntượng các khóa khác nhau nhưng băm cùng địachỉ như nhau. Khi key1<>key2 mà f(key1)=f(key2) chúng ta nói nút có khóa key1 đụng độ với nút có khóa key2. Thựctế ngườitagiảiquyếtsựđụng độ theo hai phương pháp: phương pháp nốikếtvàphương pháp bămlại. Sựđụng độ (collision) 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 9 Phương pháp nốikếttrựctiếp I. Phương pháp nốikếttrựctiếp: Các nút bị bămcùngđịachỉ (các nút bị xung đột) được gom thành mộtdanhsáchliênkết. các nút trên bảng băm được băm thành các danh sách liên kết. Các nút bị xung độttại địachỉ i đượcnối kếttrựctiếpvới nhau qua danh sach liên kếti. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 10 #define M 100 typedef struct nodes { int key; struct nodes *next }NODE; //khai bao kieu con tro chi nut typedef NODE *pHNODE; /* khai bao mang HASHTABLE chua M con tro dau cua MHASHTABLE */ typedef PHNODE HASHTABLE[M]; Phương pháp nốikếttrựctiếp (tt) [...]... NULL 0 NULL 0 56 1 NULL 1 NULL 1 NULL 1 NULL 1 NULL 2 3 4 32 2 53 3 NULL 4 32 53 22 2 3 4 32 53 22 2 3 4 32 53 22 2 3 4 32 53 22 5 NULL 5 92 5 92 5 92 5 92 6 NULL 6 NULL 6 34 6 34 6 34 7 NULL 7 NULL 7 17 7 17 7 17 8 NULL 8 NULL 8 NULL 8 24 8 24 9 NULL 9 NULL 9 NULL 9 37 9 37 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 30 Phương pháp dò tuyến tính (2) Nếu chưa bị xung đột thì thêm nút mới vào địa chỉ... 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 21 Phương pháp nối kết hợp nhất (3) Minh họa cho bảng băm có tập khóa là tập số tự nhiên, tập địa chỉ có 10 địa chỉ (M=10) (từ địa chỉ 0 đến 9), chọn hàm băm f(key)=key % 10 0 10 1 1 20 -1 2 42 8 Key=10, 42, 20 , 109, 62 … 8 null -1 62 -1 9 109 -1 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 22 Phương pháp nối kết hợp nhất () a Khai báo cấu trúc bảng băm: //Khai... return(M); //khong tim thay } 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 25 Phương pháp nối kết hợp nhất (7) Phép toán lấy phần tử trống (Getempty): Chọn phần tử còn trống phía cuối bản băm để cấp phát khi xảy ra xung đột int getempty() { while(HASHTABLE[avail].key !=NULLKEY) avail - -; return(avail); } 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 26 Phương pháp nối kết hợp nhất (8) int insert(int k) {... một trường key để chứa khoá của nút 2 Khi khởi động bảng băm thì tất cả trường key được gán NULLKEY 3 Khi thêm nút có khoá key vao bảng băm, hàm băm f(key) sẽ xác định địa chỉ i trong … khoảng từ 0 đến M-1: Thêm các nut 32, 53, 22 , 92, 17, 34, M-1 24 , 37, 56 vào bảng băm 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 nullkey nullkey nullkey nullkey nullkey nullkey 29 Phương pháp dò tuyến tính (1) 0 NULL... i=HASHTABLE[i].next; 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 27 Phương pháp nối kết hợp nhất (9) if(HASHTABLE[i].key == NULLKEY) //Nut i con trong thi cap nhat j = i; else //Neu nut i la nut cuoi cua DSLK { j = getempty(); if(j < 0) { printf(“\n Bang bam bi ‘); return(j); } else HASHTABLE[i].next = j; } HASHTABLE[j].key = k; return(j); } 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 28 Phương pháp dò tuyến tính (1)... HASHTABLE[M]; int avail; 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 23 Phương pháp nối kết hợp nhất (5) Hàm băm: int HF(int key) { return(key % 10); } Phép toán khởi tạo (Initialize): void initialize() { int i; for(i = 0;ikey && p !=NULL) p=p->next; if (p == NULL | | k !=p->key) // khong tim thay return(NULL); else //tim thay return(p); } 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 16 Phương pháp nối kết trực tiếp(tt) Phép toán duyệt HASHTABLE[i]: Duyệt các phần tử trong... lúc này có bậc 0(n) 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 32 Phương pháp dò tuyến tính (4) //khai bao cau truc mot node cua bang bam typedef struct { int key; //khoa cua nut tren bang bam }NODE; //Khai bao bang bam co M nut NODE HASHTABLE[M]; int N; /*bien toan cuc chi so nut hien co tren bang bam*/ 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 33 Phương pháp dò tuyến tính (5) Hàm băm: Giả sử... nên dành ít nhất một phần tử trống trên bảng băm 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 35 Phương pháp dò tuyến tính (7) Phép toán search: int search(int k) { int i; i=HF(k); while(HASHTABLE[i].key!=k && HASHTABLE[i].key!=NULKEY) { i=i+1; if(i>=M) i=i-M; } if(HASHTABLE[i].key==k) //tim thay return(i); else //khong tim thay return(M); 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 } 36 . tính 4. Phương pháp dò bậc 2 5. Phương pháp băm kép Phân tích Phép băm 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 2 Khái niệmBảng băm Phép Băm (Hashing): Là quá trình ánh xạ mộtgiá trị khóa. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 1 Chương 2- Bảng băm Nội dung Khái Niệm về bảng băm Hàm băm. Các phương pháp giải quyết đụng độ 1. Phương pháp kết nối trực tiếp 2. Phương pháp kết nối hợp. bămthíchhợpchocácứng dụng đượccài đặttrênđĩavàbộ nhớ, là mộtcấu trúc dung hòa giữathờigiantruyxuấtvàkhônggianlưutrữ. 13-Dec-05 Trương Hải Bằng-Câu trúc dữ liệu 2 3 HÀM BĂM (Hash functions) h K h(K) Hàm bămbiến

Ngày đăng: 20/10/2014, 06:49

Từ khóa liên quan

Mục lục

  • Chương 2-Bảng băm

  • Khái niệm Bảng băm

  • Hàm băm(Hash Functions)

  • HF: Phương pháp chia

  • HF: Phương pháp nhân

  • Phép băm phổ quát

  • Phương pháp nối kết trực tiếp

  • Phương pháp nối kết trực tiếp (tt)

  • Phương pháp nối kết trực tiếp

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết trực tiếp(tt)

  • Phương pháp nối kết hợp nhất (1)

  • phương pháp nối kết hợp nhất (2)

  • Phương pháp nối kết hợp nhất (3)

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

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

Tài liệu liên quan