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

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

35 4 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

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 Trần Thanh Bình SV thực hiện: Têên Điinnh Tiiếến Khhởởi Tp Hồ Chí Minh, Tháng 11/2022 MSSSV 200113355337 Trường Đại Học BáchKhoa Tp.Hồ Chí KhoaKhoaHọc & Kỹ Thuật MáyTính Minh MỤC LỤC 1Đề Bài 2Giải Thuật Quick Sort 2.1Giới Thiệu 2.2Các Thức Hoạt Đ 2.3Độ Phức Tạp Của 2.4Ưu Điển 2.5Nhược Điểm 3Hiện Thực Giải Thuật 4Hiện Thực Giải Thuật Sử Dụng Assembly 4.1Data Section 4.2Xây Dựng Functi 4.3Kết Quả Thống Kê Lệnh - Khảo Sát Lệnh - Thời Gian Thực Thi 12 5.1Thống 5.2Thời G Kết Luận Tài Liệu Tham Khảo cááo Bàài tậập lớớn Kiiếến Trraanng 1//16 Bááo Trúúc Mááy Tíínnhh((CCOO22000088) Trường Đại Học BáchKhoa Tp.Hồ Chí KhoaKhoaHọc & Kỹ Thuật MáyTính Minh Đề Bààii Đề 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ệiệ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 vận dụng cách rộng rãi q 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 2Thuật.2 tốnCácquickThứcsortHohoạtạtđộngĐộngdự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 Độ Phức Tạp Của Giải Thuật 2.3.1 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: n Giải thuật có độ hiệu cao xét mặt thời gian thực thi tính ổn định cááo Bàài tậập lớớn Kiiếến Trraanng 2//16 Bááo Trúúc Mááy Tíínnhh((CCOO22000088) Trường Đại Học BáchKhoa Tp.Hồ Chí KhoaKhoaHọc & Kỹ Thuật MáyTính Minh 2.3.2 Khơng Giaian Bộ 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 Điiể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 QuickSort() 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 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 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ả cááo Bàài tậập lớớn Kiiếến Trraanng 3//16 Bááo Trúúc Mááy Tíínnhh((CCOO22000088) Trường Đại Học BáchKhoa Tp.Hồ Chí KhoaKhoaHọc & Kỹ Thuật MáyTính Minh + 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++: 11 16 int Partition(int** array, int start, int end) { int pivot = array[end]; int partition_index = start;// Set partition index as start index for( i n t i = start; i

Ngày đăng: 05/12/2022, 06:24

w