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

BÁO cáo môn học cấu TRÚC dữ LIỆU và THUẬT TOÁN đề tài sorting algorithm complexity

22 23 0

Đ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

Định dạng
Số trang 22
Dung lượng 2,99 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nó cũng có thể hữu ích khi mảng đầu vào gần như được sắp xếp, chỉ có một số phần tử bị đặt sai vị trí trong một mảng lớn hoàn chỉnh, Insertion Sort sẽ chạy rất nhanh.. Sắp xếp chèn được

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN

KHOA TOÁN – CƠ – TIN HỌC

Tạ Duy An_18000948Phạm Văn Thành_18002000

Trang 2

Ngày nay, mọi công việc trong cuộc sống đều cần sự tỉ mỉ và chính xác theomột tiêu chuẩn nào đó, chính vì thế việc sắp xếp trở nên vô cùng quan trọng ở trongmọi lĩnh vực nhất là về công nghệ Đôi khi dữ liệu chúng ta lưu trữ hoặc truy xuấttrong một ứng dụng có thể có ít hoặc không có thứ tự Chúng ta có thể phải sắp xếp lại

dữ liệu để xử lý chính xác hoặc sử dụng nó một cách hiệu quả Trong những năm qua,các nhà khoa học máy tính đã tạo ra nhiều thuật toán sắp xếp để tổ chức dữ liệu Bàibáo cáo này, chúng ta sẽ xem xét các thuật toán sắp xếp phổ biến, chúng ta chắc cũng

đã quen với những thuật toán sắp xếp, cùng hiểu cách chúng hoạt động và mã hóachúng bởi ngôn ngữ lập trình Chúng em cũng sẽ so sánh cách sắp xếp nào nhanh hơntrong một list Để đơn giản, việc triển khai thuật toán sẽ sắp xếp danh sách các số theothứ tự tăng dần Chúng ta có những thuật toán sắp xếp phổ biến sẽ được trình bàytrong bài viết dưới đây

Trân trọng, Hà Nội, ngày 25 tháng 12 năm 2020 Sinh viên thực hiện

Phan Duy Ánh

Tạ Duy An

Phạm Văn Thành

Trang 3

MỤC LỤC 3I.Các thuật toán

I.1 Bubble Sort

I.2 Insertion Sort

I.3 Selection Sort

I.4 Merge Sort

I.5 Quick Sort

II.Giao diện Sort Glgorithms

III.Tóm tắt nội dung

Trang 4

CHỦ ĐỀ : Sorting Algorithm Complexity

I.Các thuật toán 1) Bubble Sort

- Bubble Sort là thuật toán sắp xếp đơn giản nhất hoạt động bằng cáchhoán đổi nhiều lần các phần tử liền kề nếu chúng sai thứ tự

- Using Array:

 Using List:

Trang 5

Trường hợp tốt: O(n)

Trung bình: O(n^2)

Trường hợp xấu: O(n^2)

Không gian bộ nhớ sử dụng: O(1)

 Đánh giá: Bubble Sort đơn giản, dễ hiểu, không tốn thêm bộ nhớ nhưng kém hiệu quả nên thường được sử dụng trong lý thuyết giảng dạy, không dùng trong các ứng dụng thực tế.

Biểu đồ phân tích thời gian chạy của thuật toán :

Trang 6

2 Duyệt từng phần tử từ phần tử thứ 2, tại mỗi lần duyệt phần tử ở chỉ số i thì đặt phần tử đó vào một vị trí nào đó trong đoạn từ [0…i] sao cho dãy số từ [0…i] vẫn đảm bảo tính chất dãy số tăng dần Sau mỗi lần duyệt, số phần tử đã được sắp xếp k trong mảng tăng thêm 1 phần tử.

3 Lặp cho tới khi duyệt hết tất cả các phần tử của mảng

 Using Array:

Trang 7

 Using List

Độ phức tạp của thuật toán:

 Trường hợp tốt nhất : O(n) khi dãy đã được sắp xếp theo thứ tự

 Trường hợp trung bình : O(n^2) , khi phân tích thuật toán trường hợp trung bình có cùng độ phức tạp với trường hợp xấu nhất

Trang 8

 Trường hợp xấu : Khi mảng được xếp theo thứ tự ngược lại (giảm dần), để chèn vào phần tử cuối cùng ta cần tối đa (n-1) phép so sánh và (n-1) phép đổi chỗ Tương tự, để chèn phần tử thứ 2 vào phần tử cuối cùng ta cần (n-2) phép

so sánh và (n-2) phép đổi chỗ v.v…Vậy độ phức tạp thuật toán là:

O( 2(1+2+…+n-1))=O(n(n-1))=O(n^2)

 Không gian bộ nhớ sử dụng: O(1)

 Sắp xếp chèn được sử dụng khi số lượng phần tử nhỏ vì độ phức tạp O(N2), không đủ nhanh với dữ liệu lớn Nó cũng có thể hữu ích khi mảng đầu vào gần như được sắp xếp, chỉ có một số phần tử bị đặt sai vị trí trong một mảng lớn hoàn chỉnh, Insertion Sort sẽ chạy rất nhanh Ví dụ bạn cần sắp xếp

Highscore trong game.

Sắp xếp chèn được thực hiện nhanh hơn nổi bọt trong các thử nghiệm đối với danh sách được sắp xếp ngẫu nhiên và ngược lại, nên được sử dụng trên danh sách có kích thước không quá lớn hoặc danh sách gần được sắp xếp.

Biểu đồ phân tích thời gian chạy của thuật toán :

Trang 9

3) Selection Sort

Thuật toán selection sort sắp xếp một mảng bằng cách đi tìm phần tử cógiá trị nhỏ nhất(giả sử với sắp xếp mảng tăng dần) trong đoạn đoạn chưađược sắp xếp và đổi cho phần tử nhỏ nhất đó với phần tử ở đầu đoạn chưađược sắp xếp(không phải đầu mảng) Thuật toán sẽ chia mảng làm 2 mảngcon

1 Một mảng con đã được sắp xếp

2 Một mảng con chưa được sắp xếp

Tại mỗi bước lặp của thuật toán, phần tử nhỏ nhất ở mảng con chưađược sắp xếp sẽ được di chuyển về đoạn đã sắp xếp

Trang 10

 Using Array :

 Using List :

Trang 11

Độ phức tạp thuật toán : O( n-1 + n-2 +…+2+1)=O(n^2).

 Giải thuật này không phù hợp với tập dữ liệu lớn khi mà độ phức tạp trường hợp xấu nhất và trường hợp trung bình là O(n2) với n là số phần tử.

Biểu đồ phân tích thời gian chạy của thuật toán :

Trang 12

4) Merge Sort

Sắp xếp trộn là thuật toán chia để trị, hoạt động kiểu đệ quy:

Đầu tiên chia dữ liệu thành 2 phần, và sắp xếp từng phần.Sau đógộp 2 phần lại với nhau Để gộp 2 phần, ta làm như sau:

 Tạo một dãy A mới để chứa các phần tử đã sắp xếp

 So sánh 2 phần tử đầu tiên của 2 phần

Phần tử nhỏ hơn ta cho vào A và xóa khỏi phần tương ứng Tiếp tụcnhư vậy đến khi ta cho hết các phần tử vào dãy A

 Using Array :

Trang 14

 Using List :

- Để chia danh sách, thuật toán tính toán giữa danh sáchbằng cách lấy độ dài của một nửa danh sách Phải mất thời gian

Trang 15

- Độ phức tạp thuật toán:

 Trường hợp tốt nhất: T(n)=O(nlog(n))

 Trường hợp trung bình: T(n)=O(nlog(n))

 Trường hợp xấu nhất: T(n)= O(nlog(n))

 Không gian bộ nhớ sử dụng: O(n)

Đó là một cách sắp xếp tuyệt vời khi bạn có một danh sách lớn, nhưng khi nó nhỏ, bạn nên sử dụng sắp xếp chèn Nhược điểm lớn của thuật toán trộn

là khi cài đặt thuật toán đòi hỏi thêm không gian bộ nhớ để lưu các dãy phụ Hạn chế này khó chấp nhận trong thực tế vì các dãy cần sắp xếp thường có kích thước lớn Vì vậy thuật toán trộn thường được dùng để sắp xếp các cấu trúc dữ liệu khác phù hợp hơn như danh sách liên kết hoặc file.

Biểu đồ phân tích độ phức tạp thuật toán:

Trang 16

5) Quick Sort

Thuật toán sắp xếp Quick Sort là một thuật toán chia để trị( Divide andConquer algorithm) Quick Sort bắt đầu bằng cách phân vùng danh sách -chọn một giá trị của danh sách sẽ ở vị trí được sắp xếp Giá trị này được gọi

là trục Tất cả các yếu tố nhỏ hơn trục được di chuyển sang bên trái của nó.Tất cả các yếu tố lớn hơn được di chuyển sang bên phải của nó Biết rằng

Trang 17

- Using List :

Trang 18

- Trường hợp xấu nhất là khi phần tử nhỏ nhất hoặc lớn nhất luôn được chọn làm trục Điều này sẽ tạo các phân vùng có kích thước n-1, nên mỗi cuộc gọi

đệ quy sẽ xử lý một danh sách có kích thước nhỏ hơn một danh sách trước đó

Do đó, chúng ta có thể thực hiện n - 1 lệnh gọi lồng nhau trước khi đạt được danh sách có kích thước 1 Điều này dẫn chúng ta đến độ phức tạp trong trường hợp xấu nhất của T(n) = n+(n-1)+…+1 = O (n ^ 2)

- Với một trục tốt, chức năng Quick Sort sẽ phân vùng mảng thành một nửa, phát triển logarit với n Do đó, độ phức tạp thời gian trung bình của thuật toán Quick Sort là O (nlog (n))

- Trường hợp trung bình: O(nlog(n))

Trang 19

Về lý thuyết thì Quick Sort thật sự là thuật toán sắp xếp nhanh nhất trong phần lớn các trường hợp Tuy nhiên, trên thực tế, việc lựa chọn thuật toán sắp xếp dựa vào nhiều yếu tố như dữ liệu đầu vào số lượng như thế nào, có sắp xếp sẵn hay không, dung lượng bộ nhớ ra sao, tốc độ xử lý CPU

"Không có 1 bất kỳ thuật toán sắp xếp nào cụ thể cả, nó còn phụ thuộc vào nhiều yếu tố" Và "phụ thuộc vào nhiều yếu tố" cũng là lý do mà có rất nhiều loại thuật toán sắp xếp khác nhau ra đời Chúng ta nhìn vào 1 vài ví dụ cụ thể dưới đây để thấy những yếu tố nào sẽ ảnh hưởng việc lựa chọn thuật toán”

Nếu dữ liệu đã được sắp xếp sẵn, thì nên chọn Insertion Sort sẽ tốt hơn.

Trong trường hợp, dữ liệu rất ít phần tử (10-20 phần tử), lựa chọn Selection Sort sẽ nhanh hơn Quick Sort

Trang 20

II) phần giao diện trong bài

Giao diện trong bài của nhóm em bao gồm 2 phần :

+) phần chạy thực thi các thuật toán

+) phần biểu đồ thể hiện thời gian chạy của các thuật toán

Trang 21

Ph n giao di n em làm b ng công c JavaFxần giao diện em làm bằng công cụ JavaFx ện em làm bằng công cụ JavaFx ằng công cụ JavaFx ụ JavaFx JavaFX là m t n n t ng ph nột nền tảng phần ền tảng phần ảng phần ần giao diện em làm bằng công cụ JavaFx

m m đ t o và cung c p các ng d ng máy tính đ bàn, cũng nh các ngền tảng phần ạo và cung cấp các ứng dụng máy tính để bàn, cũng như các ứng ấp các ứng dụng máy tính để bàn, cũng như các ứng ứng dụng máy tính để bàn, cũng như các ứng ụ JavaFx ư các ứng ứng dụng máy tính để bàn, cũng như các ứng

d ng Internet phong phú có th ch y trên nhi u lo i thi t bụ JavaFx ạo và cung cấp các ứng dụng máy tính để bàn, cũng như các ứng ền tảng phần ạo và cung cấp các ứng dụng máy tính để bàn, cũng như các ứng ết bị ị

 Cùng một mục đích sắp xếp như nhau, nhưng có nhiều phương pháp giải quyết khácnhau Nếu chỉ dựa vào thời gian tính toán của thuật toán đo được trong một ví dụ cụ thể

mà đánh giá thuật toán này tốt hơn thuật toán kia về mọi mặt là chưa đủ Việc chọn mộtthuật toán sắp xếp phù hợp với từng yêu cầu, từng điều kiện cụ thể là kỹ năng của ngườilập trình

 Những thuật toán có độ phức tạp O(n2) như sắp xếp kiểu chọn, sắp xếp kiểu chèn haysắp xếp đổi chỗ thì chỉ nên áp dụng cho các chương trình sắp xếp có ít lần sắp xếp và vớikích thước n nhỏ Về tốc độ, Bubble Sort luôn đứng sau cùng nhưng nó hết sức đơn giảncho người mới lập trình Thuật toán chèn tỏ ra nhanh hơn các thuật toán còn lại và có tính

ổn định; mã lệnh dễ nhớ

 Những thuật toán sắp xếp chia để trị như Quick Sort, Merge Sort hay Heap Sort lànhững thuật toán sắp xếp tổng quát, dãy khóa thuộc kiểu dữ liệu có thứ tự nào cũng cóthể áp dụng được Quick Sort gặp nhược điểm trong trường hợp suy biến (dù trường hợpnày là rất nhỏ), Merge Sort đòi hỏi thêm không gian nhớ phụ, còn HeapSort thì mã lệnhhơi phức tạp và khó nhớ Tuy nhiên, những nhược điểm này là quá nhỏ Ưu điểm chungcủa chúng là nhanh so với các thuật toán khác

 Qua việc tham khảo các dự án khác của các bạn em thấy rằng các thuật toán sắp xếpđược sử dụng rộng trong hầu hết mọi bài toán, các dự án game, dự án quản lí … chứng

tỏ sắp xếp rất quan trọng vì vậy cần nghiên cứu rõ để thực hiện việc sắp xếp nhanh nhất

Ngày đăng: 27/04/2022, 05:31

TỪ KHÓA LIÊN QUAN

w