1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo bài tập lớn học phần cấu trúc dữ liệu và giải thuật chủ Đề sắp xếp chèn trực tiếp insertion sort

21 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 đề Sắp Xếp Chèn Trực Tiếp - Insertion Sort
Tác giả Trần Minh Tiến
Người hướng dẫn Phạm Thị Miên
Trường học Trường Đại Học Giao Thông Vận Tải
Thể loại báo cáo
Năm xuất bản 2024
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 21
Dung lượng 1,03 MB

Nội dung

Thuật toán này thích hợpcho những tập dữ liệu nhỏ hoặc đã gần như được sắp xếp, nhờ khả năng điều chỉnh linhhoạt từng phần tử trong quá trình sắp xếp.. Phạm vinghiên cứu của đề tài giới

Trang 1

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI

PHÂN HIỆU TẠI TP HỒ CHÍ MINH

- 

-BÁO CÁO BÀI TẬP LỚN

HỌC PHẦN: CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT

CHỦ ĐỀ: SẮP XẾP CHÈN TRỰC TIẾP - INSERTION SORT

Họ và tên: Trần Minh Tiến

MSSV: 6451030070

Lớp: Kỹ thuật Điều khiển & Tự Động Hóa K64

GV Hướng dẫn: Phạm Thị Miên

TP Hồ Chí Minh, Tháng 11 năm 2024

Trang 2

LỜI CẢM ƠN

Báo cáo môn Cấu trúc Dữ liệu và Giải thuật là kết quả của quá trình học hỏi và nỗ lựckhông ngừng, đồng thời cũng là thành quả từ sự hỗ trợ và hướng dẫn tận tình của các thầy

cô và sự giúp đỡ quý báu của bạn bè, đồng nghiệp

Trước hết, tôi xin gửi lời cảm ơn sâu sắc đến cô Phạm Thị Miên, người đã trực tiếphướng dẫn và cung cấp cho tôi những tài liệu khoa học cần thiết, cũng như dành thời gianquý báu để hỗ trợ tôi trong quá trình nghiên cứu và hoàn thành báo cáo Sự chỉ dẫn nhiệttình của cô là động lực to lớn giúp tôi đạt được những kết quả tốt đẹp

Tôi cũng xin bày tỏ lòng biết ơn đến Ban lãnh đạo Trường Đại học Giao thông Vận tải – Phân hiệu TP.HCM, Đoàn Bộ môn Điện – Điện tử và Bộ môn Điều khiển và Tự độnghóa, đã tạo mọi điều kiện thuận lợi để tôi có thể tập trung vào việc học tập và nghiên cứu.Cuối cùng, tôi xin chân thành cảm ơn những người bạn đã luôn đồng hành, hỗ trợ vàchia sẻ với tôi trong quá trình học tập Sự giúp đỡ và động viên của các bạn là yếu tốkhông thể thiếu trong hành trình hoàn thiện bài báo cáo này

Một lần nữa, xin chân thành cảm ơn tất cả!

Tp Hồ Chí Minh, ngày 5 tháng 11 năm 2024

Sinh viên thực hiện

Trần Minh Tiến

Trang 3

NHẬN XÉT CỦA GIẢNG VIÊN

Tp Hồ Chí Minh, ngày ….… tháng ….… năm ….…

Giảng viên

Trang 4

MỤC LỤC

MỞ ĐẦU 1

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

1.1 Khái niệm 2

1.2 Phân loại các thuật toán sắp xếp 2

CHƯƠNG 2: GIỚI THIỆU THUẬT TOÁN INSERTION SORT 6

2.1 Khái niệm 6

2.2 Các bước thực hiện của thuật toán Insertion Sort 7

Ví dụ minh họa 8

2.3 Độ phức tạp của Heap Sort 9

2.3.1 Độ phức tạp thời gian: 9

2.3.2 Độ phức tạp không gian: 9

