LỜI MỞ ĐẦULựa chọn đề tài về thuật toán sắp xếp theo cơ số Radix Sort đến từ sự quan tâm về một phương pháp sắp xếp không so sánh có tính ổn định, hiệu quả và đặc biệt là phù hợp khi xử
Trang 1HỌC VIỆN NGÂN HÀNG
HỆ CHÍNH QUY KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
BÀI TẬP LỚN MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHỦ ĐỀ: THUẬT TOÁN SẮP XẾP THEO CƠ SỐ
(RADIX SORT)
Giảng viên hướng dẫn: ThS Nguyễn Thanh Thụy
Lớp: K25CNTTA
Nhóm thực hiện: Nhóm 8
ST
T
Họ và tên MSV
1 Nguyễn Văn Ánh 25A4041525
2 Võ Mạnh Hoàng 25A4041542
3 Huỳnh Lê Hoàng 25A4041541
4 Lương Xuân Hợp 25A4041543
5 Hoàng Thị Hải Vân 25A4042257
Hà Nội – 12/2023
Trang 2HỌC VIỆN NGÂN HÀNG
HỆ CHÍNH QUY KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ
BÀI TẬP LỚN MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT CHỦ ĐỀ: THUẬT TOÁN SẮP XẾP THEO CƠ SỐ
(RADIX SORT)
STT Họ và tên MSV Phần trămđóng góp Ký tên
1 Nguyễn Văn Ánh 25A4041525 20%
2 Võ Mạnh Hoàng 25A4041542 20%
3 Huỳnh Lê Hoàng 25A4041541 20%
4 Lương Xuân Hợp 25A4041543 20%
5 Hoàng Thị Hải Vân 25A4042257 20%
Hà Nội – 12/2023
Trang 3MỤC LỤC
LỜI MỞ ĐẦU 1
LỜI CẢM ƠN 2
LỜI CAM ĐOAN 3
I TỔNG QUAN VỀ THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT 4
1 Radix Sort là gì? 4
2 Ứng dụng 4
3 Nguyên tắc hoạt động 4
II THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT 4
1 Ý tưởng 4
2 Thuật toán 5
3 Ví dụ minh họa 5
4 Độ phức tạp 8
III ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT 9
1 Ưu điểm 9
2 Nhược điểm 9
3 So sánh Radix Sort với Quick Sort 9
IV CHƯƠNG TRÌNH DEMO 11
TÀI LIỆU THAM KHẢO 13
Trang 4LỜI MỞ ĐẦU
Lựa chọn đề tài về thuật toán sắp xếp theo cơ số Radix Sort đến từ sự quan tâm về một phương pháp sắp xếp không so sánh có tính ổn định, hiệu quả và đặc biệt là phù hợp khi xử lý các dãy số lớn với số lượng phần tử khác nhau Thuật toán này đem lại sự hứa hẹn trong việc giải quyết các vấn đề sắp xếp số lớn hiệu quả hơn so với nhiều thuật toán sắp xếp so sánh khác
Mục tiêu của nghiên cứu này là tìm hiểu sâu hơn về cơ chế hoạt động của thuật toán Radix Sort, đánh giá độ phức tạp của nó trong việc sắp xếp các dãy số lớn và đa dạng, cũng như tìm hiểu cách áp dụng thuật toán này vào các vấn đề thực tế
Phạm vi nghiên cứu của dự án này sẽ tập trung vào việc nắm vững cơ chế hoạt động của thuật toán sắp xếp Radix Sort, xác định tính chất và ứng dụng của thuật toán trong công việc sắp xếp dãy số lớn và đa dạng Nghiên cứu cũng sẽ xem xét khả năng tối ưu hoá và cải thiện hiệu suất của thuật toán này trong các điều kiện thực tế
Phương pháp nghiên cứu sẽ bao gồm việc tìm hiểu lý thuyết cơ bản về thuật toán Radix Sort đồng thời sử dụng các bộ dữ liệu thực tế để đánh giá hiệu suất và tính chất của thuật toán Ngoài ra, phương pháp nghiên cứu cũng sẽ bao gồm việc so sánh kết quả và hiệu suất của thuật toán Radix Sort với các thuật toán sắp xếp khác để đánh giá tính hiệu quả và ứng dụng của nó trong các tình huống cụ thể
Trong quá trình thực hiện đề tài, chúng em vẫn còn nhiều thiếu sót, rất mong nhận được sự góp ý của thầy cô và các bạn
1
Trang 5LỜI CẢM ƠN
Trước hết chúng em xin gửi lời cảm ơn tới Học viện Ngân hàng đã đưa môn Cấu trúc
dữ liệu và giải thuật vào chương trình giảng dạy Đồng thời, em xin bày tỏ lòng biết ơn sâu sắc đến các thầy cô Khoa Hệ thống thống tin quản lý, đặc biệt thầy Nguyễn Thanh Thụy – giảng viên bộ môn đã dạy dỗ, truyền đạt những kiến thức quý báu cho chúng em trong suốt thời gian học tập vừa qua
Chủ đề “ Thuật toán sắp xếp theo cơ số (Radix Sort)” là kết quả của một khóa học, là
sự nỗ lực, cố gắng và phói hợp của tất cả các thành viên trong nhóm chúng em Bài báo cáo này là một cột mốc đánh dấu cũng đồng thời là sự lưu giữ cho những cố gắng của chúng em trong suốt thời gian vừa qua Trong quá trình thực hiện và hoàn thành đề tài này, chúng em đã nhận được sự hướng dẫn nhiệt tình của các thầy cô và các bạn trong Khoa Hệ thống thông tin quản lý – Học viện Ngân hàng Chúng em xin được gửi lời cảm
ơn chân thành và sâu sắc đến quý thầy giáo, cô giáo trong Khoa, những người đã tận tình giảng dạy và truyền đạt những kiến thức cần thiết trong thời gian qua để chúng em có đủ kiến thức, kinh nghiệm, cũng như sự tự tin để hoàn thành đề tài này
Hơn nữa, chúng em đặc biệt gửi lời cảm ơn đến giảng viên bộ môn, thầy Nguyễn Thanh Thụy, người đã đồng hành cùng chúng em trong suốt quá trình học tập và thực hiện bài tập này Khi học tập và làm việc tại lớp của thầy, chúng em không chỉ được học hỏi về kiến thức chuyên ngành mà còn được học về thái độ làm việc chỉn chu, nghiêm túc,
về cách thức hợp tác, đúng trách nhiệm để hoàn thành công việc hiệu quả, nhanh chóng, tiết kiệm thời gian, nhân lực
Tuy nhiên dù đã cố gắng hết sức để hoàn thiện bài tập này nhưng do vốn kiến thức còn nhiều hạn chế, khả năng tiếp thu thực tế còn nhiều bỡ ngỡ nên sẽ không tránh khỏi những thiếu sót Kính mong nhận được sự cảm thông cũng như lời nhận xét, sự đóng góp
ý kiến từ thầy và các bạn để đề tài của nhóm chúng em được hoàn thiện hơn
Cuối cùng, chúng em xin kính chúc thầy có nhiều sức khỏe, hạnh phúc, luôn là người dẫn dắt các thế hệ sinh viên của Học viện Ngân hàng trưởng thành và trở thành một nhân
tố quan trọng của thị trường lao động
Em xin chân thành cảm ơn!
2
Trang 6LỜI CAM ĐOAN
Em xin cam đoan nội dung bài tiểu luận là kết quả của quá trình nghiên cứu tìm hiểu của nhóm chúng em, không đạo văn, gian lận, bịa đặt Toàn bộ nội dung tiểu luận được trình bày dựa trên những kiến thức được học, những hiểu biết bản thân và tìm hiểu từ nhiều nguồn tài liệu Tất cả những tài liệu tham khảo đều được trích dẫn rõ ràng, hợp pháp Do hiểu biết và trình độ còn hạn chế nên khó tránh khỏi những sai sót không đáng
có, mong nhận được sự góp ý và thông cảm từ giảng viên Nhóm em xin hoàn toàn chịu trách nhiệm nếu có bất kì sự gian lận nào
3
Trang 7I TỔNG QUAN VỀ THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT
1 Radix Sort là gì?
Radix Sort là một thuật toán sắp xếp không so sánh Nó tránh so sánh bằng cách
tạo và phân phối các phần tử vào các nhóm theo cơ số của chúng Đối với các phần tử có nhiều hơn một chữ số có nghĩa , quá trình phân nhóm này được lặp lại cho từng chữ số, trong khi vẫn giữ nguyên thứ tự của bước trước cho đến khi tất cả các chữ số đã được xem xét
2 Ứng dụng
Ứng dụng chính của thuật toán Radix Sort bao gồm:
Sắp xếp các số nguyên không âm: Radix Sort hiệu quả khi sắp xếp các số nguyên không âm với số lượng chữ số cố định hoặc giới hạn
Sử dụng trong các hệ thống cơ sở dữ liệu: Thuật toán Radix Sort có thể được
sử dụng để sắp xếp dữ liệu theo các trường số học cụ thể trong cơ sở dữ liệu Ngoài ra, thuật toán Radix Sort cũng có thể được áp dụng trong các ứng dụng khác như xử lý hình ảnh, xử lý tín hiệu, và trong các trường hợp đặc biệt khi cần sắp xếp các số nguyên không âm theo các quy tắc cụ thể về số lượng chữ số
3 Nguyên tắc hoạt động
Nguyên tắc hoạt động của thuật toán Radix Sort tập trung vào việc phân loại dữ liệu dựa trên các giá trị của từng chữ số hoặc bit trong biểu diễn của các phần tử dữ liệu
Chọn một vị trí chữ số bắt đầu (ví dụ: chữ số đơn vị hoặc hàng đơn vị đối với
số nguyên không âm)
Phân chia tất cả các phần tử vào các nhóm dựa trên chữ số ở vị trí đã chọn Sắp xếp tất cả các nhóm theo chữ số đã chọn
Lặp lại quá trình trên với các chữ số tiếp theo (nếu có)
Kết hợp các nhóm đã sắp xếp để tạo thành dãy số đã được sắp xếp hoàn chỉnh
II THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT
1 Ý tưởng
Radix Sort dựa trên nguyên tắc phân loại thư của bưu điện Ta biết rằng, để chuyển một khối lượng thư lớn đến tay người nhận ở nhiều địa phương khác nhau, bưu điện thường tổ chức một hệ thống phân loại thư phân cấp Trước tiên, các thư đến cùng một tỉnh, thành phố sẽ được sắp chung vào một lô để gửi đến tỉnh thành tương ứng Bưu điện các tỉnh thành này lại thực hiện công việc tương tự Các thư đến cùng một quận, huyện sẽ được xếp vào chung một lô và gửi đến quận, huyện tương ứng Cứ như vậy, các bức thư
sẽ được trao đến tay người nhận một cách có hệ thông mà công việc sắp xếp thư không quá nặng nhọc
Mô phỏng lại qui trình trên, để sắp xếp dãy a1, a2, …, an thuật toán Radix Sort thực hiện như sau:
4
Trang 8Trước tiên, ta 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ố
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…
2 Thuật toán
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
3 Ví dụ minh họa
Sắp xếp dãy:
0701 1725 0999 9170 3252 4518 7009 1424 0428 1239 8426 7013
Các bước tiến hành như sau:
5
Trang 9+ Phân lô theo hàng đơn vị:
12 0701
11 1725
10 0999
9 9170
8 3252
7 4518
6 7009
5 1424
4 0428
2 8425 1725 4518 7009
1 7013 9170 0701 3252 7013 1424 8425 0428 1239
+ Phân lô theo hàng chục:
12 09 99
11 70 90
10 12 93
9 45 81
8 04 82
7 17 52
6 84 52
5 14 42
4 701 04 82
3 325 17 52
2 070 70 90 45 81 84 52
1 917 07 10 70 31 14 42 1239 32 25 9170 09 99
+ Phân lô theo hàng trăm:
6
Trang 1012 0 999
11 9 701
10 3 522
9 1 392
8 0 284
7 1 257
6 8 254
5 1 244
4 4 185
3 713 0 284
2 709 7013 3 522 8425 1 257
1 001 7 090 9 701 1239 1424 4518 0701 0 999
+ Phân lô theo hàng nghìn:
12 0999
11 1725
10 0701
9 4518
8 0428
7 8425
6 1424
5 3252
4 1239
3 9170 0999 1725
2 7013 0701 1424 7013
1 7009 0428 1239 3252 4518 7009 8425 9170
+ L y các ph n t t các lô B0, B1, , B9 n i l i thành A:ấ ầ ử ừ ố ạ
12 9170
7
Trang 1111 8425
10 7013
9 7009
8 4518
7 3252
6 1725
5 1424
4 1239
3 0999
2 0701
1 0428
Dãy số sau khi đã sắp xếp:
0428 0701 0999 1239 1424 1725 3252 4518 7009 7013 8425 9170
4 Độ phức tạp
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)
8
Trang 12III ƯU ĐIỂM VÀ NHƯỢC ĐIỂM CỦA THUẬT TOÁN SẮP XẾP THEO CƠ SỐ RADIX SORT
1 Ưu điểm
Hiệu suất tốt: Radix Sort thường hiệu quả với các dãy số lớn có số lượng phần tử nhỏ
Ví dụ: Khi bạn cần sắp xếp một danh sách lớn các số nguyên có giá trị giới hạn từ 0 đến 9999
Không cần so sánh: Radix Sort không cần so sánh giữa các phần tử, nó chỉ tính toán và sắp xếp các số dựa trên chữ số Vì vậy, nó là một lựa chọn tốt cho các dữ liệu đặc biệt như số nguyên với số chữ số cố định
Ví dụ: Khi bạn cần sắp xếp danh sách các chuỗi theo thứ tự từ điển
Không tùy chọn: Radix Sort là một thuật toán độc lập về dữ liệu, nó không phụ thuộc vào cấu trúc hoặc giá trị của dữ liệu
Dễ dàng mở rộng: Radix Sort có thể dễ dàng mở rộng để sắp xếp các dữ liệu khác nhau như chuỗi hoặc số thực
Dễ hiểu: Radix Sort là một thuật toán dễ hiểu với cú pháp đơn giản và cách hoạt động rõ ràng
2 Nhược điểm
Nó chỉ có thể sắp xếp các loại dữ liệu có thể biểu diễn bằng các hệ số cơ số Các loại dữ liệu khác, chẳng hạn như các số thực, không thể được sắp xếp bằng Radix Sort mà phải sử dụng các thuật toán khác
Không hiệu quả với số lượng bit lớn: Khi sắp xếp các số nguyên có số lượng bit lớn, thuật toán radix sort trở nên không hiệu quả và đòi hỏi bộ nhớ lớn Điều này có thể là một hạn chế đối với các tập dữ liệu lớn và có số lượng bit lớn
3 So sánh Radix Sort với Quick Sort
Radix Sort Quick Sort
Ưu điểm
Hiệu suất tốt cho dãy số
lớn và không bị ảnh
hưởng bởi trạng thái ban
đầu
Xử lý cả số âm và dương
một cách hiệu quả
Sắp xếp ổn định, bảo tồn
thứ tự ban đầu của các
phần tử có cùng giá trị
Hiệu suất cao trong nhiều trường hợp, đặc biệt là dãy số lớn
Sắp xếp trực tiếp trên dãy ban đầu, không cần bộ nhớ phụ
Dễ dàng cài đặt và thường nhanh hơn so với các giải thuật khác
9
Trang 13điểm
Khả năng tốn nhiều bộ
nhớ trong trường hợp dãy
số lớn
Khó khăn khi xử lý dãy
số với số lượng hạng lớn
Chỉ áp dụng cho số
nguyên, không thể sắp
xếp kiểu dữ liệu phức tạp
khác
Khả năng xảy ra trường hợp xấu nhất, khiến hiệu suất giảm đáng kể
Không đảm bảo tính ổn định,
có thể thay đổi thứ tự của các phần tử có cùng giá trị Không xử lý tốt dãy số gần đã sắp xếp
10
Trang 14IV CHƯƠNG TRÌNH DEMO
11
Trang 15Kết quả hiển thị:
12
Trang 16TÀI LIỆU THAM KHẢO
Bài giảng môn Cấu trúc dữ liệu và giải thuật (n.d.) Retrieved from
https://docs.google.com/presentation/d/1_zevH2Ur8aElDGqFTiEfciUrCtqCAAk1/ edit
Radix Sort – Data Structures and Algorithms Tutorials (n.d.) Retrieved from
https://www.geeksforgeeks.org/radix-sort/
Sắp xếp theo cơ số (Radix Sort) - DNMTechs (n.d.) Retrieved from
https://dnmtechs.com/sap-xep-theo-co-so-radix-sort/
What Is Radix sort Algorithm: Pseudocode, Time Complexity, C & More (n.d.) Retrieved from https://www.simplilearn.com/tutorials/data-structure-tutorial/radix-sort
13