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

Báo cáo Đồ án cấu trúc dữ liệu và giải thuật lab 3 sorting

21 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
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 đề Báo Cáo Đồ Án Cấu Trúc Dữ Liệu Và Giải Thuật Lab 3: Sorting
Tác giả Cơ Tran Thi Thao Nhi, Nguyễn Minh Triết, Nguyễn Đặng Hồng Dinh
Người hướng dẫn Thầy Bùi Huy Thông
Trường học Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại báo cáo đồ án
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 21
Dung lượng 1,74 MB

Nội dung

-__ Sử dụng thuật toán Insertion Sort cho các phần tử nhỏ: Thay vì tìm kiếm phần tử nhỏ nhất trong mỗi vòng lặp, ta có thể áp dụng thuật toán Insertion Sort cho các phần tử nhỏ hơn một n

Trang 1

ĐẠI HỌC QUÓC GIA THÀNH PHÓ HỎ CHÍ MINH

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA CÔNG NGHỆ THÔNG TIN

LAB 3: SORTING

Giảng viên hướng dẫn : Thầy BÙI HUY THÔNG

Cô TRAN THI THAO NHI

2 Nguyễn Đặng Hoàng Dinh

Hỗ Chí Minh — 2023

Trang 2

MỤC LỤC

X90): 5100/ 9000777 5

IN (9009:0050) 909)0077 5

IS nh 5

an 45 ÔỎ 5 b) Ung tr 5 ốc ẽ ẽ.ẽ -(‹{ŸỹđÄ{i,L., H , H, 6

c) _ Các đặc trưng của một thuật toán sắp XẾP ¿52c St 3É 2 TH tt EEEEvE.HH1H111 1111111 rye 6 In (ra cổ 6h -1+ 6

3, Qua na ca 6

a) _ Cầu hình máy để chạy churong triml: .cccccccsssccssesseccssscsssccsseessccessccsscssssessscessececesssscsssesssscssesssecsesessseesseessueeess 6 ID a0 n6 7

C) Cong vide chura Lame 0 7

II Bì 7920:0009) 76 -.A 7

1 Những thuật toán đã cocle ƯỢC: - - th HH HT HH Hà TH HH Tà nhà ih 7 2 _ Những thuật toán chưa cocle ƯỢC: - si Thọ Hà hà 7 ST ôn ha 8

A) ›.z“ a 8

tin 5 6 e 8

ĐI) 0 03 nnc 8

A) Ưu và nhược điểm +: 1t S 11x SĐT TT Tnhh TT TT TT TH TT TT Tàn TT TT hy 8 1 8a ::.‹-1 8

4 InsertiOn SOFẲ LH HH TH HT HH TH Ti TT Ti 8 A) A ẻ®a ».:211 8

tin 5 6 e 8

ĐI) 0 03 nnc 9

Di nho n8 '-“-“-‹“‹‹“44 9

1 8a ::.‹-1 9

HH ) na 9

A) A ẻ®a ».:211 9

tin 5 6 e 9

ĐI) 0 03 nnc 9

Trang 3

A) Ưu và nhược điểm +: 1t S 11x SĐT TT Tnhh TT TT TT TH TT TT Tàn TT TT hy 9

“8a -.-‹⁄ÍÍiÍ 10

= ma e.- ố.ốỐốỐỐỐ 10

Bá 17 .TT Ầ 10

toi 8 6 ae .a 10

BI? 0 033i na ắ.ắa 10

d) _ Ưu và nhược điểm - S133 1kg HT TH 10 “8a -.-‹⁄ÍÍiÍ 11

rà 11

Lo ga .<‹£%ẬAdŒAg .A 11

toi 8 6 ae .a 11

BI? 0 033i na ắ.ắa 11

d) _ Ưu và nhược điểm - S133 1kg HT TH 11 “8a -.-‹⁄ÍÍiÍ 11

E ơn 12

Lo ga .<‹£%ẬAdŒAg .A 12

toi 8 6 ae .a 12

BI? 0 033i na ắ.ắa 12

