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

DATA STRUCTURE and ALGORITHMS lab 03 sorting algorithms

56 19 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 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

Ngày đăng: 24/02/2022, 05:59

w