KTMT_Assignment_221

December 1, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download KTMT_Assignment_221...

Description

 

ĐẠ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

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

1   Đề Bài  . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2   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   . . . . . . . . . . . . . . . . . . . . . 3   Hiện Thực Giải Thuật Thuật   . . . . . . . . . . . . . . . . . . . 4   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 1   . . . . . . . . . . . . . . . . 4.3.2   Test Case 2   . . . . . . . . . . . . . . . . 4.3.3   Test Case 3   . . . . . . . . . . . . . . . . 4.3.4   Test Case 4   . . . . . . . . . . . . . . . . 5   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 1   . . . . . . . . . . . . . . . . 5.1.2   Test Case 2   . . . . . . . . . . . . . . . . 5.1.3   Test Case 3   . . . . . . . . . . . . . . . . 5.1.4   Test Case 4   . . . . . . . . . . . . . . . . 5.2   Thời Gian Gian Thực Thi   . . . . . . . . . . . . . . . . 6   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 2 2 2 3 3 3 3 5 5 5 5 6 6 8 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

1 Đề Bài Đề Tài 04: Sắp xếp chuỗi

Cho một chuỗi số nguyên 50 phần tử. Sử dụng hợp ngữ assembly MIPS, viết thủ tục sắp xếp chuỗi đó theo thứ tự tăng dần theo giải thuật quick sort. Yêu cầu xuất ra từng bước trong quá trình demo.

2 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 là một giải thuật sắp xếp mang tính in-place tính  in-place algorithm, được algorithm,  được phát triển bởi nhà nghiên cứu về khoa học máy tính Tony Hoare vào năm 1959 và được phát hành chính thức vào năm 1961. Ngày nay thuật toán này vẫn còn được vận dụng một cách rộng rãi trong quá trình sắp xếp theo thông tin trích dẫn từ wikipedia. Quick sort là một giải thuật chia để trị (Divide-and-conquer (Divide-and-conquer algorithm algorithm). ). Tên gọi quick sort ám chỉ việc giải thuật quick sort có độ hiệu quả về mặt thời gian thực thi và bộ nhớ tính theo trung bình các trường hợp có thể xảy ra. Trường hợp worst case xảy ra khi mảng đã được sắp xếp sẵn nhưng nhìn chung tính ổn định của giải thuật là hoàn toàn hiệu quả.

2.2 Cá Cáccquick Th Thức ức Ho ạtđộng Độ Động ng Thuật toán sortHoạt hoạt dựa trên việc lựa chọn một phần tử vách ngăn (pivot) từ mảng

và phân vùng các phần tử trong mảng thành 2 vùng riêng biệt (sub-array) tùy thuộc vào chúng lớn hơn hay nhỏ hơn phần tử pivot. Sau đó, các vùng đã được phân chia tiếp tục thực hiện thao tác trên dựa trên kỹ thuật đệ quy cho đến khi các phần tử mảng có số lượng nhỏ nhất hoặc mảng đã được sắp 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 các sub-array tạo thành một mảng được sắp xếp. Bên cạnh đó, việc lựa chọn pivot trong mảng tồn tại rất nhiều phương thức khác nhau. Do đó, việc lựa chọn pivot có thể ảnh hưởng đến thời gian thực thi cũng như né tránh trường hợp worst-case có thể xảy ra. 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ử ở giữa (median as pivot) pivot) + Lựa chọn phần tử ngẫu nhân - có thể 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 .1 Thời Thời Gian Gian Thực Thực Thi Thời gian thực thi của giải thuật quick sort được đánh giá như sau: + Best Case:   n log n + Average Case:   n log n + Worst Case:   n

2

Giải thuật thuật có độ hiệu quả cao khi xét về mặt thời gian thực thi vì 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.3.22 Khôn Khôngg G Gia iann Bộ Bộ Nhớ Nhớ Không gian bộ nhớ mà giải thuật xử dụng được đánh giá như sau: + Average Case:  log n + Worst Case:   n

2

Khi so sánh với các giải thuật khác, Quick Sort sử dụng bộ nhớ ở mức vừa phải, nhưng khi xét khía cạnh một giải thuật đệ quy, thuật toán sẽ ít khi tối ưu được vùng nhớ.

2.4 Ưu Điển Thời gian thực thi trung bình được đánh giá là khá nhanh. Do đó, quick sort được sử dụng để xây dựng các thư viện có sẵn trong các ngôn ngữ lập trình 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 nhưng tính ổn định của thuật toán chưa cao. Phụ thuộc hoàn toàn vào giải thuật lựa chọn pivot. Từ đó, có thể tránh được trường hợp worst case.

3 Hi Hiện ện Th Thực ực Gi Giải ải Th Thuậ uậtt Sau khi nghiên cứu các phương pháp lựa chọn pivot cho giải thuật. Nhóm em quyết định lựa chọn phần tử cuối cùng làm pivot Để hiện 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í chính xác của pivot và phân vùng mảng để thực hiện cho các bước đệ quy tiếp theo ; Hàm  swap()  có sẵn trong thư viện của các ngôn ngữ lập trình; Và hàm  QuickSort()  hiện thực thao tác đệ quy cho các sub-array kế tiếp. - Ý tưởng hàm   P artiti artition on(): + Hàm nhận 3 tham số đầu vào bao gồm địa chỉ phần tử đầu, vị trí phần tử đầu và vị trí phần tử cuối của array hoặc sub-array. + Sau khi hàm thực hiện thành công và kết thúc, hàm trả về vị trí chính xác của pivot trong array hoặc sub-array đồng thời phân vùng array hoặc sub-array thành 2 vùng lớn hơn và nhỏ hơn pivot cho công đoạn đệ quy tiếp theo. + Bước 1: Gán giá trị pivot cho phần tử cuối cùng, pivotIndex bằng vị trí bắt đầu của array hoặc sub-array sub-array.. + Bước 2: Sử dụng vòng lặp với con chạy  i  chạy từ vị trí bắt đầu - start đến vị trí kết thúc của array hoặc sub-array - end. Trong vòng lặp ta tiến hành so sáng giá trị phần tử của mảng tại vị trí   i và giá trị pivot được gán ban đầu. Nếu điều kiện đúng xảy ra, ta tiến hành hoán đổi giá trị của vị trí   i  cho vị trí  pivotIndex  sau đó tăng giá trị pivotIndex lên 1. + Bước 3: Hoán đổi giá của pivot ở vị trí cuối cùng cho giá trị phần tử tại vị trí pivotIndex và trả về giá trị  pivotIndex - Ý tưởng hàm  QuickSort(): + Nhận 3 tham số đầu vào bao gồm địa chỉ đầu, vị trí đầu và vị trí cuối của array hoặc sub-array. Hàm không có giá trị trả về 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 giữa vị trí phần tử đầu và phần tử cuối. Nếu điều kiện đưa ra thỏa mãn, gọi hàm   P artiti artition on()  với các tham số đầu vào tương ứng để nhận về giá trị của pivot đầu. + Bước 2: Tiến hành gọi đệ quy với 2 phân vùng vừa được chia từ hàm   P artiti artition on().

Hình 1:

 Sơ Đồ Quick Sort Với Pivot Đầu Tiên

Sau khi nghiên cứu về cơ chế của giải thuật, tiến hành hiện thực các phương thức sử dụng ngôn ngữ cấp cao, đơn cử là C++: 1

6

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
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF