Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
385,37 KB
Nội dung
ĐẠ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 TTrần rần Thanh Bìn Bìnhh SV thực hiện: Tên Đinh Tiến Khởi MSSV 2013537 Tp Hồ Chí Minh, Tháng 11/2022 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat 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 Thuật Quick Sort 2.1 Giới Thiệu Thiệu 2.2 Các Thức Hoạt Động Động 2.3 Độ Phức Tạp Tạp Của Giải Thuật Thuật 2.3.1 Thời Gian Thực Thực Thi 2.3.2 Không Gian Gian Bộ Nhớ 2.4 Ưu Điển 2.5 Nhược Điểm Điểm Hiện Thực Giải Thuật Thuật Hiện Thực Giải Thuật Thuật Sử Dụng Assem Assembly bly 4.1 Data Section Section 4.2 Xây Dựng Dựng FFunction unction 4.2.1 Hàm Print Print 4.2.2 Hàm Swap 4.2.3 Hàm Partition 4.2.4 Hàm Quick_Sort Quick_Sort 4.2.5 Hàm Main 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 Lệnh - Khảo Sát Lệnh Lệnh - Thời Gian Thực Thực Thi Thi 5.1 Thống Kê Kê Lệnh - Khảo Khảo Sát Lệnh 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 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 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat 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 Giải ải Thuậ Thuậtt Qu Quic ickk So Sort rt 2.1 2.1 Gi Giới ới Th Thiệ iệuu Giải thuật Quick Sort giải thuật xếp mang tính in-place tính in-place algorithm, được algorithm, được 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 toá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 (Divide-and-conquer algorithm 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áccquick Th Thức ức Ho ạtđộng Độ Động ng Thuật toán sortHoạt hoạt 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) pivot) + Lựa chọn phần tử ngẫu nhân - tối ưu việc tránh worst-cas worst-case e 2.3 Độ Phức Tạp Của Giải Thuật Thuật 2.3.1 2.3 Thời Thời Gian Gian Thực 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: n Giải thuật 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 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat 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.3.22 Khơn Khôngg G Gia iann Bộ Bộ Nhớ Nhớ Không gian nhớ mà giải thuật xử dụng đánh sau: + Average Case: log n + Worst Case: n 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 2.5 Nhược hược Đi Điểm ể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 Hiện ện Th Thực ực Gi Giải ải Th Thuậ uậtt 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() hiện thực thao tác đệ quy cho sub-array - Ý tưởng hàm P artiti artition on(): + 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 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 và giá trị pivot gán ban đầu Nếu điều kiện xảy ra, ta tiến hành hố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 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat 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 artiti artition on() 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 artiti artition on() 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( Partition(int int* * array, array, int start, start, int int end end) ) { end]; ]; // Set pivot pivot as last element element int pivot = array[ array[end start; ; // Set partition partition ind index ex as sta start rt ind index ex int partition_ partition_index index = start for(int for (int i = start; start; i< i