2.4 Chi tiết về thuật toán 9

Cách giải thuật sắp xếp chèn thực hiện? 9

2.5 Ưu và nhược điểm 13

2.5.1 Ưu điểm 13

2.5.2 Nhược điểm .13

2.6 Ứng dụng của Insertion Sort 14

CHƯƠNG 3: TỔNG KẾT 15

TÀI LIỆU THAM KHẢO 16

Trang 5

SƠ ĐỒ, HÌNH VẼ

Hình 2.2: Cách hoạt động của Insertion Sort … 9

Trang 6

MỞ ĐẦU

1 Tính cấp thiết của đề tài

Trong lĩnh vực Khoa học máy tính và Công nghệ thông tin, sắp xếp dữ liệu là một trongnhững thao tác cơ bản và quan trọng Các thuật toán sắp xếp không chỉ đơn thuần sắp xếp

dữ liệu mà còn giúp cải thiện hiệu suất xử lý và quản lý dữ liệu, đặc biệt trong các hệthống phần mềm Thuật toán sắp xếp chèn (Insertion Sort) là một trong những phương pháp sắp xếp phổ biến vì tính dễ hiểu và đơn giản khi cài đặt Thuật toán này thích hợpcho những tập dữ liệu nhỏ hoặc đã gần như được sắp xếp, nhờ khả năng điều chỉnh linhhoạt từng phần tử trong quá trình sắp xếp Việc nghiên cứu thuật toán Insertion Sort giúplàm rõ cách thức tổ chức dữ liệu hiệu quả trong các bài toán thực tiễn và cung cấp nềntảng cho những thuật toán sắp xếp phức tạp hơn

2 Đối tượng và phạm vi nghiên cứu

Đề tài tập trung vào nghiên cứu về nguyên lý hoạt động của thuật toán sắp xếp chèn(Insertion Sort) Đối tượng nghiên cứu bao gồm các bước thực hiện thuật toán, cách thứcduyệt qua từng phần tử và chèn vào đúng vị trí nhằm duy trì trật tự sắp xếp Phạm vinghiên cứu của đề tài giới hạn trong việc áp dụng thuật toán Insertion Sort cho các tập dữliệu nhỏ hoặc các trường hợp có dữ liệu đã gần như được sắp xếp để đảm bảo hiệu quả

3 Mục tiêu nguyên cứu

Đề tài nhằm mục tiêu phân tích các bước hoạt động của thuật toán sắp xếp chèn và đánhgiá hiệu quả của nó Đồng thời, so sánh Insertion Sort với các thuật toán sắp xếp khác đểlàm rõ ưu và nhược điểm của từng phương pháp Kết quả nghiên cứu mong muốn cungcấp cái nhìn tổng quan về Insertion Sort, làm rõ vai trò của nó trong sắp xếp dữ liệu vànâng cao kiến thức nền tảng cho việc học tập các thuật toán nâng cao hơn.

4 Phương pháp tiếp cận công việc

Tìm kiếm tài liệu, thông tin trên internet và thông tin, sự chia sẽ của các anh chị trongcác câu lạc bộ và tìm hiểu các tài liệu nghiên cứu từ các nhóm, cộng đồng học thuật đểtổng hợp thông tin về thuật toán Insertion Sort

Trang 7

1.2 Phân loại các thuật toán sắp xếp

Thuật toán sắp xếp có thể được phân loại dựa trên nhiều tiêu chí như cách tiếp cận, độ phức tạp thời gian, cấu trúc dữ liệu sử dụng và mức độ ổn định của thuật toán Dưới đây

là một số cách phân loại phổ biến:

   Phân loại theo phương pháp sắp xếp

   Sắp xếp đổi chỗ (Exchange Sorts): Phương pháp này dựa trên việc hoán đổi các phần tử để đạt được thứ tự mong muốn Một số thuật toán tiêu biểu:

o  Bubble Sort (Sắp xếp nổi bọt): So sánh và hoán đổi các cặp phần tử liền kề

để đưa phần tử lớn nhất (hoặc nhỏ nhất) dần dần về cuối hoặc đầu danh sách

o  Quick Sort (Sắp xếp nhanh): Chọn một phần tử làm chốt (pivot) và phânchia danh sách thành hai phần dựa trên chốt này, sau đó sắp xếp đệ quy từng phần

   Sắp xếp chọn lọc (Selection Sorts): Phương pháp này dựa trên việc tìm phần tửnhỏ nhất (hoặc lớn nhất) và đưa nó về vị trí thích hợp

o  Selection Sort (Sắp xếp chọn): Tìm phần tử nhỏ nhất trong danh sách vàhoán đổi nó với phần tử đầu tiên, sau đó lặp lại quá trình cho phần còn lại

o  Heap Sort (Sắp xếp vun đống): Dựa trên cấu trúc dữ liệu heap để sắp xếp dữliệu, thường được dùng với cấu trúc cây nhị phân

Trang 8

   Sắp xếp chèn (Insertion Sorts): Dựa trên việc chèn phần tử vào vị trí thích hợptrong phần đã sắp xếp của danh sách.

o  Insertion Sort (Sắp xếp chèn): Mỗi phần tử trong danh sách sẽ được chènvào vị trí thích hợp để đảm bảo dãy con đã sắp xếp

o  Shell Sort (Sắp xếp Shell): Là phiên bản cải tiến của Insertion Sort vớikhoảng cách giảm dần giữa các phần tử so sánh

   Sắp xếp trộn (Merge Sorts): Dựa trên phương pháp chia để trị, chia danh sáchthành các phần nhỏ hơn, sắp xếp từng phần và trộn lại

o  Merge Sort (Sắp xếp trộn): Chia danh sách thành hai nửa, sắp xếp từng nửa

và trộn lại để tạo thành một danh sách đã sắp xếp

  Phân loại theo độ phức tạp thời gian trung bình

   Thuật toán sắp xếp O(n²): Thường áp dụng cho tập dữ liệu nhỏ vì độ phức tạp tăngnhanh khi kích thước dữ liệu lớn Một số thuật toán trong nhóm này là:

Trang 9

   Sắp xếp trong (Internal Sorts): Thực hiện sắp xếp trong bộ nhớ chính, phù hợp khi

dữ liệu có thể được lưu trữ và xử lý hoàn toàn trong bộ nhớ RAM Ví dụ: Quick Sort, Bubble Sort, Selection Sort, Insertion Sort

   Sắp xếp ngoài (External Sorts): Dùng cho dữ liệu lớn không thể lưu trữ hoàn toàntrong RAM, thường phải lưu trữ trên bộ nhớ ngoài Các thuật toán này phân chia

và xử lý dữ liệu thành nhiều phần nhỏ hơn Ví dụ: External Merge Sort

   Phân loại theo tính ổn định của thuật toán

   Thuật toán sắp xếp ổn định (Stable Sorts): Giữ nguyên thứ tự các phần tử có giá trị bằng nhau Các thuật toán ổn định bao gồm:

o  Quick Sort

o  Heap Sort

o  Selection Sort

   Phân loại theo phương pháp sắp xếp cơ bản và nâng cao

   Thuật toán sắp xếp cơ bản: Các thuật toán đơn giản, thường được dùng trong môitrường giáo dục và có hiệu quả với tập dữ liệu nhỏ Ví dụ: Bubble Sort, SelectionSort, Insertion Sort

   Thuật toán sắp xếp nâng cao: Các thuật toán có tính phức tạp cao hơn, thườngđược sử dụng trong các ứng dụng thực tế với dữ liệu lớn Ví dụ: Merge Sort, Quick Sort, Heap Sort

Trang 10

Mỗi loại thuật toán sắp xếp có những ưu và nhược điểm riêng, phù hợp với các ứng dụng

và tình huống cụ thể trong thực tế Việc lựa chọn thuật toán phù hợp giúp tối ưu hóa thờigian xử lý và sử dụng tài nguyên hiệu quả hơn

Trang 11

Với cấu trúc dữ liệu mảng, chúng ta tưởng tượng là: mảng gồm hai phần: một danh sáchcon đã được sắp xếp và phần khác là các phần tử không có thứ tự Giải thuật sắp xếp chèn

sẽ thực hiện việc tìm kiếm liên tiếp qua mảng đó, và các phần tử không có thứ tự sẽ được

di chuyển và được chèn vào vị trí thích hợp trong danh sách con (của cùng mảng đó).Giải thuật này không thích hợp sử dụng với các tập dữ liệu lớn khi độ phức tạp trườnghợp xấu nhất và trường hợp trung bình là Ο(n2) với n là số phần tử

Vị trí này chính là pos thỏa :

a[pos-1] ≤ a[i ]< a[pos] (1≤ pos≤ i)

   Chi tiết hơn:

   Dãy ban đầu a[0] , a[1] , , a[n-1], xem như đã có đoạn gồm một phần tử a[0] đãđược sắp

   Thêm a[1] vào đoạn a[0]sẽ có đoạn a[0] a[1] được sắp

   Thêm a[2] vào đoạn a[0] a[1] để có đoạn a[0] a[1] a[2] được sắp

   Tiếp tục cho đến khi thêm xong a[n-1] vào đoạn a[0] a[1] a[n-1] sẽ có dãya[0] a[1] A[n-1] được sắp

Trang 12

2.2 Các bước thực hiện của thuật toán Insertion Sort

Giả sử: Ta có một danh sách các phần tử cần sắp xếp theo thứ tự tăng dần Ban đầu, ta coi phần tử đầu tiên đã được sắp xếp, và sẽ lần lượt chèn các phần tử tiếp theo vào vị trí đúngcủa chúng trong danh sách đã sắp xếp.

Bước 1: Bắt đầu với phần tử thứ hai trong danh sách (chỉ số i = 1) Phần tử này là phần tửđầu tiên trong danh sách chưa được sắp xếp

   Giả định rằng phần tử đầu tiên đã được sắp xếp, vì một phần tử đơn lẻ luôn đượccoi là đã sắp xếp

Bước 2: Chọn phần tử ở vị trí i (gọi là key) để chèn vào danh sách con đã được sắp xếp ở  phía bên trái

   key là giá trị của phần tử hiện tại đang được xét và sẽ được chèn vào danh sách con

Bước 4: Dịch chuyển các phần tử lớn hơn key sang bên phải

   Nếu phần tử tại vị trí j lớn hơn key, dịch chuyển phần tử đó sang vị trí j + 1 để tạochỗ trống cho key

   Giảm j xuống (j = j - 1) và tiếp tục so sánh key với phần tử tại vị trí j Quá trìnhnày lặp lại cho đến khi tìm thấy một phần tử không lớn hơn key hoặc đã duyệt hếtdanh sách con bên trái

Bước 5: Chèn key vào vị trí j + 1, là vị trí thích hợp để đảm bảo danh sách con vẫn đượcsắp xếp

   Sau khi tìm thấy vị trí thích hợp, đặt key vào vị trí j + 1, đảm bảo rằng danh sáchcon bên trái vẫn duy trì trật tự sắp xếp tăng dần

Bước 6: Tăng chỉ số i lên 1 để chuyển sang phần tử kế tiếp và lặp lại từ Bước 2 đến Bước5

   Lặp lại quá trình này cho đến khi i bằng độ dài của danh sách (nghĩa là tất cả phần

tử đã được duyệt qua và danh sách đã hoàn toàn sắp xếp)

Trang 13

   Phần tử đầu tiên trong mảng được coi là đã được sắp xếp.

   Phần được sắp xếp cho đến index 0 là: [23]

Bước 2:

   So sánh 1 với 23 (phần tử hiện tại với phần được sắp xếp)

   Vì 1 nhỏ hơn nên chèn 1 trước 23

   Phần được sắp xếp cho đến index 1 là: [1, 23]

Bước 3:

   So sánh 10 với 1 và 23 (phần tử hiện tại với phần được sắp xếp)

   Vì 10 lớn hơn 1 và nhỏ hơn 23 nên chèn 10 vào giữa 1 và 23

   Phần được sắp xếp cho đến index 2 là: [1, 10, 23]

Bước 4:

   So sánh 5 với 1 , 10 và 23 (phần tử hiện tại với phần được sắp xếp)

   Vì 5 lớn hơn 1 và nhỏ hơn 10 nên chèn 5 vào giữa 1 và 10

Trang 14

   Phần được sắp xếp cho đến index 3 là : [1, 5, 10, 23]

Bước 5:

   So sánh 2 với 1, 5, 10 và 23 (phần tử hiện tại với phần được sắp xếp)

   Vì 2 lớn hơn 1 và nhỏ hơn 5 nên chèn 2 vào giữa 1 và 5

   Phần được sắp xếp cho đến index 4 là: [1, 2, 5, 10, 23]

2.4 Chi tiết về thuật toán

 Bắt đầu từ phần tử thứ hai trong dãy: Giả sử phần đầu của dãy (bao gồm một phần

tử đầu tiên) đã được sắp xếp

 Duyệt qua từng phần tử trong dãy chưa sắp xếp: Chọn một phần tử và so sánh nóvới các phần tử trong phần dãy đã sắp xếp

 Dịch chuyển các phần tử : Nếu phần tử hiện tại nhỏ hơn các phần tử trong dãy đã sắpxếp, dịch chuyển các phần tử lớn hơn về bên phải để tạo khoảng trống

 Chèn phần tử vào vị trí phù hợp: Đặt phần tử vào đúng vị trí trong dãy đã sắp xếp

để giữ trật tự

Trang 15

Ví dụ chúng ta có một mảng gồm các phần tử không có thứ tự:

Giải thuật sắp xếp chèn so sánh hai phần tử đầu tiên:

Giải thuật tìm ra rằng cả 14 và 33 đều đã trong thứ tự tăng dần Bây giờ, 14 là trong danh sách con

14 và 27 là lớn hơn 14 Do vậy danh sách con vẫn giữ nguyên sau khi đã tráo đổi.

Bây giờ trong danh sách con chúng ta có hai giá trị 14 và 27 Tiếp tục so sánh 33 với 10.

Hai giá trị này không theo thứ tự.

Vì thế chúng ta tráo đổi chúng.

Trang 16

Việc tráo đổi dẫn đến 27 và 10 không theo thứ tự.

Vì thế chúng ta cũng tráo đổi chúng.

Chúng ta lại thấy rằng 14 và 10 không theo thứ tự.

Và chúng ta tiếp tục tráo đổi hai số này Cuối cùng, sau vòng lặp thứ 3 chúng ta có 4 phần tử.

Tiến trình trên sẽ tiếp tục diễn ra cho tới khi tất cả giá trị chưa được sắp xếp được sắp xếp hết vào trong danh sách con đã qua sắp xếp.

Trang 17

Cách hoạt động của Insertion Sort thể hiện trong đoạn mã dưới đây:

Giải thích chi tiết từng phần trong mã

Insertion Sort: Hàm này thực hiện sắp xếp mảng arr  có độ dài n theo thuật toán InsertionSort

 Với mỗi phần tử key, hàm sẽ tìm vị trí phù hợp trong phần mảng đã sắp xếp và chèn

key vào vị trí đó

Print Array: Hàm này được sử dụng để in mảng trước và sau khi sắp xếp