d) _ Ưu và nhược điểm - S133 1kg HT TH 12 “8a -.-‹⁄ÍÍiÍ 12

Lm —› 12

Lo ga .<‹£%ẬAdŒAg .A 12

toi 8 6 ae .a 12

BI? 0 033i na ắ.ắa 13

d) _ Ưu và nhược điểm - S133 1kg HT TH 13 “8a -.-‹⁄ÍÍiÍ 13

10 9//aes ẻ.ốẻ e ỐỐỐ ằẳằẮ 13

Bá 17 .TT Ầ 13

toi 8 6 ae .a 13

BI? 0 033i na ắ.ắa 13

d) _ Ưu và nhược điểm - S133 1kg HT TH 14 11 10 1 .Ố 14 12 COUNTING s1 ẳồỒồẳỒẳồẳỒồỐỒ'''' dd 14

Trang 4

œ

13

14

no .a 14

I@.1i01173i 0 14

Danh 0¬l -NsisNoi) ý sr.| IV (CCạaaaa Ề 14

Ưu và nhược điỂm -.- s11 vn 1 SH T1 E1 HT TT TT TT TT TT TT TH rà Tờ ra Ta 14 CAL CIE 0 43âÕ-1+1-,,., 15

II 8s 111 15

V CUO 15

I@.1i01173i 0

Đánh giá dộ phức tạp Ưu và nhược điỂm - - L2 1T Hy T Hy TH HT TT HT TT TH Tà TT TT TT HT nà rà Ta 15 CAL CIE 0 43âÕ-1+1-,,., 16

BS 16

V CUO 16

I@.1i01173i 0 16

Danh 0¬l -NsisNoi) ý sr.| IV (CCạaaaa Ề 16

Ưu và nhược điỂm - - L2 1T Hy T Hy TH HT TT HT TT TH Tà TT TT TT HT nà rà Ta 16 CAL CIE 0 43âÕ-1+1-,,., 17

KÉT QUÁ THÍ NGHIỆM VA NHAN XET ccsscssssssssssssssssessssessssessusessscesucescessssssssessusesssessusssseesnsessncesisessesssecsansess 17 IIjiei200114-e 0o 18

ki so 18

lIcc00081e0ãi-;0srir 0 20

O0" 21

Trang 5

- La qua trinh té chức lại họ các dữ liệu theo thứ tự giảm dân hoặc tăng dần (ascending or descending order)

- Dữ liệu cân sắp xếp có thê là:

e Số nguyên (/ergers)

e - Xấu ký tự (Character strings)

¢ Déi tuong (Objects)

- _ Khóa sắp xếp (Sort key):

e - Là bộ phận của bản ghi xác định thứ tự sắp xếp của bản ghi trong họ các bản ghi

e _ Ta cần sắp xếp các bản ghi theo thứ tự của các khóa

Trang 6

b) Ứng dụng của sắp xếp

Quản trị co sé dit ligu (Database management)

- Khoa hoc va ky thuat (Science and engineering)

- Cac thuat toan lap lich (Scheduling algorithms)

- May tim kiém web (Web search engine)

- _ Và nhiều ứng dụng khác

ce) Cac đặc trưng của một thuật toán sắp xếp

- Tại chỗ (In place): Néu không gian nhớ phụ mả thuật toán đòi hỏi là O(1), nghĩa là bị chặn bởi hằng số phụ thuộc vào độ dài của day can sap xếp - ;

- On dinh (Stable): Nêu các phần tử có cùng giá trị vẫn giữ nguyên thứ tự tương đối của chúng như trước khi được sắp xếp

2 Yêu cầu về đồ án

- Đồ án yêu cầu khai thác các thuật toán sắp xếp bằng ngôn ngữ lập trình C/C++ Gồm 11 thuật toan: Selection Sort, Insertion Sort, Bubble Sort, Shaker Sort, Shell Sort, Heap Sort, Merge Sort, Quick Sort, Counting Sort, Radix Sort va Flash Sort

- — Các bước thực hiện đồ án:

1 Lập trình: Triển khai tất cả các thuật toán sắp xếp trong tập thuật toán đã chọn, chí sắp xếp theo thứ tự tăng

dan

2 Thực hiện

¢ V6i méi Data Order S1

¢ V6i méi Data Size 82

e Với mỗi thuật toán sắp xếp S3

3 Tạo máng đữ liệu: Tạo một mang với Data Order $1 va Data Size S2

4 Sắp xếp và đo thời gian

e - Sắp xếp mảng đã tạo bằng thuật toán sắp xếp S3

e - Đồng thời, đo thời gian chạy của thuật toán (đơn vị mili giây) và đếm số lần so sánh trong thuật toan

5 Ghi lai két quả: Ghi lại Data Order $1, Data Size S2, thuat toán sắp xếp 3, thời gian chạy và số lần so sánh Tiếp tục với các bước tiếp theo cho các trật tự dữ liệu, kích thước dữ liệu và thuật toán khác

6 Data Order bao gom:

¢ Sorted data (in ascending order)

e Nearly sorted data

e Reverse sorted data

e Randomized data

7 Data Size

¢ = Thir nghiém cac thuat toan sap xép trên đữ liệu có kích thước khác nhau bao gồm: 10.000, 30.000, 50.000, 100.000, 300.000 và 500.000 phan tử

3 Quá trinh làm việc

a) Cầu hình máy để chạy chương trình:

- Macbook M1 Pro: Chip Apple M1 Pro, Ram 16GB

- Lenovo 5 Pro: RAM 16GB, Chip AMD Ryzen 7000

Trang 7

b) Công việc đã làm:

- Code 11 thuat toan sort bao gồm : Đếm số lần so sánh và tính toán thời gian đề sắp xếp những kiểu dữ liệu

- Code ham Data Generator:

e Ham phat sinh mang dit liéu ngau nhién (-rand)

e Ham phat sinh mang dit liéu co thir ty tang dan (sorted)

¢ Ham phat sinh mảng dữ liệu có thứ tự ngược (-rev)

e _ Hàm phát sinh mảng dữ liệu gan nhuw co tht ty (-nsorted)

- Code thu vién dé output dir ligu tr cmd (command line)

c) Công việc chưa làm:

- Thuật toán Quick Sort vẫn bị “segmentation fault” khi được thực thi với dữ liệu lớn (Đã ñxed)

- Chưa tốt ưu được đữ liệu dau ra (On progress)

II TRÌNH BÀY THUẬT TOÁN

1 Những thuật toán đã code được:

Trang 8

- Bước 1: Tìm phần tử nhỏ nhất (hoặc lớn nhất) trong mảng

- Bước 2: Đặt phần tử này vào vị trí đầu tiên (hoặc cuối cùng) của mảng đã sắp xếp

- Bước 3: Lặp lại quá trình trên với mảng con còn lại, loại bỏ phần tử đã được đặt vào vị trí đúng

- Bước 4: Tiếp tục lặp lại cho đến khi mảng được sắp xếp hoàn chỉnh

e _ Không yêu cầu không gian bộ nhớ phụ: Selection Sort thực hiện sắp xếp trực tiếp trên mảng ban đầu

mà không cần sử dụng không gian bộ nhớ phụ

- Sử dụng thuật toán Insertion Sort cho các phần tử nhỏ: Thay vì tìm kiếm phần tử nhỏ nhất trong mỗi vòng lặp,

ta có thể áp dụng thuật toán Insertion Sort cho các phần tử nhỏ hơn một ngưỡng nhất định Điều này giúp giảm số lần so sánh và hoán đổi phần tử, cải thiện hiệu suất của thuật toán

- _ Bước 1: Bắt đầu từ phần tử thứ hai, so sánh nó với các phần tử đã sắp xếp trong mảng bên trái

- Bước 2: Chèn phần tử vào đúng vị trí sao cho mảng vẫn duy trì tính chất sắp xếp

- Bước 3: Lặp lại quá trình trên cho tất cả các phần tử trong mảng, từ phần tử thứ hai đến phần tử cuối

Trang 9

e _ Cần nhiều phép di chuyển: Insertion Sort cần thực hiện nhiều phép di chuyển khi chèn một phần tử vào vị trí đúng trong mảng đã sắp xếp

e) Cải tiến

- Sử dụng thuật toán Binary Insertion Sort: Một cải tiến cho Insertion Sort là sử dụng thuật toán Binary Insertion Sort Thay vì so sánh từng phần tử trong mảng đã sắp xếp, Binary Insertion Sort tìm kiếm vị trí chính xác để chèn phần tử mới bằng phương pháp tìm kiếm nhị phân, giảm số lần so sánh và di chuyển phần tử

- Bước 2: Tiếp tục so sánh và hoán đổi các phần tử liần kề tiếp theo cho đến khi mảng đến cuối

- Bước 3: Lặp lại quá trình trên cho đến khi không có hoán đổi nào xảy ra, tức là mảng đã sắp xếp hoàn chỉnh c)_ Đánh giá độ phức tạp

- Độ phức tạp thời gian của Bubble Sort là O(n^2), trong đó n là số lượng phần tử trong mảng Độ phức tạp không gian là O(1) vì thuật toán chỉ sử dụng một hằng số lượng bộ nhớ bổ sung

d)_ Ưu và nhược điểm

- - Ưu điểm:

e _ Đơn giản và dễ hiểu: Bubble Sort là một thuật toán đơn giản và dễ hiểu, dễ triển khai trong các ngôn

ngữ lập trình

Trang 10

e _ Dễ dàng theo dõi quá trình sắp xếp: Do cách thức thực hiện, Bubble Sort cho phép theo dõi quá trình

sắp xếp từng bước một

e _ Ổn định: Bubble Sort đảm bảo tính ổn định, không làm thay đổi thứ tự của các phần tử có cùng giá trị

- - Nhược điểm:

e Độ phức tạp thời gian cao: Với độ phức tạp thời gian O(n^2), Bubble Sort không hiệu quả cho các tập

dữ liệu lớn Đối với mảng có kích thước lớn, các thuật toán sắp xếp khác như Quick Sort hoặc Merge Sort thường được ưu tiên

e _ Số lần hoán đổi lớn: Bubble Sort có thể cần thực hiện nhiều hoán đối khi sắp xếp các phần tử, dẫn đến số lần gán dữ liệu lớn hơn các thuật toán sắp xếp khác

e - Độ phức tạp thời gian cao: Với độ phức tạp thời gian O(n^2), Shaker Sort không hiệu quả cho các tập

dữ liệu lớn Đối với mảng có kích thước lớn, các thuật toán sắp xếp khác như Quick Sort hoặc Merge Sort thường được ưu tiên

e _ Số lần hoán đổi lớn: Shaker Sort có thể cần thực hiện nhiều hoán đối khi sắp xếp các phần tử, dẫn đến

số lần gán dữ liệu lớn hơn các thuật toán sắp xếp khác

Trang 11

- Bước 3: Lặp lại quá trình trên cho đến khi gap bằng 1

- Bước 4: Cuối cùng, áp dụng Insertion Sort cho toàn bộ mảng để hoàn thiện quá trình sắp xếp

c)_ Đánh giá độ phức tạp

- Độ phức tạp thời gian của Shell Sort phụ thuộc vào dãy khoảng cách được chọn Trong trường hợp dãy khoảng cách tốt nhất như gap sequence của Sedgewick (O{n^1.3)), độ phức tạp thời gian là O(n^1.3) Trong trường hợp xấu nhất, độ phức tạp thời gian có thể đạt đến O(n^2) Độ phức tạp không gian là O(1) vì thuật toán chỉ sử dụng một hằng số lượng bộ nhớ bổ sung

d)_ Ưu và nhược điểm

Trang 12

8 Heap Sort

a) Ý tưởng

- Ý tưởng chính của Heap Sort là sử dụng một cấu trúc dữ liệu Heap để sắp xếp các phần tử trong mảng Heap Sort thực hiện việc xây dựng một Heap từ mảng ban đầu, sau đó lặp lại việc lấy ra phần tử lớn nhất (hoặc nhỏ nhất) trong Heap và đưa nó vào mảng kết quả

= Cách thực hiện

- Bước 1: Xây dựng một Heap từ mảng ban đầu bằng cách chuyển đổi mảng thành một Heap

- Bước 2: Lặp lại việc lấy ra phần tử lớn nhất (hoặc nhỏ nhất) từ Heap và đưa nó vào mảng kết quả

- Bước 3: Sau mỗi lần lấy phần tử ra khỏi Heap, cập nhật lại Heap bằng cách thực hiện quá trình đảo ngược (được gọi là "heapify") để đảm bảo tính chất Heap

- Bước 4: Lặp lại quá trình trên cho đến khi tất cả các phần tử được lấy ra từ Heap

- Merge Sort chia mang ban đầu thành các nửa mảng nhỏ hơn, tiếp tục chia đến khi mỗi nửa chỉ còn một phần

tử Sau đó, các nửa mảng được trộn (merge) lại theo thứ tự để tạo ra một mảng đã sắp xếp

b) Cách thực hiện

- Bước 1: Chia mảng ban đầu thành hai nửa mảng gần bằng nhau

- _ Bước 2: Đệ quy áp dụng Merge Sort cho từng nửa mảng

- Bước 3: Trộn (merge) hai nửa mảng đã sắp xếp để tạo ra một mảng mới đã sắp xếp

- Bước 4: Lặp lại quá trình trộn cho đến khi mảng ban đầu được sắp xếp hoàn chỉnh

Trang 13

e _ Không phải là sắp xếp in-place: Merge Sort không thực hiện sắp xếp trực tiếp trên mảng ban đầu, mà thường cần một mảng trung gian để lưu trữ các phần tử trộn Điều này tạo ra sự tốn kém cho việc quản lý không gian bộ nhớ

e) Cải tiến

- Str dung Insertion Sort cho cdc mang nhỏ: Thay vì áp dụng đệ quy cho tất cả các mảng con, ta có thể chuyển sang sử dụng Insertion Sort cho các mảng nhỏ Điều này giúp giảm đáng kể số lần gọi đệ quy và tăng hiệu suất của thuật toán

- Sắp xếp in-place: Một cải tiến khác là cố gắng thực hiện Merge Sort trong cùng một mảng ban đầu, gọi là sắp xếp in-place Điều này giảm không gian bộ nhớ cần thiết và tăng tốc độ sắp xếp

10 Quick Sort

a) Ý tưởng

- Là chọn một phần tử làm "chốt" (pivot), sau đó phân hoạch mảng thành hai phần tử con - một phần tử con chứa các phần tử nhỏ hơn hoặc bằng pivot và một phần tử con chứa các phần tử lớn hơn pivot Quá trình này được lặp lại đối với các phần tử con cho đến khi mảng được sắp xếp

b) Cách thực hiện

- Bước 1: Chọn một phần tử làm pivot từ mảng (thường là phần tử cuối cùng hoặc ngẫu nhiên)

- _ Bước 2: Phân hoạch mảng thành hai phần tử con: một phần tử con chứa các phần tử nhỏ hơn hoặc bằng pivot va một phần tử con chứa các phần tử lớn hơn pwot

- Bước 3: Đệ quy áp dụng Quick Sort cho cả hai phần tử con

- Bước 4: Kết hợp các phần tử đã sắp xếp lại để tạo ra mảng đã sắp xếp hoàn chỉnh

c)_ Đánh giá độ phức tạp

- Độ phức tạp thời gian của Quick Sort trong trường hợp trung bình là O{n log n), trong đó n là số lượng phần

tử trong mảng Tuy nhiên, trong trường hợp xấu nhất, Quick Sort có thể có độ phức tạp là O(n^2) Độ phức tạp không gian là O(log n) do sử dụng đệ quy

Ngày đăng: 26/12/2024, 17:15

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

TÀI LIỆU LIÊN QUAN