(TIỂU LUẬN) DATA STRUCTURE and ALGORITHMS lab 03 sorting algorithms

60 5 0
(TIỂU LUẬN) DATA STRUCTURE and ALGORITHMS lab 03 sorting algorithms

Đ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

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM KHOA CÔNG NGHỆ THÔNG TIN  Subject: DATA STRUCTURE and ALGORITHMS Lab 03: Sorting Algorithms Class: 20CLC01 ID group: 01 Đỗ Thụy Phương Vy Nguyễn Lê Sơn Dương Thanh Giang Trần Nguyễn Lan Trinh BẢNG ĐÁNH GIÁ THÀNH VIÊN Môn Cấu trúc liệu & Giải thuật – Lớp 20CLC01 Giảng viên hướng dẫn: Nguyễn Thanh Phương Nguyễn Ngọc Thảo Bùi Huy Thông Người thực hiện: Tất thành viên nhóm ID nhóm thực hiện: 01 STT MSSV 20127098 20127309 20127486 20127653 Giới thiệu Xin chào thầy cơ, nhóm chúng em nhóm 01 đến từ lớp 20CLC01 Hôm chúng em mang đến cho thầy cô đồ án đo độ phức tạp thuật tốn Mục đích thuật tốn để tính toán, chạy thuật toán đo thời gian chạy thuật toán, sau dựa kết có đưa kết luận thuật tốn Nhóm chúng em chọn Set (bao gồm 11 thuật toán): Selection Sort, Insertion Sort, Bubble Sort, Shaker Sort, Shell Sort, Heap Sort, Merge Sort, Quick Sort, Counting Sort, Radix Sort and Flash Sort Sau trình học hỏi, tìm hiểu tiếp thu thêm nhiều kiến thức mới, chúng em hoàn thành trọn vẹn đồ án mà giảng viên giao Chúng em hiểu nguyên lí thuật toán xếp, học cách để đo thuật tốn tính tốn đầu vào đầu , hiểu trường hợp tốt trường hợp xấu đưa đầu vào vào 2.Cấu hình máy tính sử dụng CPU: Intel® Core™ i7-10750H CPU @ 2.60GHz SSD: 512GB RAM: 16GB DDR4 GPU: NVIDIA GeForce GTX 1650 Ti 4GB CPU: AMD Ryzen 3750H with Radeon Vega Mobile Gfx SSD: 256GB RAM: 8GB DDR4 GPU: NVIDIA GeForce GTX 1650 4GB CPU: Intel® Core ™ i5 – 7200U CPU @ 2.50GHz SSD: 256GB RAM: 8GB LPDDR3 1866MHz GPU:Intel® HD Graphics 620 CPU: Intel® Core™ i5-5200U CPU @ 2.20GHz SSD: 256GB RAM: 8GB GPU: Trình bày thuật tốn: 1- Selection Sort: Ý tưởng: Thuật toán Selection sort xếp mảng cách chọn phần tử nhỏ chưa xếp mảng để đưa phần tử vào vị trí Thuật tốn dựa vào tốn tìm phần tử nhỏ đổi chỗ phần tử với để đưa phân tử vào vị trí Mơ tả: - Để xếp mảng A có n phần tử, ta chọn n−1 phần tử nhỏ - Lần lượt chọn n-1 phần thử nhỏ cách đoạn i+1 (0 ≤ I ≤ n−2) đến n−1: + Tìm phần nhỏ đoạn + Hốn vị A[i] phần tử nhỏ - Do xếp xác n−1n−1 phần tử nên phần tử cuối ta xếp Các bước: - Bước 1: Khởi tạo minVal = A[i]minVal = A[i], minInx = i - Bước 2: So sánh với phần tử đoạn [i+1, n−1] Nếu A[j]< minVal minVal = a[j], minInx = j - Bước 3: Hoán vị A[i] phần tử nhỏ đoạn vừa tìm - Bước 4: Lặp lại bước đến hết mảng Mã giả: For i = to n-2 minVal = A[i] minInx = i For j = i+1 to n-1 If A[j] < minVal then minVal = A[j] minInx = j endif endfor A[minInx] = A[i] A[i] = minVal endfor Đánh giá độ phức tạp: - Thời gian: O(n2) - Không gian: O(1) 2- Insertion Sort: Ý trưởng: Insertion sort giải thuật xếp dựa so sánh in-place Ở đây, danh sách conluôn trì dạng qua xếp Sắp xếp chèn chèn thêm phần tử vào danh sách qua xếp Phần tử chèn vào vị trí thích hợp cho đảm bảo danh sách theo thứ tự Với cấu trúc liệu mảng, tưởng tượng là: mảng gồm phần: danh sách xếp phần khác l phần tử thứ tự Giải thuật xếp chèn t hực việc tìm kiếm liên tiếp qua mảng đó, phần tử khơng có thứ tự di chuyển chèn vào vị trí thích hợp danh sách (của mảng đó) Mơ tả: Để xếp mảng có kích thước n theo thứ tự tăng dần thì: 1: Lặp lại từ arr [1] đến arr[n] mảng 2: So sánh phần tử với phần tử phía trước 3: Nếu phần tử nhỏ phần tử trước nó, tiếp tục l phần tử so sánh với phần tử trước di chuy ển phần tử lớn lên vị trí để tạo chỗ cho phần tử hốn đổi Các bước làm: Bước 1: Tạo vòng lặp từ vị trí thứ hai đến vị trí thứ n(để vị tr í thứ làm nơi so sánh cho vị trí thứ hai) Bước 2: Tạo phần mảng với xếp có phần tử (phần tử đ ầu tiên) Bước 3: So sánh phần tử phần tử thứ hai, phần tử s ẽ đưa vào xếp để đảm bảo phần mảng xếp v ẫn xếp theo thứ tự Bước 4: Tiếp tục lặp lại bước với phần tử tiếp th eo duyệt qua hết tất phần tử mảng Ví dụ thuật toán xếp - (theo GeeksforGeeks) Mã giả: Đánh giá độ phức tạp - Theo thời gian: + Trường hợp tốt nhất: O(n) : phần tử xếp +Trung bình: O(n2) +Trường hợp xấu: O(n2) :khi xếp phần tử xếp theo thứ tự ng ược lại - Không gian nhớ sử dụng: O(1) 3- Bubble Sort: Ý tưởng : Xuất phát từ phần tử cuối danh sách ta tiến hành so sánh với phần tử bên trái Nếu phần tử xét có khóa nhỏ phần tử bên trái ta tiến đưa bên trái dãy cách hoán vị với phần tử bên trái Tiếp tục thực tốn có n phần tử sau n –1 bước ta thu danh sách tăng dần Mô tả: Xét phần tử liền kề cuối mảng  Nếu phần tử nghịch a[i] > a[i – 1], tiến hành hoán vị đổi chỗ hai phần tử  Lặp lại điều đem phần tử nhỏ lên đầu mảng loại phần tử khỏi mảng xét  Tiếp tục thực lại bước mảng để đưa dần phần tử nhỏ đầu mảng  Thực lại thao tác mảng xét phần tử Các bước: Bước : i=0; //Phần tử Bước 2: Lần lượt so sánh đổi chổ (nếu cần) từ phải sang trái phần từ từ a[n] đến a[i] với biến gán j=n-i lặp lại j>i Bước : i=i+1 Bước 4: Nếu i < n, quay lại Bước Ngược lại, dừng, dãy cho xếp vị trí Mã giả: Số liệu thống kê dạng bảng: Sort Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Size: 10000 Chú thích: Đỏ: nhiều phép so sánh Xanh: phép so sánh Kết luận: +Nhìn chung hầu hết với số lượng input khác nhau, Selection sort ln thuật tốn có nhiều phép so sánh +Bên cạnh Selection sort cịn có Bubble sort có số phép so sánh gần tương đương với Selection sort Shaker sort Insertion sort thuật tốn có số phép so sánh khổng lồ +Các thuật tốn cịn lại có số phép so sánh so với thuật tốn trê n hàng trăm nghìn lần Data order: sorted data  Đồ thị Running time: Running time of sorted data 600000 500000 400000 300000 200000 100000 10000 Selection Sort Merge Sort Số liệu thống kê dạng bảng: Sort Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Size: 100 Flash Sort Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh Kết luận: +Với liệu xếp, Insertion Sort Shaker Sort thuật tốn có thời gian chạy nhanh Nhanh Selection Sort trăm nghìn lần +Bên cạnh Selection Sort thuật tốn có thời gian chạy chậm  Đồ thị Comparision Số liệu thống kê dạng bảng: Sort Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Size: 10000 Chú thích: Đỏ: nhiều phép so sánh Xanh: phép so sánh Kết luận: +Với liệu xếp, Selection sort thuật tốn có nhiều phép so sánh +Bên cạnh Bubble sort có số phép so sánh ương đương với Selection sort +Các thuật tốn cịn lại có số phép so sánh so với thuật tốn trê n, khoảng 200 nghìn lần Data order: reverse sorted data  Đồ thị Running time: 16000000 14000000 12000000 10000000 8000000 6000000 4000000 2000000 10000 Selection Sort Merge Sort Sort Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh Kết luận: +Với liệu xếp, Shaker Sort thuật tốn có thời gian chạy chậm nhất, cịn có thêm Bubble Sort +Bên cạnh Counting Sort thuật tốn có thời gian chạy nhanh Nhanh Shaker Sort Bubble Sort đến 13 triệu lần  Đồ thị Comparision Size: 100 Số liệu thống kê dạng bảng: Sort  Selection Sort  Insertion Sort  Bubble Sort  Shaker Sort  Shell Sort  Heap Sort  Merge Sort  Quick Sort  Counting Sort  Radix Sort  Flash Sort  Chú thích: -Chữ đỏ: nhiều phép so sánh nhất Size: 10000 - Chữ Xanh: ít phép so sánh nhất Nhận xét: - Selection sort, Insertion sort bubble sort ba thuật toán xếp với số lần so sánh lớn - Tiếp Sharker Sort số lần so sánh gần số lần xếp lớn - Các thuật tốn cịn lại có số lần xếp từ 1250 – 7700 lần so với số lần xếp lớn Data order: nearly sorted data  Đồ thị Running time: Running time of nearly sorted data 600000 500000 400000 300000 200000 100000 10000 Selection Sort Merge Sort Số liệu thống kê dạng bảng: Sort Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh Kết luận: +Với liệu xếp, Selection Sort Bubble Sort thuật tốn có thời gian chạy chậm +Bên cạnh Insertion Sort thuật tốn có thời gian chạy nhanh Nhanh đến 100 ngàn lần  Đồ thị Comparision Size: 100 Số liệu thống kê: Sort  Selection Sort  Insertion Sort  Bubble Sort  Shaker Sort  Shell Sort  Heap Sort  Merge Sort  Quick Sort  Counting Sort  Radix Sort  Flash Sort  Size: 10000 Chú thích: -Chữ đỏ: nhiều phép so sánh nhất - Chữ Xanh: ít phép so sánh nhất Nhận xét: - Selection sort, bubble sort ba thuật toán xếp với số lần so sánh lớ n - Tiếp Insertion sort với số lần xếp trăm lần so với s ố lần so sánh lớn - Các thuật tốn cịn lại có số lần xếp ngàn – trăm ng àn lần so với số lần so sánh lớn Nguồn tham khảo: https://dnmtechs.com https://codelearn.io https://viblo.asia https://thuvienhuongdan.com https://www.stdio.vn https://en.m.wikipedia.org ... liệu: Data order: randomized data Data size Resulting statics Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Data. .. Counting Sort Radix Sort Flash Sort Vẽ đồ thị & nhận xét: Data order: randomized data  Đồ thị Running time: Running time of randomized data 1600000 1400000 1200000 1000000 800000 600000 400000... Sort Data order: sorted data Data size Resulting statics Selection Sort Insertion Sort Bubble Sort Shaker Sort Shell Sort Heap Sort Merge Sort Quick Sort Counting Sort Radix Sort Flash Sort Data

Ngày đăng: 07/12/2022, 09:57

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan