(TIỂU LUẬN) 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 46 0
(TIỂU LUẬN) 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

Đ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

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: MỤC LỤC: I II III IV V VI TRẦN KIM PHƯỚC NGUYỄN VIẾT PHÚ LÊ THÀNH TRUNG Tổng quan đề tài Cơ sở lý thuyết Quick sort l Thuật toán p Ý tưởng thu Cách chọn p Phương phá Giải thuật Q Minh họa chương trình phân tí Kết luận Câu hỏi củng cố Tài liệu tham khảo 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 I 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ử AI 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: 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 toá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 ngồ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 ● ● ● ● ● ● ● ● Để 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 BI - 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: 01/12/2022, 09:35

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan