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
Số trang: 25
Loại file: pdf
Dung lượng: 474.10 KB
Lượt xem: 14
Lượt tải: 0
Xem trước 3 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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.
Nội dung trích xuất từ tài liệu:
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 A C BCẤU TRÚC DỮ LIỆU VÀ F GIẢI THUẬT (501040) D E G Chương 9: Bảng K H Ma trận 2 chiều vs. 1 chiều A[i, j] B[ max_row*i + j] C[i + max_col*j]ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 2 Bảng và chỉ mụcĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 3 Radix sort Bước 1 Bước 2 Bước 3 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 9. Bảng 4 Đánh giá Radix sort Số lần so sánh là Θ(n k), n là số phần tử và k là số ký tự trên khóa So sánh với các phương pháp khác là n lg n: Nếu k lớn và n là nhỏ thì radix sort chậm Nếu k nhỏ và n là lớn thì radix sort nhanh hơn Bất tiện: Việc tách thành 27 danh sách con và ghép lại lúc sau trên DS liên tục gây ra việc di chuyển nhiều phần tử Khóa so sánh là chuỗi nhị phân thì không tốtĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 5 Radix sort trên DSLKĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 6 Giải thuật Radix sort trên DSLK Algorithm radix_sort Input: danh sách cần sắp thứ tự Output: danh sách đã sắp thứ tự //Mỗi queue chứa các phần tử có ký tự tương ứng 1. queues là một dãy có max_character hàng //Lặp k bước, kiểm tra các ký tự tại vị trí k 2. for position = size(khóa) to 0 2.1. while (danh sách còn) 2.1.1. Lấy phần tử đầu tiên 2.1.2. Tính toán thứ tự của chữ cái ở vị trí k trong khóa 2.1.3. Đẩy phần tử này vào queue tương ứng 2.2. Nối tất cả các queue lại với nhau thành danh sách End radix_sortĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 7 Mã C++ Radix sort trên 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 9. Bảng 8 Nối các queue liên kết Cách 1: Dùng các CTDL queue Phải dùng queue.retrieve và list.insert(list.size(),x) Cách 2: Viết lại các CTDL kiểu queue trong chương trình Chỉ cần tìm đến cuối mỗi queue và nối con 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 9. Bảng 9 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 chính là position Hàm đổi một key thành position: hàm Hash position position key key search 1 search 2 MagicĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 10 Bảng Hash Bảng Hash Bảng ...
Nội dung trích xuất từ tài liệu:
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 A C BCẤU TRÚC DỮ LIỆU VÀ F GIẢI THUẬT (501040) D E G Chương 9: Bảng K H Ma trận 2 chiều vs. 1 chiều A[i, j] B[ max_row*i + j] C[i + max_col*j]ĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 2 Bảng và chỉ mụcĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 3 Radix sort Bước 1 Bước 2 Bước 3 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 9. Bảng 4 Đánh giá Radix sort Số lần so sánh là Θ(n k), n là số phần tử và k là số ký tự trên khóa So sánh với các phương pháp khác là n lg n: Nếu k lớn và n là nhỏ thì radix sort chậm Nếu k nhỏ và n là lớn thì radix sort nhanh hơn Bất tiện: Việc tách thành 27 danh sách con và ghép lại lúc sau trên DS liên tục gây ra việc di chuyển nhiều phần tử Khóa so sánh là chuỗi nhị phân thì không tốtĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 5 Radix sort trên DSLKĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 6 Giải thuật Radix sort trên DSLK Algorithm radix_sort Input: danh sách cần sắp thứ tự Output: danh sách đã sắp thứ tự //Mỗi queue chứa các phần tử có ký tự tương ứng 1. queues là một dãy có max_character hàng //Lặp k bước, kiểm tra các ký tự tại vị trí k 2. for position = size(khóa) to 0 2.1. while (danh sách còn) 2.1.1. Lấy phần tử đầu tiên 2.1.2. Tính toán thứ tự của chữ cái ở vị trí k trong khóa 2.1.3. Đẩy phần tử này vào queue tương ứng 2.2. Nối tất cả các queue lại với nhau thành danh sách End radix_sortĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 7 Mã C++ Radix sort trên 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 9. Bảng 8 Nối các queue liên kết Cách 1: Dùng các CTDL queue Phải dùng queue.retrieve và list.insert(list.size(),x) Cách 2: Viết lại các CTDL kiểu queue trong chương trình Chỉ cần tìm đến cuối mỗi queue và nối con 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 9. Bảng 9 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 chính là position Hàm đổi một key thành position: hàm Hash position position key key search 1 search 2 MagicĐH Bách Khoa Tp.HCM Khoa Công nghệ Thông tin Chương 9. Bảng 10 Bảng Hash Bảng Hash Bảng ...
Tìm kiếm theo từ khóa liên quan:
Cấu trúc dữ liệu Bài giảng giải thuật Đánh giá Radix sort Mã C++ Radix sort Giải thuật Radix sort trên DSLK Nối các queue liên kết Tăng tốc tra cứuGợi ý tài liệu liên quan:
-
Đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (Data structures and algorithms)
10 trang 304 0 0 -
Bài giảng Phân tích thiết kế phần mềm: Chương 1 - Trường ĐH Ngoại ngữ - Tin học TP.HCM
64 trang 148 0 0 -
Giải thuật và cấu trúc dữ liệu
305 trang 142 0 0 -
Tập bài giảng Thực hành kỹ thuật lập trình
303 trang 139 0 0 -
Giáo trình Cấu trúc dữ liệu và thuật toán (Tái bản): Phần 1
152 trang 137 0 0 -
Tài liệu tham khảo: Cấu trúc dữ liệu và giải thuật
229 trang 103 0 0 -
Lập trình C - Cấu trúc dữ Liệu
307 trang 71 0 0 -
49 trang 67 0 0
-
Bài giảng Cấu trúc dữ liệu và giải thuật: Chương 2 - Ngô Công Thắng
8 trang 64 0 0 -
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 1
338 trang 60 0 0