1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

23 2 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Thuật toán sắp xếp trộn - Merge Sort
Tác giả Nhóm 09
Người hướng dẫn Ths. Giang Thị Thu Huyền
Trường học Học viện Ngân hàng
Chuyên ngành Cấu trúc dữ liệu và giải thuật
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 23
Dung lượng 1,49 MB

Nội dung

Để tìm kiếm trở nên hiệu quả, nhanh chóng thì dữ liệu phải được sắp xếptheo một trật tự, đòi hỏi chúng ta phải xây dựng những thuật toán sắp xếp phùhợp.Sắp xếp dữ liệu là một phần tất yế

Trang 1

HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

BÁO CÁO BÀI TẬP LỚNHọc phần: Cấu trúc dữ liệu và giải thuật

Trang 2

HỌC VIỆN NGÂN HÀNG KHOA HỆ THỐNG THÔNG TIN QUẢN LÝ

BÁO CÁO BÀI TẬP LỚNHọc phần: Cấu trúc dữ liệu và giải thuật

Trang 3

LỜI CẢM ƠN

Để hoàn thành tốt bài tập lớn này, em xin gửi lời cảm ơn chân thành nhấtđến Giảng viên hướng dẫn Ths Cô là người đã tận tâm chỉ bảo, hướng dẫnchúng em về mặt nội dung và kiến thức từ những buổi đầu trên lớp cũng nhưtrong quá trình chúng em làm bài báo cáo này, cô đã luôn tận tình giải đáp mọithắc mắc và hướng dẫn chúng em một cách chi tiết và cụ thể nhất Vì vậy, đểhoàn thành được bài báo cáo này không thể không nhắc đến sự chỉ bảo của cô.Mặc dù có nhiều cố gắng để thực hiện bài báo cáo một cách hoàn chỉnhnhất, song bài báo cáo không tránh khỏi những thiếu sót Em rất mong nhậnđược sự góp ý quý báu của quý cô để bài báo cáo của chúng em được hoàn thiệnhơn và mang nhiều ý nghĩa thực tiễn

Em xin chân thành cảm ơn!

Hà Nội, ngày 22 tháng 03 năm 2023

Nhóm 09

Trang 4

LỜI CAM ĐOAN

Nhóm 09 chúng em xin cam đoan đề tài: “Thuật toán sắp xếp trộn – MergeSort” là một công trình nghiên cứu độc lập dưới sự hướng dẫn của giảng viênKhoa Hệ thống thông tin quản lý – Học viện Ngân hàng là Ths Ngoài ra không

có bất cứ sự sao chép, đảm bảo tính liêm chính trong học thuật Đề tài, nội dungbáo là sản phẩm mà mỗi thành viên nhóm chúng em đã nỗ lực nghiên cứu trongquá trình học tập tại trường cũng như áp dụng vào thực tế Các số liệu, kết quảtrình bày trong báo cáo là hoàn toàn trung thực, đã có trích dẫn từ những nguồntham khảo Nhóm chúng em xin chịu hoàn toàn trách nhiệm, kỷ luật nếu như cóvấn đề xảy ra

Chúng em xin cam đoan!

Hà Nội, ngày 22 tháng 03 năm 2023

Nhóm 09

Trang 5

MỤC LỤC

PHẦN 1: LỜI MỞ ĐẦU 1

PHẦN 2: NỘI DUNG 2

1 Giới thiệu thuật toán Merge Sort 2

2 Ý tưởng và các bước tiến hành 2

2.1 Ý tưởng 2

2.2 Các bước tiến hành 3

3 Cài đặt thuật toán 3

4 Ví dụ minh họa 7

5 Độ phức tạp 13

6 Ưu điểm và nhược điểm 14

6.1 Ưu điểm 14

6.2 Nhược điểm 14

7 Ứng dụng của thuật toán 15

PHẦN 3: KẾT LUẬN 17

TÀI LIỆU THAM KHẢO 18

Trang 6

PHẦN 1: LỜI MỞ ĐẦU

Trong kỷ nguyên số hiện nay, công nghệ thông tin (CNTT) đã và đang trởthành mục tiêu mũi nhọn, định hướng phát triển của mỗi quốc gia Tại ViệtNam, việc đẩy mạnh sự phát triển của CNTT đang là một trong những mục tiêuhàng đầu Mặc dù CNTT đang ngày một phát triển, tốc độ xử lý thông tin, dữliệu cũng đã tăng lên nhưng chúng ta vẫn sẽ gặp nhiều khó khăn trong một sốbài toán khó, có dữ liệu đầu vào lớn Vấn đề này gây nhiều khó khăn đến việcphải giải quyết bài toán trong thời gian ngắn được quy định