main: Hàm chính khởi tạo một mảng ví dụ, in ra mảng ban đầu, sắp xếp mảng bằng hàm

insertionSort, rồi in ra mảng đã sắp xếp

Trang 18

Kết quả chạy của chương trình

Giả sử đầu vào là {12 11 13 5 6}, sau khi chạy Heap Sort, đầu ra sẽ là:

   Phân loại trực tuyến: Có thể phân loại dữ liệu khi nhận được mà không cần phảichờ tất cả dữ liệu được thu thập Điều này hữu ích trong các tình huống dữ liệu liêntục được tạo ra, chẳng hạn như trong luồng dữ liệu trực tiếp hoặc xử lý dữ liệu thờigian thực

   Phù hợp nhất với các mảng nhỏ: Sắp xếp chèn hoạt động tốt với các mảng nhỏ

có ít phần tử, vì tính đơn giản và tốc độ của nó khiến đây trở thành lựa chọn tối ưu

   Ổn định: Thuật toán sắp xếp chèn là thuật toán sắp xếp ổn định , nghĩa là nó duytrì thứ tự tương đối của các phần tử bằng nhau trong đầu ra đã sắp xếp như trongđầu vào

2.5.2 Nhược điểm

   Hiệu suất trên danh sách lớn: Thuật toán sắp xếp chèn có độ phức tạp về thờigian trong trường hợp xấu nhất, điều này khiến nó không hiệu quả đối với các danhsách lớn.O(n^2)

   Không phù hợp để xử lý song song: Sắp xếp chèn là một thuật toán tuần tự, cónghĩa là nó không thể tận dụng lợi thế của xử lý song song Điều này làm cho nó ít phù hợp hơn với các ứng dụng điện toán hiệu suất cao, nơi mà tính song song làquan trọng

   Ít hiệu quả hơn các thuật toán sắp xếp khác: Nhiều thuật toán sắp xếp khác hiệu

Trang 19

xếp trộn và sắp xếp nhanh có độ phức tạp thời gian là , khiến chúng nhanh hơnnhiều so với thuật toán sắp xếp chèn đối với các danh sách lớn.O(n log n)

2.6 Ứng dụng của Insertion Sort

1.  Bộ dữ liệu nhỏ: Insertion Sort hiệu quả trong việc sắp xếp các bộ dữ liệu nhỏ hoặcdanh sách có số lượng phần tử ít Nó nhanh hơn các thuật toán sắp xếp khácnhư Merge Sort hoặc Quick Sort khi kích thước đầu vào nhỏ

2.  Mảng được sắp xếp một phần: Nếu mảng đầu vào đã được sắp xếp một phần, cóthể sử dụng sắp xếp chèn để sắp xếp các phần tử chưa được sắp xếp còn lại mộtcách hiệu quả Điều này là do Sắp xếp chèn có độ phức tạp thời gian tuyến tínhkhi mảng đầu vào đã được sắp xếp hoặc gần được sắp xếp

3. Thuật toán trực tuyến: Insertion Sort là thuật toán trực tuyến, có nghĩa là nó cóthể sắp xếp danh sách khi nhận được Điều này hữu ích trong các ứng dụng mà dữliệu đầu vào liên tục đến và việc sắp xếp cần được thực hiện ngay lập tức

4.  Adaptive Sorting: Thích ứng nhanh với những thay đổi trong dữ liệu đầu vào Ví

dụ, nếu dữ liệu đầu vào gần như đã được sắp xếp, thì Insertion Sort có thể nhanhchóng xác định điều này và sắp xếp các phần tử chưa được sắp xếp còn lại mộtcách hiệu quả

5.  In-Place Sorting: Sắp xếp danh sách đầu vào mà không sử dụng bất kỳ bộ nhớ bổsung nào Điều này làm cho nó lý tưởng để sắp xếp các tập dữ liệu lớn không thểchứa trong bộ nhớ

Ngày đăng: 09/12/2024, 05:17

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w