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

Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 9 - ĐH Bách khoa TP. HCM

25 3 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 25
Dung lượng 474,1 KB

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 9: Bảng cung cấp cho sinh viên các kiến thức: Ma trận 2 chiều với ma trận một chiều, đánh giá Radix sort, giải thuật Radix sort trên DSLK, mã C++ Radix sort trên DSLK, nối các queue liên kết, tăng tốc tra cứu, phương pháp địa chỉ mở,... Mời các bạn cùng tham khảo nội dung chi tiết.

A C CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (501040) B F D E Chương 9: Bảng G K H Ma trận chiều vs chiều A[i, j] B[ max_row*i + j] ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin C[i + max_col*j] Chương Bảng Bảng mục ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Radix sort Bước Bước Bước r a t m o p m a p c a r m o p m a p r a p c a t c a t t o p c a r c o t m a p r a p t a r m a p c a r c a r r a t m o p t o p t a r c a t r a p c o t r a t m o p r a t t a r c a t t o p t a r r a p c o t c o t t o p ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Đánh giá Radix sort Số lần so sánh Θ(n k), n số phần tử k số ký tự khóa So sánh với phương pháp khác n lg n: Nếu k lớn n nhỏ radix sort chậm Nếu k nhỏ n lớn radix sort nhanh Bất tiện: Việc tách thành 27 danh sách ghép lại lúc sau DS liên tục gây việc di chuyển nhiều phần tử Khóa so sánh chuỗi nhị phân khơng tốt ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Radix sort DSLK ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Giải thuật Radix sort DSLK Algorithm radix_sort Input: danh sách cần thứ tự Output: danh sách thứ tự //Mỗi queue chứa phần tử có ký tự tương ứng queues dãy có max_character hàng //Lặp k bước, kiểm tra ký tự vị trí k for position = size(khóa) to 2.1 while (danh sách còn) 2.1.1 Lấy phần tử 2.1.2 Tính tốn thứ tự chữ vị trí k khóa 2.1.3 Đẩy phần tử vào queue tương ứng 2.2 Nối tất queue lại với thành danh sách End radix_sort ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Mã C++ Radix sort DSLK const int max_chars = 28; template void Sortable_list :: radix_sort( ) { Record data; Queue queues[max_chars]; for (int position = key_size − 1; position >= 0; position−−) { // Loop from the least to the most significant position while (remove(0, data) == success) { int queue_number = alphabetic_order(data.key_letter(position)); queues[queue_number].append(data); // Queue operation } rethread(queues); // Reassemble the list } } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Nối queue liên kết Cách 1: Dùng CTDL queue Phải dùng queue.retrieve list.insert(list.size(),x) Cách 2: Viết lại CTDL kiểu queue chương trình Chỉ cần tìm đến cuối queue nối trỏ vào đầu queue sau (hoặc đến NULL) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng Tăng tốc tra cứu Tìm kiếm: hàm f: key -> position =>O (lg n) Nếu có hàm f: key -> position với tốc độ O(1) Ví dụ: Tra bảng với key position Hàm đổi key thành position: hàm Hash position key search ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin position key search Chương Bảng Magic 10 Bảng Hash Bảng Hash Bảng Vị trí phần tử tính hàm hash Hàm hash: Nhận vào khóa Trả số vị trí (Có thể chuyển vài khóa vị trí) Đụng độ bảng hash: Nếu vị trí tìm liệu cần tìm: O(1) Khơng đúng: giải đụng độ (phải đảm bảo O(1)) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 11 Hàm Hash Đảm bảo O(1) Ví dụ: f(x) = x % m; f(‘abc’) = (char_index(‘a’)*base_number2 + char_index(‘b’)*base_number1 + char_index(‘c’)*base_number0) % hash_size ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thơng tin Chương Bảng 12 Ví dụ dùng bảng Hash T U V M D O Các khóa: M, O, T, V, I, D, U hash(x) = char_index(x) % 10 Tìm V Tìm F I Khơng có char_index: Space=0, A=1, B=2, …, Z=27 M O ĐH Bách Khoa Tp.HCM T V I D U Khoa Công nghệ Thông tin F Chương Bảng 13 Phương pháp Địa mở (Open Addressing) Bảng hash array Các vị trí có đụng độ tìm vị trí phương pháp giải quyết: Thử tuyến tính (linear probing): Tăng số lên một: h = (h+i) % hash_size Thử bậc hai (quadratic probing): Tăng số lên theo bình phương: h = (h + i2)% hash_size Phương pháp khác Ngẫu nhiên ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 14 Thiết kế bảng Hash dùng địa mở Đảm bảo phép thử tuyến tính khơng bị lặp vòng const int hash_size = 997; // a prime number of appropriate size class Hash_table { public: Hash_table( ); void clear( ); Error_code insert(const Record &new entry); Error_code retrieve(const Key &target, Record &found) const; private: Record table[hash_size]; }; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 15 Giải thuật thêm phần tử dùng bảng Hash địa mở Algorithm Hash_Insert Input: bảng Hash, mẫu tin cần thêm vào Output: bảng Hash có mẫu tin thêm vào probe = hash(input_key) increment = while (table[probe] khơng rỗng) //Dùng đụng độ //Có đụng độ //Dùng phép thử (tuyến tính, bậc hai, …) 3.1 probe = (probe + increment) % hash_size 3.2 increment = increment + //Thử bậc hai table[probe] = new_data End Hash_insert ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 16 Mã C++ thêm phần tử dùng bảng Hash địa mở Error_code Hash_table :: insert(const Record &new entry) { Error_code result = success; int probe_count = 0, increment = 1, probe; Key null; probe = hash(new_entry); while (table[probe] != null && table[probe] != new_entry && probe_count < (hash size + 1)/2) { probe_count++; probe = (probe + increment)%hash_size; increment += 2; } if (table[probe] == null) table[probe] = new_entry; else if (table[probe] == new_entry) result = duplicate_error; else result = overflow; return result; } ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 17 Phương pháp nối kết (chained hash table) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 18 Lợi ích phương pháp nối kết Nếu số lượng mẫu tin lớn: tiết kiệm vùng nhớ Giải đụng độ: đơn giản đẩy vào danh sách liên kết Bảng hash nhỏ nhiều so với số lượng mẫu tin Xóa phần tử đơn giản nhanh chóng Độ phức tạp tìm kiếm: Nếu có n mẫu tin, bảng hash có kích thước m Độ dài trung bình DSLK n/m ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 19 Thiết kế bảng Hash nối kết const int hash_size = 997; // a prime number of appropriate size class Hash_table { public: //Specify methods here private: List table[hash_size]; }; ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 20 Thiết kế phương thức bảng Hash nối kết Constructor: Gọi constructor danh sách array Clear: Gọi phương thức clear cho danh sách array Retrieval: sequential_search(table[hash(target)], target, position); Insertion: table[hash(new_entry)].insert(0, new_entry); Deletion: remove(const Key type &target, Record &x); Nếu tìm thấy danh sách tương ứng xóa ĐH Bách Khoa Tp.HCM Khoa Cơng nghệ Thông tin Chương Bảng 21 Đánh giá phương pháp dùng bảng Hash load factor λ = số mẫu tin/kích thước bảng hash Tìm kiếm với bảng hash nối kết: 1+(1/2)λ phép thử tìm thấy λ phép thử khơng tìm thấy Tìm với bảng hash địa mở (thử ngẫu nhiên): (1/λ)ln (1/(1-λ)) phép thử tìm thấy 1/(1-λ) phép thử khơng tìm thấy Tìm với bảng hash địa mở (thử tuyến tính): (1/2)(1 + 1/(1-λ)) phép thử tìm thấy (1/2)(1 + 1/(1-λ)2) phép thử khơng tìm thấy ĐH Bách Khoa Tp.HCM Khoa Cơng nghệ Thông tin Chương Bảng 22 So sánh phương pháp ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 23 So sánh phương pháp (tt.) ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 24 ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương Bảng 25 ... Bách Khoa Tp .HCM Khoa Cơng nghệ Thông tin Chương Bảng 22 So sánh phương pháp ĐH Bách Khoa Tp .HCM Khoa Công nghệ Thông tin Chương Bảng 23 So sánh phương pháp (tt.) ĐH Bách Khoa Tp .HCM Khoa Công... sánh chuỗi nhị phân khơng tốt ĐH Bách Khoa Tp .HCM Khoa Công nghệ Thông tin Chương Bảng Radix sort DSLK ĐH Bách Khoa Tp .HCM Khoa Công nghệ Thông tin Chương Bảng Giải thuật Radix sort DSLK Algorithm... overflow; return result; } ĐH Bách Khoa Tp .HCM Khoa Công nghệ Thông tin Chương Bảng 17 Phương pháp nối kết (chained hash table) ĐH Bách Khoa Tp .HCM Khoa Công nghệ Thông tin Chương Bảng 18 Lợi ích

Ngày đăng: 11/05/2021, 03:44

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN