1. Trang chủ
  2. » Luận Văn - Báo Cáo

BÁO cáo bài tập NHÓM PHÂN TÍCH THIẾT kế GIẢI THUẬT đề tài phân tích độ phức tạp của giải thuật sắp xếp quick sort

16 9 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

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 171,33 KB

Nội dung

TRƯỜNG ĐẠI HỌC GIAO THƠNG VẬN TẢI TP HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP NHĨM PHÂN TÍCH THIẾT KẾ GIẢI THUẬT Đề tài: Phân tích độ phức tạp giải thuật xếp Quick sort Ngành: CÔNG NGHỆ THÔNG TIN Chuyên ngành: CÔNG NGHỆ THÔNG TIN Giảng viên hướng dẫn : Trần Anh Tuấn Mơn học: Phân tích thiết kế giải thuật Mã học phần: 010112400301 Nhóm: 01 TP Hồ Chí Minh, 2021 DANH SÁCH THÀNH VIÊN: TRẦN KIM PHƯỚC NGUYỄN VIẾT PHÚ LÊ THÀNH TRUNG MSSV: 1951120124 MSSV: 1951120121 MSSV: 1951120157 MỤC LỤC: I Tổng quan đề tài II III IV V VI Cơ sở lý thuyết Quick sort gì? Thuật tốn phân đoạn (partition) Ý tưởng thuật toán Cách chọn phần tử làm pivot Phương pháp phân hoạch Giải thuật Quick sort Minh họa chương trình phân tích độ phức tạp thuật toán Kết luận Câu hỏi củng cố Tài liệu tham khảo 11 BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort I Tổng quan đề tài Bài toán xếp chắn khơng cịn xa lạ với chúng ta, tốn bắt gặp nhiều thực tế Ví dụ xếp danh sách lớp học, xếp sách, xếp tiền… Vậy tốn xếp gì? Bài tốn xếp xếp lại phần tử danh sách theo chiều tăng giảm dần theo tiêu chí phần tử danh sách.Ví dụ bạn xếp danh sách lớp học theo điểm trung bình từ cao đến thấp, sách theo kích cỡ từ nhỏ đến lớn, xếp tờ tiền theo mệnh giá từ thấp đến cao… Mục đích việc xếp giúp ta có nhìn tổng quan liệu mà ta có, dễ dàng tìm kiếm phần tử đứng tiêu chí Trong lập trình, xếp khơng đơn giản để tìm nhiều phần tử đứng đầu tiêu chí hay để có nhìn tổng quan liệu, xếp làm sở cho giải thuật nâng cao với hiệu suất cao Có nhiều thuật toán xếp sử dụng như: Merge sort, Selection sort, Quick sort, Bubble sort, Trong khuôn khổ đề tài giao, nhóm chúng em xin nghiên cứu trình bày giải thuật xếp Quick sort, thuật tốn có khà xếp với tốc độ cao hẳn so với thuật toán Insertion sort, Selection sort hay Bubble sort BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort II Cơ sở lý thuyết: Quick sort gì? Sắp xếp nhanh (Quick sort) hay xếp phân đoạn (Partition) là thuật toán xếp dựa kỹ thuật chia để trị, cụ thể ý tưởng là: chọn điểm làm chốt (gọi pivot), xếp phần tử bên trái chốt nhỏ chốt phần tử bên phải lớn chốt, sau xong ta dãy bên trái bên phải, áp dụng tương tự cách xếp cho dãy vừa tìm dãy phần tử Phần tử chọn làm chốt quan trọng, định thời gian thực thi thuật toán Phần tử chọn làm chốt tối ưu phần tử trung vị, phần tử làm cho số phần tử nhỏ dãy sấp xỉ số phần tử lớn dãy Tuy nhiên, việc tìm phần tử tốn kém, phải có thuật tốn tìm riêng, từ NHẬN XÉT CỦA GIÁO VIÊN: BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort làm giảm hiệu suất thuật tốn tìm kiếm nhanh, đó, để đơn giản, người ta thường sử dụng phần tử làm chốt Thuật tốn phân đoạn (Partition) Đặt pivot phần tử cuối dãy số Arr Chúng ta phần tử trái dãy số có số left, phần tử phải dãy số có số right (bỏ qua phần tử pivot) Khi left < right mà arr[left] > pivot arr[right] < pivot đổi chỗ hai phần tử left right Sau cùng, ta đổi chỗ hai phần tử left pivot cho Khi đó, phần tử left đứng vị trí chia dãy số làm đơi (bên trái bên phải) Ý tưởng thuật toán ● Chọn giá trị khóa v làm chốt (pivot) ● Phân hoạch dãy A[0]…A[n-1] thành hai mảng “bên trái” “bên phải” Mảng “bên trái” bao gồm phần tử có khóa nhỏ chốt, mảng “bên phải” bao gồm phần tử có khóa lớn oặc chốt ● Sắp xếp mảng “bên trái” mảng “bên phải” ● Sau xếp mảng “bên trái” mảng “bên phải” mảng cho xếp tất khóa mảng “bên trái” nhỏ khóa mảng “bên phải” ● Việc xếp mảng “bên trái” “bên phải” tiến hành phương pháp nói ● Một mảng gồm phần tử gồm nhiều phần tử có khóa dã có thứ tự ● ● ● ● ● ● Cách chọn phần tử làm pivot Chọn giá trị khóa lớn hai phần tử có khóa khác kể từ trái qua Nếu mảng gồm phần tử hay gồm nhiều phần tử có khóa khơng có chốt Chọn phần tử bên trái (phần tử mảng) Chọn phần tử bên phải (phần tử cuối mảng) Ngẫu nhiên phần tử (sử dụng hàm random mà ngơn ngữ lập trình cung cấp) Phần tử mảng Phương pháp phân hoạch BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort ● Để phân hoạch mảng, ta dùng hai “con nháy” L R L từ bên trái R từ bên phải ● Ta cho L chạy sang phải gặp phần tử có khóa lớn chốt ● Cho R chạy sang trái gặp phần tử có khóa nhỏ chốt ● Tại chỗ dừng L R L < R hốn vị A[L], A[R] ● Lặp lại trình dịch sang phải, sang trái hai “con nháy” L R L > R ● Khi L điểm phân hoạch, cụ thể A[L] phần tử mảng “bên phải” Giải thuật Quick sort ● Để xếp mảng A[i]…A[j] ta làm bước sau: − Xác định chốt mảng A[i]…A[j] − Phân hoạch mảng A[i]…A[j] cho thành hai mảng A[i]…A[k1] A[k]…A[j] − Sắp xếp mảng A[i]…A[k-1] đệ quy − Sắp xếp mảng A[k]…A[j] đệ quy ● Đệ quy dừng khơng cịn tìm thấy chốt BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort BAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sortBAO.cao.bai.tap.NHOM.PHAN.TICH.THIET.ke.GIAI.THUAT.de.tai.phan.tich.do.phuc.tap.cua.giai.thuat.sap.xep.quick.sort III Minh họa chương trình phân tích độ phức tạp thuật tốn Minh họa chương trình - Hàm phân hoạch int partition (int arr[], int low, int high) {     int pivot = arr[high];         int i = (low - 1);         for (int j = low; j 

Ngày đăng: 23/12/2023, 22:44

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w