Ngày nay, với nền công nghệ phát triển như vũ bão thì nhu cầu về việckhai thác, tìm kiếm thông tin của con người càng tăng cao Việc nâng cao tínhhiệu quả qua các giải thuật sắp xếp cũng ngày càng quan trọng và được chú ýđến Để tìm kiếm trở nên hiệu quả, nhanh chóng thì dữ liệu phải được sắp xếptheo một trật tự, đòi hỏi chúng ta phải xây dựng những thuật toán sắp xếp phùhợp

Sắp xếp dữ liệu là một phần tất yếu trong việc phân tích dữ liệu ví dụ nhưtrên Facebook ta cần sắp xếp và tính toán các nội dung hiện lên new feed, tin tứcnào liên quan đến ta nhất thường sẽ xuất hiện ở đầu bảng; việc tìm kiếm trênGoogle cũng vậy, ta không hề mong muốn Google gợi ý cho ta những thông tinkhông phù hợp, kết quả nào gần với từ khóa cần tìm nhất phải xuất hiện đầutiên Việc sắp xếp dữ liệu giúp chúng ta nhanh chóng tìm kiếm được dữ liệumong muốn, hiểu rõ hơn về dữ liệu của mình hoặc so sánh được các dữ liệu.Chính vì vậy, việc sắp xếp dữ liệu giúp ta tìm kiếm nhanh hơn và hỗ trợnhững bài toán rắc rối khác Bài toán sắp xếp chính là một nền tảng quan trọngtrong khoa học máy tính Từ những nhu cầu trên mà các thuật toán sắp xếp đãđược ra đời Một trong những thuật toán đó chính là Merge Sort ( thuật toán sắpxếp trộn) , đây là một thuật toán khá phức tạp nhưng nó đem lại hiệu suất cao vàtốc độ xử lý nhanh

Trang 7

PHẦN 2: NỘI DUNG

1 Giới thiệu thuật toán Merge Sort

Sắp xếp trộn – Merge Sort là một thuật toán sắp xếp thuộc loại sắpxếp nhanh trong khoa học máy tính Merge sort là thuật toán điển hìnhcho tư tưởng chia để trị để giải quyết các bài toán có dữ liệu lớn và phứctạp Cụ thể với bài toán sắp xếp, nó sẽ chia nhỏ danh sách cần sắp xếpthành từng phần tử rời, sau đó hòa nhập theo phương pháp trộn tự nhiênthành dãy có thứ tự

Merge sort là một trong những phương pháp đầu tiên sử dụng trongbài toán sắp xếp Thuật toán này được đề xuất bởi John Von Neumannvào đầu năm 1945 Một cuộc thảo luận và phân tích chi tiết về sắp xếphợp nhất đã được xuất hiện trong một báo cáo của Goldstine và Neumannnhư đầu năm 1948

2 Ý tưởng và các bước tiến hành

2.1 Ý tưởng

Các thuật toán sắp xếp đơn giản như Bubble Sort, Insertion Sort đềukhông thể xử lý được dữ liệu lớn Thuật toán sắp xếp trộn lấy ý tưởng từ việcchia để trị để chia nhỏ bài toán thành các bài toán nhỏ hơn, sau đó giải quyếtchúng Từ đó sẽ giúp xử lý dữ liệu lớn một cách tốt hơn, tối ưu về mặt thờigian Ý tưởng đưa ra như sau:

Chia danh sách gồm n phần tử chưa được sắp xếp thành n danh sách con,mỗi danh sách chứa một phần tử (danh sách một phần tử được coi là đãsắp xếp)

Liên tục hợp nhất các danh sách con để tạo ra các danh sách con được sắpxếp mớ cho đến khi chỉ còn lại một danh sách Đây sẽ là danh sách đượcsắp xếp

Trang 8

2.2 Các bước tiến hành

Bước 1:

Chia dãy cần sắp xếp thành 2 dãy con

Từ dãy con thu được lại tiếp tục chia thành 2 dãy con nhỏ hơn nữaQuá trình phân chia tiếp tục cho đến khi thu được dãy con chỉ còn duynhất 1 phần tử

Bước 2:

Hòa nhập 2 dãy con nhỏ nhất thành dãy con lớn hơn sao cho đúng thứ tự

Từ hai dãy con lớn hơn lại hòa nhập thành 2 dãy con lớn hơn nữa….Quá trình hòa nhập cứ tiếp tục như vậy cho đến khi thu được dãy số banđầu đã được sắp xếp

3 Cài đặt thuật toán

Trang 9

l - left index : chỉ số nhỏ nhất của phần tử trong mảng

m - middle index: chỉ số mid

r - right index :chỉ số lớn nhất của phần tử trong mảng

*/

Tìm phần tử m ( middle-index ) để chia mảng thành 2 nửa ( nếu left<right)

void mergeSort(int a[], int l, int r)

1.2 Trộn hai mảng con a[l m] và a[m+1 r]

Hàm con Merge ( gồm 4 tham số ) dùng để trộn và sắp xếp mảng a lại từ vịtrí left qua vị trí mid đến vị trí right, đây được coi là phần quan trọng nhấtcủa thuật toán

void merge(int a[], int l, int m, int r)

Trang 10

int i, j, k;

int n1 = m - l + 1; //n1: độ dài của nửa thứ nhất

int n2 = r - m; //n2: độ dài của nửa còn lại

Sau khi khai báo các biến, ta copy dữ liệu qua các mảng tạm, trước tiên thì cần tạo các mảng tạm để lưu trữ các phần tử:

Trang 11

/* Copy các phần tử còn lại của mảng L vào a (nếu có) */

Trang 12

7 {

Giải thuật sắp xếp trộn chia toàn bộ mảng thành hai nửa Tiến trình chianày tiếp tục diễn ra cho đến khi không còn chia được nữa và chúng ta thuđược các giá trị tương ứng biểu diễn các phần tử trong mảng

Ở đây, chúng ta thấy rằng một mảng gồm 7 mục được chia thành haimảng có kích thước tương ứng là 4 và 3

Bây giờ, một lần nữa thấy rằng chỉ số bên trái nhỏ hơn chỉ số bên phảicho cả hai mảng, nếu tìm thấy có, sau đó tính lại điểm giữa cho cả haimảng

Trang 13

8Tiến trình chia này không làm thay đổi thứ tự các phần tử trong mảngban đầu Bây giờ chúng ta tiếp tục chia các mảng này thành 2 nửa.

Chia tiếp hai mảng này thành các nửa tiếp theo, cho đến khi đạt được cácđơn vị nguyên tử của mảng và không thể chia tiếp nữa

Sau khi chia mảng thành các đơn vị nhỏ nhất, bắt đầu gộp lại các phần tửdựa trên so sánh kích thước của các phần tử

Bây giờ chúng ta tổ hợp chúng theo như đúng cách thức mà chúng đượcchia ra

Đầu tiên chúng ta so sánh hai phần tử trong mỗi list và sau đó tổ hợpchúng vào trong một list khác theo cách thức đã được sắp xếp Ví dụ,chúng ta so sánh 32 và 25 và trong list khác chúng ta đặt 25 ở đầu và sau

đó là 32 Tiếp đó, chúng ta so sánh 47 và 3 và trong list khác chúng tađặt 3 ở đầu và sau đó là 47 Tương tự, chúng ta thay đổi vị trí của 7, 16

và 85 được đặt tương ứng

Vòng lặp tiếp theo là để kết hợp từng cặp list một ở trên Chúng ta sosánh các giá trị và sau đó hợp nhất chúng lại vào trong một list chứa giátrị, và các giá trị này đều đã được sắp thứ tự

Sau khi hợp nhất bước cuối cùng, ta sẽ nhận được một danh sách đã sắpxếp như sau:

Trang 15

Phần chương trình:

#include<stdio.h>

#include<conio.h>

// Gop hai mang con a[l m] và a[m+1 r]

void merge(int a[], int l, int m, int r)

// Gop hai mang tam tren vào mang a

i = 0; // Khoi tao chi so bat dau cua mang con dau tien

j = 0; // Khoi tao chi so bat dau cua mang con thu hai

k = l; // Khoi tao chi so bat dau cua mang luu ket qua while (i < n1 && j < n2)

{

if (L[i] <= R[j])

Trang 16

11 {

Trang 17

12 k++;

// Ham xuat mang

void xuat(int a[], int size)

Trang 18

Độ phức tạp thời gian của Sắp xếp hợp nhất(Merge Sort) là θ(nLogn) trong cả 3 trường hợp (xấu nhất, trung bình và tốt nhất) => vì sắp

Trang 19

Độ phức tạp trung bình O(n log n), tốc độ giải quyết khá nhanh

Có tính ổn định và thích ứng, tốc độ không bị ảnh hưởng nhiều bởi dữliệu đầu vào

Xử lý khá tốt với dữ liệu lớn đặc biệt là dạng list, file

6.2 Nhược điểm

Tốn nhiều bộ nhớ nếu sử dụng đệ quy

Code khó cài đặt, tương đối phức tạp

Trong hầu hết các trường hợp, thuật toán này không được đánh giá caohơn Quick sort

7 Ứng dụng của thuật toán

Trang 20

15Merge sort đây là một thuật toán sắp xếp đơn giản và hiệu quả, được

sử dụng rộng rãi trong nhiều ứng dụng thực tế Một vài ứng dụng có thể kểđến như:

Bài toán nghịch đảo (inversion problem) là một bài toán quan trọngtrong khoa học máy tính và toán học, trong đó cần tìm số lần đổi chỗ haiphần tử để biến một dãy đã cho thành dãy đã sắp xếp Cụ thể, Merge sort

sử dụng kỹ thuật chia để trị (divide and conquer) để sắp xếp một dãy số.Trong quá trình sắp xếp, Merge sort tính toán số lần đổi chỗ (inversioncount) bằng cách đếm số cặp phần tử trong hai nửa của dãy số mà phần tửđứng sau có giá trị nhỏ hơn phần tử đứng trước trong nửa kia của dãy số.Sau đó, sử dụng phép trộn (merge) để trộn các nửa dãy đã sắp xếp lại vớinhau và tính toán số lần đổi chỗ của dãy số đã sắp xếp Ngoài ra, MergeSort cũng có thể được sử dụng để tối ưu hóa các thuật toán khác liên quanđến bài toán nghịch đảo, chẳng hạn như thuật toán tìm kiếm nhị phân(binary search) trong dãy số đã sắp xếp

Merge Sort là một trong những thuật toán sắp xếp nhanh được sửdụng rộng rãi với thời gian thực hiện là O(NlogN) trong mọi trường hợp.Việc sắp xếp một dãy số gồm 106 số tốn chưa tới 1 giây Không chỉ manglại tốc độ cực kỳ tốt, Merge Sort còn giữ được thứ tự của các phần tử bằngnhau sau khi sắp xếp Vì vậy Merge Sort được ứng dụng trong việc sắp xếpmột số lượng lớn dữ liệu mà không thể lưu trữ hết trong bộ nhớ

Với các file có kích thước lớn, việc sử dụng các thuật toán sắp xếpđơn giản như insertion sort hay selection sort sẽ gặp phải khó khăn về bộnhớ và thời gian, vì vậy Merge sort là một lựa chọn tốt hơn Cách thức hoạtđộng của Merge sort cho phép nó sắp xếp các file lớn bằng cách chia filethành các phần nhỏ hơn, sắp xếp từng phần rồi trộn các phần lại với nhau.Việc chia file thành các phần nhỏ hơn giúp giảm tải bộ nhớ cần sử dụng vàthuận tiện cho việc xử lý Sau đó, các phần được trộn lại với nhau để tạo ramột file lớn đã sắp xếp Ngoài ra, Merge sort còn được sử dụng để sắp xếp

Trang 21

16các danh sách liên kết (linked list) lớn Vì danh sách liên kết không yêu cầuliên tục trong bộ nhớ, nó có thể được chia thành các phần nhỏ và sắp xếpcác phần đó một cách riêng biệt trước khi trộn lại với nhau.

Ngoài ra, Merge sort có thể được sử dụng để sắp xếp các khung âmthanh (audio frames) trong các tệp âm thanh.Cụ thể, khi trộn các file âmthanh, các tệp âm thanh thường được chia thành các khung âm thanh có độdài nhất định (ví dụ: 10ms) Để trộn các tệp âm thanh, các khung âm thanhtrong các tệp này cần được sắp xếp theo thứ tự thời gian Merge sort có thểđược sử dụng để sắp xếp các khung âm thanh theo thời gian, trước khi trộnchúng lại với nhau để tạo ra một tệp âm thanh mới Không những thế,Merge sort cũng có thể được sử dụng để trộn các tệp âm thanh có độ dàikhác nhau

Merge sort có thể được áp dụng trong thương mại điện tử Khi kháchhàng tìm kiếm các sản phẩm trên một trang web thương mại điện tử, họthường muốn sắp xếp các sản phẩm theo giá cả để tìm kiếm sản phẩm phùhợp với ngân sách của mình Merge sort có thể được sử dụng để sắp xếpcác sản phẩm theo giá cả từ thấp đến cao hoặc ngược lại Không những vậyMerge sort cũng có thể được sử dụng để sắp xếp các sản phẩm theo tên,giúp khách hàng dễ dàng tìm kiếm sản phẩm cần thiết Đặc biệt, Merge sortcũng có thể được sử dụng để sắp xếp các sản phẩm theo độ phổ biến, giúpngười quản lý trang web thương mại điện tử hiểu được xu hướng mua hàngcủa khách hàng và điều chỉnh chiến lược kinh doanh của mình

Tóm lại, Merge sort là một trong những thuật toán sắp xếp hiệu quả

và linh hoạt trong thực tiễn Tuy nhiên, để đánh giá đầy đủ về ứng dụng củaMerge sort, cần phải xem xét các yếu tố khác như tính ổn định, chi phí bộnhớ và kích thước dữ liệu

Trang 22

PHẦN 3: KẾT LUẬN

Việc sắp xếp là thao tác giúp cho cuộc sống của chúng ta trở nên dễdàng hơn Thử tưởng tượng một quyển từ điển không được sắp xếp theothứ tự alphabet và chúng ta phải lật từng trang một để tìm thứ mình cần.Điều đó rất bất tiện Cũng như trong lập trình, thuật toán sắp xếp giúpthao tác tìm kiếm, lọc hay giải quyết vấn đề của chúng ta dễ dàng hơn rấtnhiều Với những ưu điểm mà thuật toán Merge Sort mang lại, nó có lẽ làmột lựa chọn sắp xếp tốt và được sử dụng phổ biến trong khoa học máytính

Trang 23

Tài liệu trực tuyến

1 GeekforGeek (23/03/2023), “C Program for Merge Sort”,

https://www.geeksforgeeks.org/c-program-for-merge-sort/?

fbclid=IwAR0nBQUXosT4aTaW3PVMGPctbsJ6yfH5_BZhQH8OeOGwKENjJg9n2RLEeWs

2 DuongDinh (06/05/2021), “Thuật toán sắp xếp trộn”,

https://duongdinh24.com/thuat-toan-sap-xep-tron/

3 Hoclaptrinh.vn, “Giải thuật sắp xếp trộn (Merge Sort)’,

thuat-sap-xep-tron-merge-sort?

https://hoclaptrinh.vn/tutorial/cau-truc-du-lieu-amp-giai-thuat-55-bai/giai-fbclid=IwAR1xmLPMutUQxd2YXz62FqJLaSLuN7QMey11IEdADfuXY0de3O4KfzUPg3o

4 Khuê Nguyễn (13/03/2022), “Các thuật toán sắp xếp trong C”,

https://khuenguyencreator.com/cac-thuat-toan-sap-xep-trong-c/#Sap_xep_tron_Merge_Sort

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

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Tài liệu bài giảng, Ths.Giang Thị Thu Huyền, “Cấu trúc dữ liệu và giải thuật”, Học viện Ngân Hàng Sách, tạp chí
Tiêu đề: Cấu trúc dữ liệu và giảithuật
1. GeekforGeek (23/03/2023), “C Program for Merge Sort”, https://www.geeksforgeeks.org/c-program-for-merge-sort/?fbclid=IwAR0nBQUXosT4aTaW3PVMGPctbsJ6yfH5_BZhQH8OeOGwKENjJg9n2RLEeWs Sách, tạp chí
Tiêu đề: C Program for Merge Sort
2. DuongDinh (06/05/2021), “Thuật toán sắp xếp trộn”, https://duongdinh24.com/thuat-toan-sap-xep-tron/ Sách, tạp chí
Tiêu đề: Thuật toán sắp xếp trộn
4. Khuê Nguyễn (13/03/2022), “Các thuật toán sắp xếp trong C”, https://khuenguyencreator.com/cac-thuat-toan-sap-xep-trong-c/#Sap_xep_tron_Merge_Sort Sách, tạp chí
Tiêu đề: Các thuật toán sắp xếp trong C
3. Hoclaptrinh.vn, “Giải thuật sắp xếp trộn (Merge Sort)’, https://hoclaptrinh.vn/tutorial/cau-truc-du-lieu-amp-giai-thuat-55-bai/giai-thuat-sap-xep-tron-merge-sort?fbclid=IwAR1xmLPMutUQxd2YXz62FqJLaSLuN7QMey11IEdADfuXY0de3O4KfzUPg3o Link
2. Đỗ Xuân Lôi (2016), Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Đại học Quốc gia Hà Nội.Tài liệu trực tuyến Khác

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

TÀI LIỆU LIÊN QUAN

w