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

18 4 0
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: SV thực hiện: ThS Trần Thanh Bình Tên Đinh Tiến Khởi Tp Hồ Chí Minh, Tháng 11/2022 MSSV 2013537 5.1 5.1.1 5.1.2 5.1.3 5.1.4 5.2 Đề Bài 2 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 3 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 10 4.3 Kết Quả 11 4.3.1 Test Case 11 4.3.2 Test Case 11 4.3.3 Test Case 12 4.3.4 Test Case 12 Thống Kê Lệnh - Khảo Sát Lệnh - Thời Gian Thực Thi 12 Thống Kê Lệnh - Khảo Sát Lệnh Test Case 12 Test Case 13 Test Case 13 Test Case 14 14 Thời Gian Thực Thi 15 Kết Luận Tài Liệu Tham Khảo16 12 Đề 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ínhin-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 hồn tồn hiệu 2.2 Các Thfíc Hoạt Động Thuật tố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 Độ Phfí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 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 hồn tồ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 tố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 Partition(): +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ướ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 Partition() 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 Partition() 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++: int Partition(int*array, int start, intend) { int pivot =array[end];//Set pivotaslast element int partition_index =start;//Set partitionindexasstartindex for(int i =start; iexitloop sll$t5,$t2, 2#getofset add$t5,$t5,$a1#getaddressofarray[i] lw$t6, 0($t5)#getcontentofarray[i] sle$t7,$t6,$t1#array[i]

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