BÁO cáo ASSIGNMENT đề tài 4 GIẢI THUẬT QUICK SORT

17 35 1
BÁO cáo ASSIGNMENT đề tài 4 GIẢI THUẬT QUICK SORT

Đ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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH BÁO CÁO ASSIGNMENT ĐỀ TÀI 4: GIẢI THUẬT QUICK SORT GVHD: ThS Trần Thanh Bình SV thực hiện: Tên Đinh Tiến Khởi Tp Hồ Chí Minh, Tháng 11/2022 MSSV 2013537 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính MỤC LỤC Đề Bài Giải Thuật Quick Sort 2.1 Giới Thiệu 2.2 Các Thức Hoạt Động 2.3 Độ Phức Tạp Của Giải Thuật 2.3.1 Thời Gian Thực Thi 2.3.2 Không Gian Bộ Nhớ 2.4 Ưu Điển 2.5 Nhược Điểm Hiện Thực Giải Thuật Hiện Thực Giải Thuật Sử Dụng Assembly 4.1 Data Section 4.2 Xây Dựng Function 4.2.1 Hàm Print 4.2.2 Hàm Swap 4.2.3 Hàm Partition 4.2.4 Hàm Quick_Sort 4.2.5 Hàm Main 4.3 Kết Quả 4.3.1 Test Case 4.3.2 Test Case 4.3.3 Test Case 4.3.4 Test Case Thống Kê Lệnh - Khảo Sát Lệnh - Thời Gian Thực Thi 5.1 Thống Kê Lệnh - Khảo Sát Lệnh 5.1.1 Test Case 5.1.2 Test Case 5.1.3 Test Case 5.1.4 Test Case 5.2 Thời Gian Thực Thi Kết Luận Tài Liệu Tham Khảo Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) 2 2 2 3 3 5 5 6 10 11 11 11 12 12 12 12 12 13 13 14 14 15 16 Trang 1/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Đề Bài Đề Tài 04: Sắp xếp chuỗi Cho chuỗi số nguyên 50 phần tử Sử dụng hợp ngữ assembly MIPS, viết thủ tục xếp chuỗi theo thứ tự tăng dần theo giải thuật quick sort Yêu cầu xuất bước trình demo Giải Thuật Quick Sort 2.1 Giới Thiệu Giải thuật Quick Sort giải thuật xếp mang tính in-place algorithm, phát triển nhà nghiên cứu khoa học máy tính Tony Hoare vào năm 1959 phát hành thức vào năm 1961 Ngày thuật tốn cịn vận dụng cách rộng rãi trình xếp theo thơng tin trích dẫn từ wikipedia Quick sort giải thuật chia để trị (Divide-and-conquer algorithm) Tên gọi quick sort ám việc giải thuật quick sort có độ hiệu mặt thời gian thực thi nhớ tính theo trung bình trường hợp xảy Trường hợp worst case xảy mảng xếp sẵn nhìn chung tính ổn định giải thuật hoàn toàn hiệu 2.2 Các Thức Hoạt Động Thuật toán quick sort hoạt động dựa việc lựa chọn phần tử vách ngăn (pivot) từ mảng phân vùng phần tử mảng thành vùng riêng biệt (sub-array) tùy thuộc vào chúng lớn hay nhỏ phần tử pivot Sau đó, vùng phân chia tiếp tục thực thao tác dựa kỹ thuật đệ quy phần tử mảng có số lượng nhỏ mảng xếp Cuối cùng, dựa vào giải thuật đệ quy, tiến hành nối tất các sub-array tạo thành mảng xếp Bên cạnh đó, việc lựa chọn pivot mảng tồn nhiều phương thức khác Do đó, việc lựa chọn pivot ảnh hưởng đến thời gian thực thi né tránh trường hợp worst-case xảy Các phương thức thường gặp: + Lựa chọn phần tử đầu + Lựa chọn phần tử cuối + Lựa chọn phần tử (median as pivot) + Lựa chọn phần tử ngẫu nhân - tối ưu việc tránh worst-case 2.3 2.3.1 Độ Phức Tạp Của Giải Thuật Thời Gian Thực Thi Thời gian thực thi giải thuật quick sort đánh sau: + Best Case: n log n + Average Case: n log n + Worst Case: n2 Giải thuật có độ hiệu cao xét mặt thời gian thực thi tính ổn định Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 2/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 2.3.2 Khơng Gian Bộ Nhớ Khơng gian nhớ mà giải thuật xử dụng đánh sau: + Average Case: log n + Worst Case: n2 Khi so sánh với giải thuật khác, Quick Sort sử dụng nhớ mức vừa phải, xét khía cạnh giải thuật đệ quy, thuật tốn tối ưu vùng nhớ 2.4 Ưu Điển Thời gian thực thi trung bình đánh giá nhanh Do đó, quick sort sử dụng để xây dựng thư viện có sẵn ngơn ngữ lập trình Java, C++, etc 2.5 Nhược Điểm Mặc dù thời gian thực thi mức tốt tính ổn định thuật tốn chưa cao Phụ thuộc hoàn toàn vào giải thuật lựa chọn pivot Từ đó, tránh trường hợp worst case Hiện Thực Giải Thuật Sau nghiên cứu phương pháp lựa chọn pivot cho giải thuật Nhóm em định lựa chọn phần tử cuối làm pivot Để thực thuật toán ta cần xây dựng hàm partition() - mục đính nhằm tìm kiếm vị trí xác pivot phân vùng mảng để thực cho bước đệ quy ; Hàm swap() có sẵn thư viện ngơn ngữ lập trình; Và hàm QuickSort() thực thao tác đệ quy cho sub-array - Ý tưởng hàm P artition(): + Hàm nhận tham số đầu vào bao gồm địa phần tử đầu, vị trí phần tử đầu vị trí phần tử cuối array sub-array + Sau hàm thực thành công kết thúc, hàm trả vị trí xác pivot array sub-array đồng thời phân vùng array sub-array thành vùng lớn nhỏ pivot cho công đoạn đệ quy + Bước 1: Gán giá trị pivot cho phần tử cuối cùng, pivotIndex vị trí bắt đầu array sub-array + Bước 2: Sử dụng vòng lặp với chạy i chạy từ vị trí bắt đầu - start đến vị trí kết thúc array sub-array - end Trong vòng lặp ta tiến hành so sáng giá trị phần tử mảng vị trí i giá trị pivot gán ban đầu Nếu điều kiện xảy ra, ta tiến hành hoán đổi giá trị vị trí i cho vị trí pivotIndex sau tăng giá trị pivotIndex lên + Bước 3: Hoán đổi giá pivot vị trí cuối cho giá trị phần tử vị trí pivotIndex trả giá trị pivotIndex - Ý tưởng hàm QuickSort(): + Nhận tham số đầu vào bao gồm địa đầu, vị trí đầu vị trí cuối array sub-array Hàm khơng có giá trị trả Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 3/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính + Bước 1: Xét điều kiện so sánh vị trí phần tử đầu phần tử cuối Nếu điều kiện đưa thỏa mãn, gọi hàm P artition() với tham số đầu vào tương ứng để nhận giá trị pivot đầu + Bước 2: Tiến hành gọi đệ quy với phân vùng vừa chia từ hàm P artition() Hình 1: Sơ Đồ Quick Sort Với Pivot Đầu Tiên Sau nghiên cứu chế giải thuật, tiến hành thực phương thức sử dụng ngôn ngữ cấp cao, đơn cử C++: 11 16 int Partition(int* array, int start, int end) { int pivot = array[end]; // Set pivot as last element int partition_index = start; // Set partition index as start index for(int i = start; i exit loop $t2, #get ofset $t5, $a1 #get address of array[i] 0($t5) #get content of array[i] sle $t7, $t6, $t1 #array[i] = end => exit loop $t2, #get ofset $t5, $a1 #get address of array[i] 0($t5) #get content of array[i] sle $t7, $t6, $t1 #array[i] pivot - 1, Sub-array với index từ pivot + − > end lw $a2, 4($sp) addi $a3, $s0, -1 jal quick_sort #quicksort(array, start, pivot - 1) addi $a2, $s0, lw $a3, 8($sp) jal quick_sort #quicksort(array(pivot + 1, end) - Sau cùng, tiến hành trả lại giá trị vừa back-up ban đầu, quay hàm main() cho tác vụ lw $a1, 0($sp) lw $a2, 4($sp) lw $a3, 8($sp) lw $ra, 12($sp) #restore content of lw $s0, 16($sp) addi $sp, $sp, 20 jr $ra 4.2.5 Hàm Main Hàm main() chịu trách nhiệm xây dựng cấu trúc chương trình cách gọi hàm xây dựng xếp chúng theo yêu cầu người lập trình 13 18 main: #Nhap (syscall) #Xu ly la $a1, test_case_4 #Load test_case_1 array address addi $a2, $0, #Set $a1 as started index addi $a3, $0, 49 #set $a2 as ended index #Print Message la $a0, message_1 li $v0, syscall jal print_array #Print Message la $a0, message_3 li $v0, syscall jal quick_sort #Xuat ket qua (syscall) #Print Message la $a0, message_2 Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 10/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 23 li $v0, syscall jal print_array #ket thuc chuong trinh (syscall) Kthuc: addiu $v0,$zero,10 syscall Giải thích sơ hàm: Ban đầu hàm load thông tin cần thiết mảng base-address, index đầu index cuối Sau đó, tiến hành in mảng chưa xếp để tiện cho việc so sánh với kết sau xếp cách gọi hàm print_array Tiếp theo, gọi hàm quick _sort tiến hành xếp mảng Sau đó, gọi print_array in kết việc xếp Cuối cùng, kết thúc chương trình 4.3 4.3.1 Kết Quả Test Case test_case_1: word 129 , 10 , 31 , 44 , 16 , 3, 33 , 34 , 35 , 44 , 44 , 25 , 48 , 16 , 32 , 37 , 8, 33 , 30 , , 18 , 26 , , 37 , 40 , 30 , 50 , 32 , 5, 41 , 0, 32 , 12 , 33 , 22 , 14 , 34 , 1, 0, 41 , 45 ,4 8, 39 , 27 , 23, 45 , 10 , 50 , 34 - Kết quả: Hình 2: 4.3.2 Kết test case Test Case test_case_2 : word 39 , 49 , 2, 6, 46 , 8, 18 , 31 , 3, 3, 21 , 28 , 24 , 46 , 16 , 29 , , 4, 8, 11 ,3, 49 , 23 , 11 , 34 , 30 , 48 , , , 45 , 8, 30 , 14 , 14 , , 6, 33 , 31 , 16 , 12 , 20 , 36 , 3,37 , , 36 , 44 , 45 , 9, - Kết quả: Hình 3: Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Kết test case Trang 11/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 4.3.3 Test Case test_case_3 : word 8, 10 , 25 , 11 , 15 , 41 , 15 , , 20 , , 11 , 17 , 35 , 17 , 20 , 16 , 48 , 29 , 8,2, 28 , 13 , 17 , 40 , 3, 45 , 40 , 29 , 40 , 28 , 12 , 45 , 46 , 28 , 5, 40 , 24 , 6, 42 , 32 , 29 ,33 , 45 , 27 , 11 , 26 , 38 , 29 , 25 , 21 - Kết quả: Hình 4: 4.3.4 Kết test case Test Case test_case_4 : word -349 , 95 , 395 , -277 , 164 , 241 , -110 , -64 , -158 , -1010 , 66 , -197 , -52 ,158 , 2022 , 88 , -192 , 344 , -180 , -201 , -384 , -422 , 333 , 488 , -331 , -7, 372 , 37 , 331 ,-106 , 370 , 482 , -159 , 265 , -294 , -495 , 359 , 448 , 297 , 53 , -351 , 212 , 239 , 449 , 611 ,53 , 37 , -118, 249 , 357 - Kết Before Sorting: -349 95 395 -277 164 241 -110 -64 -158 -1010 66 -197 -52 158 2022 88 -192 344 -180 -201 -384 -422 333 488 -331 -7 372 37 331 -106 370 482 -159 265 -294 -495 359 448 297 53 -351 212 239 449 611 53 37 -118 249 357 Pivot Index List: 39 33 15 10 11 13 18 16 25 22 19 20 24 26 27 29 31 36 34 38 46 41 43 45 47 48 After Sorting: -1010 -495 -422 -384 -351 -349 -331 -294 -277 -201 -197 -192 -180 -159 -158 -118 -110 -106 -64 -52 -7 37 37 53 53 66 88 95 158 164 212 239 241 249 265 297 331 333 344 357 359 370 372 395 448 449 482 488 611 2022 program is finished running Thống Kê Lệnh - Khảo Sát Lệnh - Thời Gian Thực Thi 5.1 5.1.1 Thống Kê Lệnh - Khảo Sát Lệnh Test Case Tổng số lệnh thực thi chương trình test_case_1 7638 lệnh Trong đó: - Có 3242 lệnh loại R chiếm 42% tổng số lệnh - Có 3826 lệnh loại I chiếm 50% tổng số lệnh - Có 570 lệnh loại J chiếm 7% tổng số lệnh Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 12/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Hình 5: 5.1.2 Bảng Phân Tích Câu Lệnh Test Case Test Case Tổng số lệnh thực thi chương trình test_case_2 9083 lệnh Trong đó: - Có 3933 lệnh loại R chiếm 43% tổng số lệnh - Có 4463 lệnh loại I chiếm 49% tổng số lệnh - Có 687 lệnh loại J chiếm 7% tổng số lệnh Hình 6: 5.1.3 Bảng Phân Tích Câu Lệnh Test Case Test Case Tống số lệnh thực thi chương trình test_case_3 9175 lệnh Trong - Có 3969 lệnh R chiếm 43% tổng số lệnh - Có 4514 lệnh loại I chiếm 49% tổng số lệnh - Có 692 lệnh loại J chiếm 7% tổng số lệnh Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 13/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Hình 7: 5.1.4 Bảng Phân Tích Câu Lệnh Test Case Test Case Tống số lệnh thực thi chương trình test_case_4 7996 lệnh Trong - Có 3428 lệnh R chiếm 42% tổng số lệnh - Có 3965 lệnh loại I chiếm 49% tổng số lệnh - Có 603 lệnh loại J chiếm 7% tổng số lệnh Hình 8: 5.2 Bảng Phân Tích Câu Lệnh Test Case Thời Gian Thực Thi Cơng thức tính thời gian thực thi mơ hình single cycle xây dựng sau: Execution_T ime = CP I∗T otal_Instructions Clock_Rate Với CPI = - Hệ thống single cycle Clock_Rate = 3.4 GHz, Ta thu kết quả: Test Case Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Execution Time 2.25 µs 2.67 µs 2.7 µs 2.35 µs Trang 14/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Kết Luận Giải thuật Quick Sort giải thuật xếp phổ biến áp dụng nhiều mơn học Qua q trình nghiên cứu, tìm kiểu, kế thừa từ mơn học liên quan, nhóm em củng cố thêm kiến thức kiến trúc tập lệnh mips, kỹ phân tích giải thuật Cùng với đó, thơng qua báo cáo nhóm em cải thiện thêm kỹ làm việc nhóm, thảo luận phân chia công việc cho hiệu quả, tiến đến hoàn thiện, tiếp thu kiến thức từ môn học Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 15/16 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính TÀI LIỆU THAM KHẢO [1]: David A Patterson and John L Hennessy, Computer Organization and Design: The Hardware/Software Interface, Fifth edition,Morgan Kaufmann Publishers, 2017 [2]: Quick Sort - Geeksforgeeks [3]: Quick Sort - Wikipedia Báo cáo Bài tập lớn Kiến Trúc Máy Tính(CO2008) Trang 16/16 ... 44 , 16 , 3, 33 , 34 , 35 , 44 , 44 , 25 , 48 , 16 , 32 , 37 , 8, 33 ,30 , , 18 , 26 , , 37 , 40 , 30 , 50 , 32 , 5, 41 , 0, 32 , 12 , 33 , 22 , 14 , 34 , 1, 0, 41 , 45 ,4 8, 39 , 27 , 23 , 45 ... 1 64 241 -110 - 64 -158 -1010 66 -197 -52 158 2022 88 -192 344 -180 -201 -3 84 -42 2 333 48 8 -331 -7 372 37 331 -106 370 48 2 -159 265 -2 94 -49 5 359 44 8 297 53 -351 212 239 44 9 611 53 37 -118 249 ... 20 24 26 27 29 31 36 34 38 46 41 43 45 47 48 After Sorting: -1010 -49 5 -42 2 -3 84 -351 - 349 -331 -2 94 -277 -201 -197 -192 -180 -159 -158 -118 -110 -106 - 64 -52 -7 37 37 53 53 66 88 95 158 1 64 212

Ngày đăng: 28/11/2022, 23:22

Mục lục

    2 Giải Thuật Quick Sort

    2.2 Các Thức Hoạt Động

    2.3 Độ Phức Tạp Của Giải Thuật

    2.3.1 Thời Gian Thực Thi

    2.3.2 Không Gian Bộ Nhớ

    3 Hiện Thực Giải Thuật

    4 Hiện Thực Giải Thuật Sử Dụng Assembly

    5 Thống Kê Lệnh - Khảo Sát Lệnh - Thời Gian Thực Thi

    5.1 Thống Kê Lệnh - Khảo Sát Lệnh

    5.2 Thời Gian Thực Thi