Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
1,09 MB
Nội dung
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 Họ & tên Công việc Đỗ Thụy Phương Vy Selection Sort* (20), Flash Sort*** (20), Comparision-Experimental run (Table fill) (40), Command 1+2 (30) 20127309 Nguyễn Lê Sơn 20127486 Dương Thanh Giang 20127653 Trần Nguyễn Lan Trinh Giới thiệu % đóng góp nhiệm vụ vào tổng thể làm Đánh giá két nhiệm vụ Insertion Sort* (20), Shell Sort** (20), Counting Sort*** (20), ComparisionChart draw and comment (2 cuối) (20), Run time-Experimental run (Table fill) (2 đầu) (20), Command (15) Bubble Sort* (20), Shaker Sort* (20), Radix Sort*** (20), ComparisionChart draw and comment (2 đầu) (20), Run time-Experimental run (Table fill) (2 cuối) (20), Command (15) Merge Sort** (20), Quick Sort** (20), Heap Sort** (20), Run time-Chart draw and comment (40), Command (15) 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 tốn, chạy thuật tố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 ngun lí thuật tốn xếp, học cách để đo thuật tốn tính tốn đầu vào đầu ra, hiểu trường hợp tốt trường hợp xấu đưa đầu vào vào 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 tốn Selection sort sắp xếp mảng bằng cách lần lượt chọn các phần tử nhỏ nhất chưa được sắp xếp trong mảng để đưa các phần tử vào vị trí đúng của nó. Thuật tốn dựa vào bài tốn tìm phần tử nhỏ nhất và đổi chỗ các phần tử với nhau để đưa phân tử vào vị trí đúng của nó Mơ tả: - Để sắp xếp mảng A có n phần tử, ta chọn lần lượt n−1 phần tử nhỏ nhất - Lần lượt chọn n-1 phần thử nhỏ nhất bằng cách tại mỗi đoạn i+1 (0 ≤ I ≤ n−2) đến n−1: + Tìm phần nhỏ nhất trong đoạn + Hốn vị A[i] và phần tử nhỏ nhất - Do sắp xếp chính xác n−1n−1 phần tử nên phần tử cuối cùng ta khơng phải sắp 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 các phần tử trong đoạn [i+1, n−1]. Nếu A[j]i - Bước 3: 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ả: Đánh giá độ phức tạp: - Trường hợp tốt: O(n) - Trung bình: O(n^2) - Trường hợp xấu: O(n^2) 4-Shaker Sort: Ý tưởng: - Shaker Sort cải tiến Bubble Sort - Sau đưa phần tử nhỏ đầu mảng đưa phần tử lớn cuối dãy Do đưa phần tử vị trí hai đầu nên Shaker Sort giúp cải thiện thời gian xếp dãy số giảm độ lớn mảng xét lần so sánh Các bước: - Bước 1: l = 1; r = n; // từ l đến r là đoạn cần xếp k = n; // ghi nhận vị trí k xảy hoán vị sau // để làm sở thu hẹp đoạn l đến r - Bước 2: Data order: randomized data Đồ thị Running time: Running time of randomized data 1600000 1400000 1200000 1000000 800000 600000 400000 200000 10000 30000 Selection Sort Merge Sort 50000 100000 Insertion Sort Quick Sort 300000 500000 Bubble Sort Counting Sort Shaker Sort Radix Sort Shell Sort Flash Sort Heap Sort Số liệu thống kê dạng bảng: Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 203 1883 5217 21223 209055 620326 Insertion Sort 105 938 2602 10364 101750 261156 Bubble Sort 215 2015 6214 25795 202006 500264 Shaker Sort 3372 50169 86160 348879 981453 1478289 Shell Sort 12 19 43 159 257 Heap Sort 32 65 116 243 817 1524 Merge Sort 16 59 97 159 458 772 Quick Sort 19 35 79 264 613 Counting Sort Radix Sort Flash Sort 127 18 957 30 2776 60 11292 181 33564 13 431 82450 Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh nhất Kết luận: +Với dữ liệu đã sắp xếp, Shaker Sort là thuật tốn có thời gian chạy chậm nhất +Bên cạnh đó Counting Sort thuật tốn có thời gian chạy nhanh Nhanh Shaker Sort đến triệu lần Đồ thị Comparision Số liệu thống kê dưới dạng bảng: Sort Size: 10000 Selection Sort 100010001 Insertion Sort 49221721 Bubble Sort 100009999 Shaker Sort 67331918 Shell Sort 649791 Heap Sort 503913 Merge Sort 503913 Quick Sort 583525 Counting Sort 246959 Radix Sort 79994 Flash Sort 140058 Size: 30000 900030001 447838716 900029999 597003790 2264986 1700821 1937101 813332 239992 510072 313203 Size: 50000 2500050001 1251270668 2500049999 1663546930 4329614 2984824 3383097 1433798 365523 850072 472607 Size: 100000 10000100001 5000189540 10000099999 6673347604 10192228 6371093 7166700 2991997 665533 1700072 906858 Size: 300000 Size: 500000 90000300001 250000499999 45155454523 124927835244 90000299999 250000499999 59957185935 166313390949 33684564 65301396 20996085 36450142 23382362 40381392 9540211 16421142 1865526 3500003 5100072 8500072 2765237 4809107 Chú thích: Đỏ: nhiều phép so sánh nhất Xanh: ít phép so sánh nhất. Kết luận: +Nhìn chung hầu hết với các số lượng input khác nhau, Selection sort ln là thuật tốn có nhiều phép so sánh nhất. +Bên cạnh Selection sort cịn có Bubble sort có số phép so sánh gần như tương đương với Selection sort Shaker sort và Insertion sort cũng là một trong những 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 rất ít so với các 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 30000 Selection Sort Merge Sort 50000 100000 Insertion Sort Quick Sort 300000 500000 Bubble Sort Counting Sort Shaker Sort Radix Sort Shell Sort Flash Sort Heap Sort Số liệu thống kê dạng bảng: Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 219 1961 5507 34308 34308 559773 Insertion Sort 0 1 Bubble Sort 198 1774 4865 19816 19816 519968 Shaker Sort 0 1 Shell Sort 18 18 97 Heap Sort 50 147 265 540 540 2156 Merge Sort 23 65 107 183 183 818 Quick Sort 13 24 43 43 153 Counting Sort 7 30 Radix Sort 32 40 84 84 580 Flash Sort 57 57 265 Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh nhất Kết luận: +Với dữ liệu đã sắp xếp, Insertion Sort và Shaker Sort là 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ưới dạng bảng: Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 100009999 900029999 2500049999 10000099999 90000299999 250000499999 Insertion Sort 29998 89998 149998 299998 899998 1499998 Bubble Sort 100009999 900029999 2500049999 10000099999 90000299999 250000499999 Shaker Sort 20002 60002 100002 200002 600002 1000002 Shell Sort 360042 1170050 2100049 4500051 15300061 25500058 Heap Sort 519048 1742797 3061258 6526059 21461675 37184399 Merge Sort 475242 1559914 2722826 5745658 18645946 32017850 Quick Sort 154960 501930 913851 1927692 6058229 10310734 Counting Sort 70003 210003 350003 700003 2100003 3500003 Radix Sort 140058 510072 850072 1700072 6000086 10000086 Flash Sort 123491 370491 617491 1234991 3704991 6174991 Chú thích: Đỏ: nhiều phép so sánh nhất Xanh: ít phép so sánh nhất. Kết luận: +Với dữ liệu đã sắp xếp, Selection sort vẫn là thuật tốn có nhiều phép so sánh nhất. +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 rất ít so với các thuật tốn trê n, ít hơn khoảng 200 nghìn lần. Data order: reverse sorted data Đồ thị Running time: Running time of reverse sorted data 16000000 14000000 12000000 10000000 8000000 6000000 4000000 2000000 10000 30000 Selection Sort Merge Sort 50000 100000 Insertion Sort Quick Sort 300000 500000 Bubble Sort Counting Sort Số liệu thống kê dưới dạng bảng: Shaker Sort Radix Sort Shell Sort FlashSort Heap Sort Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 196 1941 5204 22276 193586 401277 Insertion Sort 203 1801 5257 22838 215212 582376 Bubble Sort 6209 63349 166791 677761 999218 14548661 Shaker Sort 6486 61504 159886 659847 966178 13260127 Shell Sort 14 31 78 127 Heap Sort 43 136 242 565 1724 3188 Merge Sort 23 75 123 207 656 1249 Quick Sort 18 40 60 183 334 Counting Sort 22 30 Radix Sort 27 58 96 377 611 Flash Sort 254 1989 5783 21956 89742 202521 Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh nhất Kết luận: +Với dữ liệu đã sắp xếp, Shaker Sort vẫn là 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 Số liệu thống kê dạng bảng: Sort Size: 10000 Size: 30000 Selection Sort 100009999 900029999 Insertion Sort 100009999 900029999 Bubble Sort 100009999 900029999 Shaker Sort 100005001 900015001 475175 1554051 Shell Sort 505475 1707442 Heap Sort 476441 1573465 Merge Sort 164976 531940 Quick Sort 240002 Counting Sort 80002 140058 510072 Radix Sort 108250 324750 Flash Sort Size: 50000 2500049999 2500049999 2500049999 2500025001 2844628 2991344 2733945 963862 400002 850072 541250 Chú thích: -Chữ đỏ: nhiều phép so sánh nhất Size: 100000 Size: 300000 Size: 500000 10000099999 90000299999 250000499999 10000099999 90000299999 250000499999 10000099999 90000299999 250000499999 10000050001 90000150001 250000250001 6089190 20001852 33857581 6526059 21063394 36572621 5767897 18708313 32336409 2027704 6358250 10810748 800002 2400002 4000002 1700072 6000086 10000086 1082500 3247500 3247500 - Chữ Xanh: ít phép so sánh nhất. Nhận xét: - Selection sort, Insertion sort và bubble sort là ba thuật tốn sắp xếp với số lần so sánh lớn nhất - Tiếp đó là Sharker Sort số lần so sánh gần bằng số lần sắp xếp lớn nhất - Các thuật tốn cịn lại có số lần sắp xếp ít hơn từ 1250 – 7700 lần so với số lần sắp xếp lớn nhất Data order: nearly sorted data Đồ thị Running time: Running time of nearly sorted data 600000 500000 400000 300000 200000 100000 10000 30000 Selection Sort Merge Sort 50000 100000 Insertion Sort Quick Sort 300000 500000 Bubble Sort Counting Sort Shaker Sort Radix Sort Số liệu thống kê dạng bảng: Shell Sort Flash Sort Heap Sort Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 220 1936 6209 23214 495537 495537 Insertion Sort 1 4 Bubble Sort 204 1785 4886 21294 489873 489873 Shaker Sort 20 23 24 33 33 Shell Sort 12 25 100 100 Heap Sort 48 145 268 542 3127 3127 Merge Sort 27 67 119 223 1185 1185 Quick Sort 13 21 45 185 185 Counting Sort 33 33 Radix Sort 27 48 99 587 587 Flash Sort 9 68 271 271 Chú thích: Đỏ: thời gian chạy lâu Xanh: thời gian chạy nhanh nhất Kết luận: +Với dữ liệu đã sắp xếp, Selection Sort Bubble Sort vẫn là thuật tốn có thời gian chạy chậm nhất +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 Số liệu thống kê: Sort Size: 10000 Size: 30000 Size: 50000 Size: 100000 Size: 300000 Size: 500000 Selection Sort 100009999 900029999 2500049999 10000099999 90000299999 250000499999 158770 438630 507290 915634 1252722 2500049999 Insertion Sort Bubble Sort 100009999 900029999 2500049999 10000099999 90000299999 250000499999 184344 541336 569069 667910 1019357 1611071 Shaker Sort 414642 1328664 2242229 4684917 15459465 25669478 Shell Sort 519091 1742798 3061299 6526059 21461777 37184536 Heap Sort 506292 1627595 2820803 5834900 18761063 32110750 Merge Sort 155009 501958 913891 1927716 6058265 10310788 Quick Sort 77252 238272 379409 728238 2126341 3523420 Counting Sort 140058 510072 850072 1700072 6000086 10000086 Radix Sort 123465 370468 617468 1234968 3704968 6174966 Flash Sort 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 là ba thuật tốn sắp xếp với số lần so sánh lớ n nhất - Tiếp đó là Insertion sort với số lần sắp xếp ít hơn mấy trăm lần so với s ố lần so sánh lớn nhất - Các thuật tốn cịn lại có số lần sắp xếp ít hơn mấy ngàn – mấy trăm ng àn lần so với số lần so sánh lớn nhất 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 ... 32017850 Quick Sort 154960 501930 913851 1927692 6058229 1031 0734 Counting Sort 70 003? ? 210 003? ? 350 003? ? 700 003? ? 2100 003? ? 3500 003? ? Radix Sort 140058 510072 850072 1700072 6000086 10000086 ... 25669478 37184536 32110750 1031 0788 3523420 10000086 6174966 Data order: randomized data Đồ thị Running time: Running time of randomized data 1600000 1400000 1200000 1000000 800000 600000 400000... Trường hợp xấu nhất khi m=n−1 khi đó O(2∗m2) => Thời gian xấp xỉ O(n2). Không gian: O(group) Bảng số liệu: Data order: randomized data Data size Resulting statics Selection Sort Insertion Sort Bubble Sort Shaker Sort