1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 12: Các thuật toán sắp xếp nhanh O(nlogn)

56 35 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 56
Dung lượng 671,76 KB

Nội dung

Bài giảng Cấu trúc dữ liệu và giải thuật trong C++ - Bài 12: Các thuật toán sắp xếp nhanh O(nlogn) cung cấp cho người học các kiến thức: Sắp xếp nhanh – Quick sort; sắp xếp trộn - Merge sort; vun đống – Heap sort. Mời các bạn cùng tham khảo.

Bài 12 Các thuật toán xếp nhanh O(nlogn) Sắp xếp nhanh – Quick sort Sắp xếp trộn - Merge sort Vun đống – Heap sort Sorting Chia trị - Divide and conquer Chia trị phương pháp thiết kế thuật toán theo kiểu:    Phân chia: Chia liệu đầu vào S toán thành tập rời S1 S2 Đệ qui: Giải toán với liệu vào tập S1 S2 Trị: kết hợp kết S1 S2 thành kết S Trường hợp sở cho thuật toán đệ qui tốn có kích thước Sorting Sắp xếp nhanh – Quick sort Ý tưởng (sử dụng phương pháp chia trị):   Thực phân hoạch dãy S cần thành dãy S1, S2, S3 Trong đó: • S2 có phần tử, tất phần tử dãy S3 > phần tử dãy S2 • Tất phần tử dãy S1 ≤ phần tử dãy S2 • Dãy S1, S3 rỗng Tiếp tục phân hoạch dãy S1 S3 độc lập theo nguyên tắc đến dãy cần thực phân hoạch có phần tử dừng lại Khi ta dãy phần tử Sorting Thuật toán xếp Quick sort Từ ý tưởng thuật tốn, ta dễ dàng xây dựng thuật toán xếp dạng đệ qui sau: Algorithm QuickSort (array A, i, j ); Input: Dãy phần tử A[i], ,A[j] hai số nguyên i, j Output: Dãy A[i], ,A[j] if i < j then Partition (A,i, j, k); //k lấy số phần tử làm S2 Quicksort (A,i, k-1); Quicksort (A,k+1, j); Sorting Ví dụ Sorting Vấn đề đặt phân hoạch dãy S nào? Sorting Thuật toán phân hoạch • Chọn phần tử dãy làm dãy S2 (phần tử gọi phần tử chốt - pivot) 12 32 32 12 32 12 32 12 • Thực chuyển phần tử có khóa ≤ phần tử chốt bên trái phần tử > phần tử chốt bên phải, sau đặt phần tử chốt vị trí dãy Sau phân hoạch Sorting Chú ý • Phần tử chốt chọn phần tử dãy - Phần tử chốt chọn phần tử đầu hoặc cuối dãy - Tốt chọn phần tử chốt mà làm cho việc phân hoạch thành hai dãy S1 S3 có số phần tử xấp xỉ Sorting Thuật tốn • Phân hoạch dãy gồm phần tử A[i], ,A[j] • • Chọn phần tử đầu dãy làm chốt Sử dụng biến left right: - left chạy từ trái sang phải i - right chạy từ phải sang trái j - Biến left tăng A[left].Key> A[i].Key left >right - Biến right giảm A[right].Key right - Cuối tráo đổi A[i] A[right] Sorting Ví dụ phân hoạch 10 24 i 21 54 j ? Sorting 10 Tạo đống Sorting 42 Tạo mảng biểu diễn heap • Theo tính chất mảng biểu diễn Heap phần tử từ n/2+1 đến n khơng cần điều kiện ràng buộc Vì ta thực coi phần tử thỏa mãn điều kiện heap • Ta thực hiện: - - - Bổ sung phần tử n/2 vào A[n/2+1], ,A[n] để mảng gồm A[n/2], ,A[n] thỏa mãn kiện Bổ sung phần tử n/2-1 vào A[n/2], ,A[n] để mảng gồm A[n/2-1] , ,A[n] thỏa mãn kiện Và tiếp tục làm bổ sung phần tử A[1] vào A[2], ,A[n] để mảng gồm A[1], ,A[n] thỏa mãn điều kiện Sorting 43 Ví dụ Cho mảng đây, biến đổi mảng để mảng thỏa mãn tính chất mảng biểu diễn heap 12 32 10 23 54 21 15 12 32 10 15 23 54 21 Cây tương ứng với mảng Sorting 44 Mô tả mảng: N=10 12 32 10 23 54 21 15 54 21 15 i=5 12 32 10 23 i=4 - Đổi chỗ A[5] A[10] A[5]

Ngày đăng: 14/10/2020, 22:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN