bài tập lớn cấu trúc dữ liệu giải thuật thuật toán sắp xếp shaker sort

21 0 0
Tài liệu đã được kiểm tra trùng lặp
bài tập lớn cấu trúc dữ liệu giải thuật thuật toán sắp xếp shaker sort

Đ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

Như vậy, việc học Cấu trúc dữ liệu & giải thuật là một việc rất quan trọng.Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là một trongnhững kiến thức nền tảng cơ bản nh

Trang 2

THUẬT TOÁN SẮP XẾP SHAKER SORT

Giáo viên hướng dẫn: ThS Nguyễn Thanh ThụyThành viên nhóm:

Trang 3

MỨC ĐỘ ĐÓNG GÓP CỦA CÁC THÀNH VIÊN

STTMÃ SVHỌ TÊNMỨC ĐỘ ĐÓNG GÓP

1 25A4041551 Trần Phúc Hưng 20%

2 25A4041531 Nguyễn Hải Dương 20%

3 25A4041902 Nguyễn Thiên Phú 20%

4 25A4041895 Nguyễn Đức Mạnh 20%

5 25A4041546 Mai Thái Huy 20%

Trang 4

LỜI CAM ĐOAN

Chúng tôi xin cam đoan các thông tin có được trong bài tập lớn là sản phẩm củanhóm chúng tôi Các kiến thức và thông tin trong bài không đạo văn, không bịa đặt,thông đồng hay sao chép lại từ nhóm khác Toàn bộ nội dung của bài tập lớn đượctrình bày là của các cá nhân trong nhóm hoặc được thu thập và tổng hợp từ nhiềunguồn khác nhau Các tài liệu tham khảo đều có xuất xứ rõ ràng và được trích dẫn hợppháp Chúng tôi xin hoàn toàn chịu trách nhiệm và chịu mọi hình thức kỷ luật theo quyđịnh cho lời cam đoan của nhóm.

Thành Phố Hà Nội, ngày 10/12/2023.

Trang 5

1.2 Thông tin về thuật toán sắp xếp Shaker Sort 1

CHƯƠNG 2: THUẬT TOÁN SẮP XẾP SHAKER SORT 3

2.1 Ý tưởng thuật toán (Agrawal, 2023): 3

2.2 Các bước hoạt động của thuật toán (Quoc_Khanh_Tran, 2022) 3

2.3 Code thuật toán Shaker Sort (C++) 4

2.4 Minh họa thuật toán (Agrawal, 2023) 4

2.5 Độ phức tạp của thuật toán Shaker Sort 12

Trang 6

DANH MỤC HÌNH ẢNH

HÌNH ẢNH 1: CHARLES ANTONY RICHARD HOARE 1

HÌNH ẢNH 2: SHAKER ORT 4 SHÌNH ẢNH 3: THUẬT TOÁN SẮP XẾP MẢNG TỪ PHẢI QUA TRÁI BẮT ĐẦU TỪ VỊ TRÍ =RIGHT 5

Trang 7

LỜI MỞ ĐẦU

Từ lâu, Cấu trúc dữ liệu và giải thuật luôn là một trong những kiến thức quantrọng trong ngành Công nghệ thông tin nói chung Dưới sự kiểm soát của con người,Cấu trúc dữ liệu và giải thuật đang góp phần tăng tốc độ phát triển trong việc quản lýcủa con người lên một tầm cao mới Tuy nhiên, để sử dụng Cấu trúc dữ liệu và giảithuật, ta phải biết cách sử dụng Cấu trúc dữ liệu & giải thuật một cách đúng đắn, tối ưuthì mới có thể giải lớn trong Công nghệ thông tin nói riêng và đời sống xã hội nóichung Như vậy, việc học Cấu trúc dữ liệu & giải thuật là một việc rất quan trọng.

Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là một trongnhững kiến thức nền tảng cơ bản nhất Vì có hứng thú với thuật toán sắp xếp ShakerSort, nhóm chúng tôi đã quyết định nghiên cứu và phân tích thuật toán này bằng nhữngkiến thức đã học từ môn Cấu trúc dữ liệu & giải thuật và tìm hiểu trên các nền tảngInternet.

Là những sinh viên của Khoa công nghệ thông tin, tuy chưa có nhiều kinhnghiệm và kiến thức về chuyên ngành nhưng trong bộ môn Cấu trúc dữ liệu & giảithuật đã giúp chúng tôi đã có cơ hội được làm việc nhóm cùng nhau để tìm tòi, khaithác kiến thức về môn học Cấu trúc dữ liệu và giải thuật Dưới đấy là bản báo cáo củanhóm chúng tôi về đề tài “Thuật toán sắp xếp Shaker Sort”.

Trang 8

CHƯƠNG 1: GIỚI THIỆU VỀ THUẬT TOÁN SẮP XẾP SHAKER SORT

1.1 Lý do chọn đề tài

Cấu trúc dữ liệu và giải thuật là một trong những bộ môn quan trọng trongngành Công nghệ thông tin nói chúng và chuyên ngành Khoa học máy tính nói riêng.Trong bộ môn này, chúng ta sẽ được tiếp thu những kiến thức nền tảng vững chắcnhằm hiểu rõ cách thức hoạt động của máy tính cũng như có khả năng giải quyết cácbài toán một cách hiệu quả.

Trong môn Cấu trúc dữ liệu và giải thuật, các thuật toán sắp xếp là những kiếnthức cơ bản để giải quyết các bài toán sắp xếp Một trong những thuật toán sắp xếpđược phát triển chính là Shaker Sort Tuy không phải là một thuật toán sắp xếp nổitiếng nhưng thuật toán Shaker Sort vẫn được đưa vào chương trình giảng dạy ở mứcĐại Học của môn Cấu trúc dữ liệu và giải thuật Vì sự hứng thú với thuật toán sắp xếpShaker Sort, nhóm chúng tôi quyết định chọn thuật toán này làm đề tài cho bài tập lớnlần này.

1.2 Thông tin về thuật toán sắp xếp Shaker Sort

Charles Antony Richard Hoare là một nhà khoa máy tính người Anh nổi tiếng.Nhắc đến ông, người ta sẽ nghĩ ngay đến người đã phát triển ra thuật toán Quick Sort,một trong những thuật toán sắp xếp phổ biến nhất trên thế giới Ngoài ra, ông cũngchính là người đã đạt được nhiều giải thưởng, trong đó có giải thưởng Turing danh giácho các nhà khoa học máy tính Ngoài thuật toán Quick Sort, ông cũng là người đãphát triển thuật toán sắp xếp Shaker Sort.

Hình ảnh 1: Charles Antony Richard Hoare

1

Trang 9

Năm 1962, ông đã nghiên cứu và phát triển ra thuật toán Shaker Sort Đây làmột thuật toán sắp xếp đơn giản được phát triển và cải tiến từ một thuật toán phổ biếnkhác là Bubble Sort Bubble Sort hoạt động bằng cách duyệt qua mảng từ đầu cho đếncuối, sau đó so sánh các phần tử liền kề và hoán vị chúng nếu chúng không được sắpxếp theo thứ tự Shaker Sort có phương thức hoạt động khá tương tự như Bubble Sort,tuy nhiên nó sẽ duyệt qua mảng hai lần, một lần duyệt từ đầu cho đến cuối và một lầnngược lại Trong khi duyệt, thuật sẽ hoán vị các phần tử liền kề nếu chúng không đượcsắp xếp theo thứ tự (Hoare, 1962).

2

Trang 10

CHƯƠNG 2: THUẬT TOÁN SẮP XẾP SHAKER SORT

2.1 Ý tưởng thuật toán (Agrawal, 2023):

Như đã đề cập ở trên, Shaker Sort sẽ duyệt qua mảng hai lần, một lần duyệt từđầu cho đến cuối và một lần ngược lại Trong khi duyệt, thuật sẽ hoán vị các phần tửliền kề nếu chúng không được sắp xếp theo thứ tự Ta có thể hình dung như sau:

Trong mỗi lần sắp xếp, Shaker Sort sẽ duyệt mảng 2 lượt từ 2 phía khác nhau:- Lượt đi: thuật toán đẩy phần tử nhỏ về đầu mảng

- Lượt về: đẩy phần tử lớn về cuối mảng

Trong khi thực hiện mỗi lượt sắp xếp, thuật toán sẽ ghi nhận lại vị trí của phầntử đã sắp xếp để tránh các phép so sánh thừa.

2.2 Các bước hoạt động của thuật toán (Quoc_Khanh_Tran, 2022)

Giả dụ ta cần sắp xếp theo thứ tự từ nhỏ đến lớn cho một mảng gồm n phần tử.Thuật toán Shaker Sort có 2 cách duyệt, để dễ hiểu nhất ta nên duyệt ngược mảng từphải qua trái

Cách duyệt từ trái qua phải cũng tương tự và chỉ có một sự thay đổi nhỏ.Bước 1: Khởi tạo các biến sau:

- left = 0; //Vị trí phần tử bên trái của mảng.- right = n – 1; //Vị trí phần tử bên phải của mảng.- k = n – 1; //Ghi nhận vị trí phần tử

Bước 2: Duyệt mảng từ đầu tới cuối với điều kiện left < right:Bước 2a:

i = right

Trong khi (i > left) thực hiện

Nếu a[i] < a[i – 1]: Swap(a[i], a[i – 1]);k = i;

i ;left = k;Bước 2b:i = left

Trong khi (i < right) thực hiện

Nếu a[i] > a[i + 1]: Swap(a[i], a[i + 1]);k = i;

3

Trang 11

Giả dụ ta cần sắp xếp theo thứ tự từ nhỏ đến lớn cho một mảng gồm 5 phần tửlà 1, 9, 5, 3, 8 Lưu ý: Mảng xuất phát từ vị trí 0 Thuật toán Shaker Sort sẽ được minhhọa bằng hình ảnh như sau:

4

Trang 12

Hình ảnh 4: đổi chỗ 3 và 8

5

Trang 13

Hình ảnh 6: đổi chỗ 3 và 5

6

Trang 14

Hình ảnh 8: đổi chỗ 3 và 9

7

Trang 15

Hình ảnh 10: Thuật toán sắp xếp mảng từ trái qua phải bắt đầu từ vị trí = left

8

Trang 16

Hình ảnh 12: cập nhật k

9

Trang 17

Hình ảnh 9: cập nhật k và cập nhật right sau khi chạy hết điều kiện trong vòng lặp

10

Trang 18

Hình ảnh 11: mảng đã sắp xếp, cập nhật k, cập nhật left, right và thoát vòng lặp- Như vậy, mảng sau khi được sắp xếp là 1, 3, 5, 8, 9.

11

Trang 19

2.5 Độ phức tạp của thuật toán Shaker Sort2.5.1 Độ phức tạp:

- Trường hợp tốt nhất: O(n).- Trường hợp xấu nhất: O(n2).- Trường hợp trung bình: O(n2).

2.5.2 Số lần hoán vị:- Trường hợp tốt nhất: n - 1.- Trường hợp xấu nhất: 2(n – 1).

2.5.3 Số lần so sánh:- Trường hợp tốt nhất: n - 1.- Trường hợp xấu nhất: 2(n – 1).

2.6 Ưu và nhược điểm của thuật toán sắp xếp Shaker Sort2.6.1 Ưu điểm

- Thuật toán Shaker Sort là một thuật toán đơn giản, dễ hiểu và dễ triển khai khichỉ sử dụng một vòng lặp while và dùng một số phép so sánh và hoán vị bên trong.

- Thuật toán có thể hoạt động hiệu quả trên mảng gần như được sắp xếp.- Thuật toán này hoạt động rất hiệu quả khi sắp xếp các mảng có kích thước nhỏvà vừa.

2.6.2 Nhược điểm

- Thời gian chạy trung bình của thuật toán Shaker Sort là O(n ) Việc này đồng2

nghĩa với việc đây là một thuật toán hoạt động kém hiệu quả khi kích thước của mảngtăng lên.

- Trên các mảng có kích thước lớn, Shaker Sort hoạt động không hiệu quả vìmất nhiều thời gian hơn để hoàn thành việc sắp xếp.

12

Trang 20

KẾT LUẬN

Shaker Sort là một thuật toán sắp xếp dễ học dễ hiểu và hoạt động khá hiệu quả.Tuy không có ưu thế về tốc độ hay tính hiệu quả so với các thuật toán khác ở thờiđiểm hiện tại nhưng việc dễ học dễ có thể dùng làm kiến thức nền tảng cho sinh viênkhi học môn Cấu trúc dữ liệu và giải thuật.

Cấu trúc dữ liệu và giải thuật là một trong những môn học cần thiết và luônđược phát triển mạnh mẽ để phục vụ cho nhiều lĩnh vực hoạt động của con người Đặcbiệt là trong lĩnh vực công nghệ thông tin, khi mà đa số các ngành đang được Nhànước đẩy mạnh số hoá nhằm giúp cho các hoạt động quản lý hay các hoạt động kháccủa con người trở nên dễ dàng, rộng mở và an toàn hơn bao giờ hết.

13

Trang 21

TÀI LIỆU THAM KHẢO

Agrawal, R., 2023 geeksforgeeks.org [Online]Available at: https://www.geeksforgeeks.org/cocktail-sort/

Hoare, C., 1962 Quicksort Communications of the ACM.

Quoc_Khanh_Tran, 2022 daynhauhoc.com [Online]Available at: https://daynhauhoc.com/t/cau-truc-du-lieu-va-giai-thuat-giai-thuat-sap-xep-rung-lac-shaker-sort/126359

14

Ngày đăng: 19/06/2024, 17:03