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

Nội dung

ĐẠ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 **** - 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 LỜI NÓI ĐẦU Giáo viên hướng dẫn: TS Nguyễn Thị Hồng Minh Sinh viên thực hiện: TS Phạm Huy Thông Phan Duy Ánh_18002001 Tạ Duy An_18000948 Phạm Văn Thành_18002000 Ngày nay, công việc sống cần tỉ mỉ xác theo tiêu chuẩn đó, việc xếp trở nên vô quan trọng lĩnh vực công nghệ Đôi liệu lưu trữ truy xuất ứng dụng có khơng có thứ tự Chúng ta phải xếp lại liệu để xử lý xác sử dụng cách hiệu Trong năm qua, nhà khoa học máy tính tạo nhiều thuật tốn xếp để tổ chức liệu Bài báo cáo này, xem xét thuật toán xếp phổ biến, quen với thuật toán xếp, hiểu cách chúng hoạt động mã hóa chúng ngơn ngữ lập trình Chúng em so sánh cách xếp nhanh list Để đơn giản, việc triển khai thuật toán xếp danh sách số theo thứ tự tăng dần Chúng ta có thuật tốn xếp phổ biến trình bày viết Trân trọng, Hà Nội, ngày 25 tháng 12 năm 2020 Sinh viên thực Phan Duy Ánh Tạ Duy An Phạm Văn Thành sMỤC LỤC MỤC LỤC .3 I.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 CHỦ ĐỀ : Sorting Algorithm Complexity I.Các thuật toán 1) Bubble Sort - Bubble Sort thuật toán xếp đơn giản hoạt động cách hoán đổi nhiều lần phần tử liền kề chúng sai thứ tự - Using Array:  Using List: Độ phức tạp thuật toán: O( c.n(n-1)/2)=O(n^2)  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 nhớ sử dụng: O(1)  Đánh giá: Bubble Sort đơn giản, dễ hiểu, không tốn thêm nhớ hiệu nên thường sử dụng lý thuyết giảng dạy, không dùng ứng dụng thực tế Biểu đồ phân tích thời gian chạy thuật toán : 2) Insertion Sort Thuật toán xếp chèn thực xếp dãy số theo cách duyệt phần tử chèn phần tử vào vị trí mảng con(dãy số từ đầu đến phần tử phía trước nó) xếp cho dãy số mảng xếp đảm bảo tính chất dãy số tăng dần Khởi tạo mảng với dãy xếp có k = phần tử(phần tử đầu tiên, phần tử có số 0) Duyệt phần tử từ phần tử thứ 2, lần duyệt phần tử số i đặt phần tử vào vị trí đoạn từ [0… i] cho dãy số từ [0…i] đảm bảo tính chất dãy số tăng dần Sau lần duyệt, số phần tử xếp k mảng tăng thêm phần tử Lặp duyệt hết tất phần tử mảng  Using Array:  Using List Độ phức tạp thuật toán:  Trường hợp tốt : O(n) dãy xếp theo thứ tự  Trường hợp trung bình : O(n^2) , phân tích thuật tốn trường hợp trung bình có độ phức tạp với trường hợp xấu  Trường hợp xấu : Khi mảng xếp theo thứ tự ngược lại (giảm dần), để chèn vào phần tử cuối ta cần tối đa (n-1) phép so sánh (n-1) phép đổi chỗ Tương tự, để chèn phần tử thứ vào phần tử cuối ta cần (n-2) phép so sánh (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 nhớ sử dụng: O(1)  Sắp xếp chèn sử dụng số lượng phần tử nhỏ độ phức tạp O(N2), khơng đủ nhanh với liệu lớn Nó hữu ích mảng đầu vào gần xếp, có số phần tử bị đặt sai vị trí mảng lớn hoàn chỉnh, Insertion Sort chạy nhanh Ví dụ bạn cần xếp Highscore game Sắp xếp chèn thực nhanh bọt thử nghiệm danh sách xếp ngẫu nhiên ngược lại, nên sử dụng danh sách có kích thước khơng q lớn danh sách gần xếp Biểu đồ phân tích thời gian chạy thuật toán : 3) Selection Sort Thuật toán selection sort xếp mảng cách tìm phần tử có giá trị nhỏ nhất(giả sử với xếp mảng tăng dần) đoạn đoạn chưa xếp đổi cho phần tử nhỏ với phần tử đầu đoạn chưa xếp(khơng phải đầu mảng) Thuật tốn chia mảng làm mảng Một mảng xếp Một mảng chưa xếp Tại bước lặp thuật toán, phần tử nhỏ mảng chưa xếp di chuyển đoạn xếp  Using Array :  Using List : 10 Độ phức tạp thuật toán : O( n-1 + n-2 +…+2+1)=O(n^2)  Giải thuật không phù hợp với tập liệu lớn mà độ phức tạp trường hợp xấu trường hợp trung bình O(n2) với n số phần tử Biểu đồ phân tích thời gian chạy thuật toán : 11 4) Merge Sort Sắp xếp trộn thuật toán chia để trị, hoạt động kiểu đệ quy: Đầu tiên chia liệu thành phần, xếp phần.Sau gộp phần lại với Để gộp phần, ta làm sau:  Tạo dãy A để chứa phần tử xếp  So sánh phần tử phần Phần tử nhỏ ta cho vào A xóa khỏi phần tương ứng Tiếp tục đến ta cho hết phần tử vào dãy A  Using Array : 12 13  Using List : - Để chia danh sách, thuật tốn tính toán danh sách cách lấy độ dài nửa danh sách Phải thời gian O(1) để chia danh sách thành phần Thực tách mỗi nửa danh sách cách phần tử riên biệt cần thời gian T(n/2) Bước hợp phần tử theo thứ tự tăng dần O(n) Vì vậy, thời gian thuật toán MergeSort: T(n)=2T(n/2)+O(n) 14 - Độ 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 nhớ sử dụng: O(n)  Đó cách xếp tuyệt vời bạn có danh sách lớn, nhỏ, bạn nên sử dụng xếp chèn Nhược điểm lớn thuật toán trộn cài đặt thuật toán địi hỏi thêm khơng gian nhớ để lưu dãy phụ Hạn chế khó chấp nhận thực tế dãy cần xếp thường có kích thước lớn Vì thuật tốn trộn thường dùng để xếp cấu trúc liệu khác phù hợp danh sách liên kết file Biểu đồ phân tích độ phức tạp thuật tốn: 15 5) Quick Sort Thuật toán xếp Quick Sort thuật toán chia để trị( Divide and Conquer algorithm) Quick Sort bắt đầu cách phân vùng danh sách chọn giá trị danh sách vị trí xếp Giá trị gọi trục Tất yếu tố nhỏ trục di chuyển sang bên trái Tất yếu tố lớn di chuyển sang bên phải Biết trục nằm vị trí hợp lý, thực xếp đệ quy giá trị xung quanh trục toàn danh sách xếp - Using Array : 16 - Using List : 17 - Trường hợp xấu phần tử nhỏ lớn chọn làm trục Điều tạo phân vùng có kích thước n-1, nên gọi đệ quy xử lý danh sách có kích thước nhỏ danh sách trước Do đó, thực n - lệnh gọi lồng trước đạt danh sách có kích thước Điều dẫn đến độ phức tạp trường hợp xấu T(n) = n+(n-1)+…+1 = O (n ^ 2) - Với trục tốt, chức Quick Sort phân vùng mảng thành nửa, phát triển logarit với n Do đó, độ phức tạp thời gian trung bình thuật tốn Quick Sort O (nlog (n)) - Trường hợp trung bình: O(nlog(n)) Biểu đồ phân tích thuật tốn: 18  Về lý thuyết Quick Sort thật thuật tốn xếp nhanh phần lớn trường hợp Tuy nhiên, thực tế, việc lựa chọn thuật toán xếp dựa vào nhiều yếu tố liệu đầu vào số lượng nào, có xếp sẵn hay không, dung lượng nhớ sao, tốc độ xử lý CPU "Khơng có thuật tốn xếp cụ thể cả, cịn phụ thuộc vào nhiều yếu tố" Và "phụ thuộc vào nhiều yếu tố" lý mà có nhiều loại thuật toán xếp khác đời Chúng ta nhìn vào vài ví dụ cụ thể để thấy yếu tố ảnh hưởng việc lựa chọn thuật toán”  Nếu liệu xếp sẵn, nên chọn Insertion Sort tốt  Trong trường hợp, liệu phần tử (10-20 phần tử), lựa chọn Selection Sort nhanh Quick Sort 19 II) phần giao diện Giao diện nhóm em bao gồm phần : +) phần chạy thực thi thuật toán +) phần biểu đồ thể thời gian chạy thuật toán 20 Phần giao diện em làm công cụ JavaFx JavaFX tảng phần mềm để tạo cung cấp ứng dụng máy tính để bàn, nh ứng dụng Internet phong phú chạy nhiều loại thiết bị III)Tóm tắt nội dung  Cùng mục đích xếp nhau, có nhiều phương pháp giải khác Nếu dựa vào thời gian tính tốn thuật tốn đo ví dụ cụ thể mà đánh giá thuật toán tốt thuật toán mặt chưa đủ Việc chọn thuật toán xếp phù hợp với yêu cầu, điều kiện cụ thể kỹ người lập trình  Những thuật tốn có độ phức tạp O(n2) xếp kiểu chọn, xếp kiểu chèn hay xếp đổi chỗ nên áp dụng cho chương trình xếp có lần xếp với kích thước n nhỏ Về tốc độ, Bubble Sort ln đứng sau đơn giản 21 cho người lập trình Thuật tốn chèn tỏ nhanh thuật tốn cịn lại có tính ổn định; mã lệnh dễ nhớ  Những thuật toán xếp chia để trị Quick Sort, Merge Sort hay Heap Sort thuật toán xếp tổng quát, dãy khóa thuộc kiểu liệu có thứ tự áp dụng Quick Sort gặp nhược điểm trường hợp suy biến (dù trường hợp nhỏ), Merge Sort đòi hỏi thêm khơng gian nhớ phụ, cịn HeapSort mã lệnh phức tạp khó nhớ Tuy nhiên, nhược điểm nhỏ Ưu điểm chung chúng nhanh so với thuật toán khác  Qua việc tham khảo dự án khác bạn em thấy thuật toán xếp sử dụng rộng hầu hết toán, dự án game, dự án quản lí … chứng tỏ xếp quan trọng cần nghiên cứu rõ để thực việc xếp nhanh 22 ... dựa vào thời gian tính tốn thuật tốn đo ví dụ cụ thể mà đánh giá thuật toán tốt thuật toán mặt chưa đủ Việc chọn thuật toán xếp phù hợp với yêu cầu, điều kiện cụ thể kỹ người lập trình  Những thuật. .. thuật toán xếp dựa vào nhiều yếu tố liệu đầu vào số lượng nào, có xếp sẵn hay khơng, dung lượng nhớ sao, tốc độ xử lý CPU "Khơng có thuật tốn xếp cụ thể cả, cịn phụ thuộc vào nhiều yếu tố" Và. .. yếu tố" Và "phụ thuộc vào nhiều yếu tố" lý mà có nhiều loại thuật tốn xếp khác đời Chúng ta nhìn vào vài ví dụ cụ thể để thấy yếu tố ảnh hưởng việc lựa chọn thuật toán? ??  Nếu liệu xếp sẵn, nên chọn

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

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w