Sắp xếp bằng cơ số
lượt xem 4
download
Radix sort lại dựa trên nguyên tắc phân loại thư của bưu điện. Vì lý do đó nó còn có tên là Postman’s sort. Nó không hề quan tâm đến việc so sánh giá trị của phần tử Việc phân loại và trình tự phân loại sẽ tạo ra thứ tự cho các phần tử.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Sắp xếp bằng cơ số
- Sắp xếp bằng cơ số Radix sort
- Sắp xếp theo phương pháp cơ số Radix sort lại dựa trên nguyên tắc phân loại thư của bưu điện. Vì lý do đó nó còn có tên là Postman’s sort. Nó không hề quan tâm đến việc so sánh giá trị của phần tử Việc phân loại và trình tự phân loại sẽ tạo ra thứ tự cho các phần tử.
- To: Lê Văn An
- hệ thống phân loại thư phân cấp Nước tỉnh, thành phố quận, huyện phường xã đường số nhà Thuậttoán phân loại dựa theo thứ tự hàng của số tỉtriệungàntram chục đơn vị
- Mô phỏng lại qui trình trên, để sắp xếp dãy a1, a2, ..., an, giải thuật Radix Sort thực hiện như sau: ? Trước tiên, ta có thể giả sử mỗi phần tử ai trong dãy a1, a2, ..., an là một số nguyên có tối đa m chữ số. ? Ta phân loại các phần tử lần lượt theo các chữ số hàng đơn vị, hàng chục, hàng trăm, . Qua mỗi bước phân loại ta có được các phần tử có thứ tự theo hàng của nó. Khi ta phân loại đến số hạng thứ m thì tất cả các phần tử đã được sắp xếp
- Các bước thực hiện thuật toán như sau: Bước 1 : // k cho biết chữ số dùng để phân loại hiện hành k = 0; // k = 0: hàng đơn vị; k = 1:hàng chục; Bước 2 : //Tạo các lô chứa các loại phần tử khác nhau Khởi tạo 10 lô B0, B1, ., B9 rỗng; Bước 3 : For i = 1 .. n do Ðặt ai vào lô Bt với t = chữ số thứ k của ai; Bước 4 : Nối B0, B1, ., B9 lại (theo đúng trình tự) thành a. Bước 5 : k = k+1; Nếu k < m thì trở lại bước 2. Ngược lại: Dừng
- Ví dụ: Sắp xếp dãy số sau: 2134,6120,35,234,932,1034,9181,2288,5404 ,6771,0009
- Phân theo hàng ngàn Phân theo hàng đơn vị 0009 9 6771 8 5404 7 2288 6 9181 5 1034 4 0932 3 0234 2 0035 1 6120 0 2134 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng đơn vị 0009 9 6771 8 5404 7 2288 6 9181 5 1034 4 0932 3 0234 5404 2 0035 1034 1 6120 6771 0234 0 2134 6120 9181 0932 2134 0035 2288 0009 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng chục 10 0009 9 2288 8 0035 7 5404 6 1034 5 0234 4 2134 3 0932 2 6771 1 9181 0 6120 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng chục 0009 9 2288 8 0035 7 5404 6 1034 5 0234 4 2134 0035 3 0932 1034 2 6771 0234 1 9181 0009 2134 228 8 0 6120 5404 6120 0932 6771 9181 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng trăm 10 2288 9 9181 8 6771 7 0035 6 1034 5 0234 4 2134 3 0932 2 6120 1 0009 0 5404 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng trăm 2288 9 9181 8 6771 7 0035 6 1034 5 0234 4 2134 3 0932 2 6120 0035 9181 1 0009 1034 2134 2288 0 5404 0009 6120 0234 5404 6771 0932 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng ngàn 10 0932 9 6771 8 5404 7 2288 6 0234 5 9181 4 2134 3 6120 2 0035 1 1034 0 0009 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng ngàn 0932 9 6771 8 5404 7 2288 6 0234 5 9181 4 2134 3 6120 0932 2 0035 0234 1 1034 0035 2288 6771 0 0009 0009 1034 2134 5404 6120 9181 cs A 0 1 2 3 4 5 6 7 8 9
- Phân theo hàng ngàn Phân theo hàng ngàn 10 9181 9 6771 8 6120 7 5404 6 2288 5 2134 4 1034 3 0932 2 0234 1 0035 0 0009 cs A 0 1 2 3 4 5 6 7 8 9
- Ðánh giá giải thuật Với một dãy n số, mỗi số có tối đa m chữ số, thuật toán thực hiện m lần các thao tác phân lô và ghép lô. Trong thao tác phân lô, mỗi phần tử chỉ được xét đúng một lần, khi ghép cũng vậy. Như vậy, chi phí cho việc thực hiện thuật toán hiển nhiên là O(2mn) = O(n).
- NHẬN XÉT Sau lần phân phối thứ k các phần tử của A vào các lô B0, B1, ., B9, và lấy ngược trở ra, nếu chỉ xét đến k+1 chữ số của các phần tử trong A, ta sẽ có một mảng tăng dần nhờ trình tự lấy ra từ 0 ? 9. Nhận xét này bảo đảm tính đúng đắn của thuật toán Thuật toán có độ phức tạp tuyến tính nên hiệu quả khi sắp dãy cố rất nhiều phần tử, nhất là khi khóa sắp xếp không quá dài so voiứ số lượng phần tử (điều này thường gặp trong thực tế). được x là phần tử median của dãy. Tuy nhiên do chi phí xác định phần tử median quá cao nên trong thực tế người ta không chọn phần tử này mà chọn phần tử nằm chính giữa dãy làm mốc với hy vọng nó có thể gần với giá trị median
- @ Thuật toán có độ phức tạp tuyến tính nên hiệu quả khi sắp dãy cố rất nhiều phần tử, nhất là khi khóa sắp xếp không quá dài so voiứ số lượng phần tử (điều này thường gặp trong thực tế). được x là phần tử median của dãy. Tuy nhiên do chi phí xác định phần tử median quá cao nên trong thực tế người ta không chọn phần tử này mà chọn phần tử nằm chính giữa dãy làm mốc với hy vọng nó có thể gần với giá trị median Thuật toán không có trường hợp xấu nhất và tốt nhất. Mọi dãy số đều được sắp với chi phí như nhau nếu chúng có cùng số phần tử và các khóa có cùng chiều dài.
- Thuật toán cài đặt thuận tiện với các mảng với khóa sắp xếp là chuỗi (ký tự hay số) hơn là khóa số như trong ví dụ do tránh được chi phí lấy các chữ số của từng số. @ Tuy nhiên, số lượng lô lớn (10 khi dùng số thập phân, 26 khi dùng chuỗi ký tự tiếng anh, .) nhưng tổng kích thước của tất cả các lô chỉ bằng dãy ban đầu nên ta không thể dùng mảng để biểu diễn B. Như vậy, phải dùng cấu trúc dữ liệu động để biểu diễn B => Radix sort rất thích hợp cho sắp xếp trên danh sách liên kết. @ Người ta cũng dùng phương pháp phân lô theo biểu diễn nhị phân của khóa sắp xếp. Khi đó ta có thể dùng hoàn toàn cấu trúc dữ liệu mảng để biểu diễn B vì chỉ cần dùng hai lô B0 và B1. Tuy nhiên, khi đó chiều dài khóa sẽ lớn. Khi sắp các dãy không nhiều phần tử, thuật toán Radix sort sẽ mất ưu thế so với các thuật toán khác.
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Tìm hiểu Cấu trúc dữ liệu và giải thuật - Chương 2: Tìm kiếm và sắp xếp nội
187 p | 415 | 221
-
ĐỀ THI TIN HỌC CƠ SỞ ỨNG DỤNG
8 p | 477 | 149
-
Bài giảng Visual FoxPro - Chương 3
10 p | 360 | 75
-
Bài giảng Hệ quản trị cơ sở dữ liệu Access chương 2: Table và relationship
36 p | 177 | 38
-
Bài giảng Cơ sở dữ liệu phân tán: Chương 6 - Nguyễn Mậu Hân
36 p | 161 | 36
-
Chương 5: Cây ( Tree)
152 p | 151 | 30
-
TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU PART 1
17 p | 145 | 27
-
Chương 3 Xử lý bảng tính - Bài 5
31 p | 103 | 21
-
Bài giảng Cơ sở dữ liệu quan hệ và SQL: Chương 2 - CĐ CNTT Hữu nghị Việt Hàn
46 p | 183 | 19
-
Ứng dụng và cài đặt cấu trúc dữ liệu bằng C: Phần 2
239 p | 71 | 14
-
Bài giảng Hệ quản trị CSDL FoxPro: Chương 6 - CĐSP Quảng Trị
9 p | 121 | 8
-
Giáo trình Cơ sở dữ liệu (Nghề: Quản trị mạng máy tính - Trình độ: Trung cấp) - Trường TCN Quang Trung
134 p | 59 | 8
-
Giáo trình Bảng tính excel (Nghề: Công nghệ thông tin): Phần 2 - Trường CĐ nghề công nghiệp Thanh Hóa
67 p | 33 | 7
-
Bài giảng Hệ quản trị cơ sở dữ liệu SQL Server: Chương 3 - Nguyễn Thị Mỹ Dung
22 p | 40 | 6
-
Bài giảng Cơ sở dữ liệu Foxpro và Visual Foxpro - Trường CĐ Công nghiệp và Xây dựng
46 p | 38 | 6
-
Bài giảng Cở sở dữ liệu 2: Chương 1 - Trương Hải Bằng
15 p | 83 | 5
-
Bài giảng Tin học ứng dụng - Chương 1: Cơ sở dữ liệu
11 p | 122 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn