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: Các thuật toán sắp xếp - Nguyễn Mạnh Hiển (P2)

23 18 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

Bài giảng Cấu trúc dữ liệu và giải thuật: Các thuật toán sắp xếp (P2) có cấu trúc gồm 3 phần cung cấp cho người học các kiến thức: Sắp xếp vun đống (heap sort), sắp xếp trộn (merge sort), sắp xếp nhanh (quick sort). Mời các bạn cùng tham khảo.

Các thuật toán xếp (p2) (sorting algorithms) Nguyễn Mạnh Hiển Khoa Cơng nghệ thơng tin hiennm@tlu.edu.vn Các thuật tốn xếp - phần • Sắp xếp vun đống (heap sort) • Sắp xếp trộn (merge sort) • Sắp xếp nhanh (quick sort) Sắp xếp vun đống (heap sort) • Đống nhỏ (min-heap) − Xây dựng đống: O(N) − Thực N phép deleteMin để lấy phần tử nhỏ nhất: O(N log N) − Độ phức tạp tổng thể: O(N log N) − Yêu cầu thêm mảng để lưu trữ kết • Đống lớn (max-heap): − Lưu trữ phần tử bị xóa cuối vector đống Ví dụ với đống lớn (max-heap) Sau buildHeap() Sau deleteMax() Cài đặt xếp vun đống Sắp xếp trộn (merge sort) • Ban đầu có N phần tử chưa xếp • Chia N phần tử thành hai nửa • Sắp xếp đệ quy nửa dùng mergeSort − Trường hợp sở: N = (khơng cần xếp) • Trộn (merge) hai nửa (đã xếp) Ví dụ trộn (merge) 15 24 26 13 27 38 15 24 26 13 27 38 1 15 24 26 13 27 38 15 24 26 13 27 38 13 • Có N bước • Mỗi bước có phép so sánh có phần tử chèn vào mảng thứ ba  bước thời gian  Tổng thời gian O(N) Ví dụ xếp trộn (merge sort) 1 1 24 24 24 24 26 15 13 24 26 15 13 26 15 26 15 15 24 26 27 38 13 15 26 27 38 2 13 2 13 13 27 38 13 15 24 26 27 38 27 38 27 38 27 38 Cài đặt xếp trộn Phân tích xếp trộn • Gọi T(N) độ phức tạp (N số phần tử) • Ta có: − T(1) = − T(N) = 2T(N/2) + N − T(N) = 4T(N/4) + 2N − T(N) = 8T(N/8) + 3N − …… − T(N) = 2kT(N/2k) + k*N • Chọn k = log N: − T(N) = N T(1) + N log N = O(N log N) Sắp xếp nhanh (quick sort) • Cách tiếp cận chia để trị (tương tự xếp trộn) • Cho mảng S: Nếu |S|  kết thúc Chọn phần tử v  S làm chốt (pivot) Phân chia S – {v} (những phần tử lại S) thành hai nhóm: + S1 = { x | x  S – {v} x < v } + S2 = { x | x  S – {v} x > v } Trả { quicksort(S1), v, quicksort(S2) } • Các vấn đề cần xem xét: − Cách chọn chốt (bước 2) − Cách phân vùng (bước 3) Ví dụ xếp nhanh 81 13 31 43 92 57 65 75 26 Chọn chốt 13 81 43 31 57 65 92 75 26 Phân vùng 13 31 43 26 57 81 65 Gọi đệ quy 13 26 31 43 92 Gọi đệ quy 57 75 81 Hợp 13 26 75 31 43 57 65 75 81 92 92 Chọn chốt • Nên chọn chốt cho chia mảng thành hai phần • Chốt lý tưởng trung vị (median) (phần tử nằm sau xếp mảng)  tính tốn tốn kém! • Cách chọn lấy trung vị ba phần tử trái (left), phải (right) (center) mảng Ví dụ chọn chốt • Cho mảng S = { 6, 1, 4, 9, 0, 3, 5, 2, 7, } − left = S[left] = − right = S[right] = − center = (left + right)/2 = S[center] = • Chọn chốt: − chốt = trung vị S[left], S[right] S[center] − chốt = trung vị 6, − chốt = S[left] = Thuật toán phân vùng • Đầu vào: S = { 6, 1, 4, 9, 0, 3, 5, 2, 7, } • Xác định chốt (6) đổi chỗ với phần tử cuối (8) chốt • Dùng hai số i j : − i phần tử dịch phải − j phần tử cuối dịch trái i j chốt Thuật toán phân vùng (tiếp) • Trong i < j : − Dịch i sang phải đến tìm thấy số lớn chốt − Dịch j sang trái đến tìm thấy số nhỏ chốt − Nếu i < j đổi chỗ S[i] S[j] • Đổi chỗ S[i] chốt Ví dụ thuật tốn phân vùng i j chốt dịch đổi chỗ dịch đổi chỗ dịch i j chốt i j chốt 9 i j chốt i j chốt i chốt 9 j đổi chỗ S[i] chốt j i chốt i j cắt chéo Xử lý mảng nhỏ • Đối với mảng nhỏ (ví dụ, N < 20): − Sắp xếp nhanh dùng đệ quy  nhiều thời gian xếp mảng nhỏ − Sắp xếp chèn nhanh xếp nhanh • Sẽ cài đặt theo kiểu lai ghép: − Ban đầu dùng xếp nhanh − Sau chuyển sang xếp chèn kích thước mảng trở nên nhỏ (ví dụ, N < 20) Cài đặt xếp nhanh Hàm chọn chốt Hàm xếp nhanh Độ phức tạp xếp nhanh (xem chứng minh sách) • Trường hợp trung bình: O(N log N) • Trường hợp tồi (chốt phần tử nhỏ nhất): O(N2) .. .Các thuật tốn xếp - phần • Sắp xếp vun đống (heap sort) • Sắp xếp trộn (merge sort) • Sắp xếp nhanh (quick sort) Sắp xếp vun đống (heap sort) • Đống nhỏ (min-heap) − Xây dựng... dụ, N < 20): − Sắp xếp nhanh dùng đệ quy  nhiều thời gian xếp mảng nhỏ − Sắp xếp chèn nhanh xếp nhanh • Sẽ cài đặt theo kiểu lai ghép: − Ban đầu dùng xếp nhanh − Sau chuyển sang xếp chèn kích... (max-heap): − Lưu trữ phần tử bị xóa cuối vector đống Ví dụ với đống lớn (max-heap) Sau buildHeap() Sau deleteMax() Cài đặt xếp vun đống Sắp xếp trộn (merge sort) • Ban đầu có N phần tử chưa xếp

Ngày đăng: 21/05/2021, 13:40

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN