1. Trang chủ
  2. » Địa lí lớp 6

Bài giảng Cấu trúc dữ liệu và giải thuật: Hàng đợi ưu tiên - Phan Mạnh Hiển (2020)

10 20 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 826,77 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

− Tuy nhiên, cây nhị phân tìm kiếm quá phức tạp cho yêu cầu đơn giản hơn của hàng đợi ưu tiên. • Đống nhị phân (binary heap)[r]

Trang 1

Hàng đợi ưu tiên (Priority Queues)

Nguyễn Mạnh Hiển

hiennm@tlu.edu.vn

Trang 2

Hàng đợi ưu tiên

• Chèn (insert)

− Thời gian O(log N)

• Xóa phần tử nhỏ nhất (deleteMin)

− Thời gian O(log N)

Trang 3

Cài đặt hàng đợi ưu tiên

• Dùng danh sách liên kết:

− insert mất thời gian O(1)

− deleteMin mất thời gian O(N)

• Dùng cây nhị phân tìm kiếm:

− insert và deleteMin mất thời gian O(log N)

− Tuy nhiên, cây nhị phân tìm kiếm quá phức tạp cho yêu cầu đơn giản hơn của hàng đợi ưu tiên

• Đống nhị phân (binary heap)

− Là cách cài đặt phổ biến của hàng đợi ưu tiên

− insert và deleteMin mất thời gian O(log N)

Trang 4

Đống nhị phân

• Gọi tắt là đống

• Thỏa mãn hai tính chất:

1 Là cây nhị phân đầy đủ

2 Tính chất thứ tự đống

Trang 5

Cây nhị phân đầy đủ

• Là cây nhị phân với tất cả các mức (trừ mức dưới cùng) đã được lấp đầy các nút từ trái sang phải

• Số nút N  20 + 21 + + 2h–1 + 1 = 2h  h  log N

Mức 0 có 20 nút

Mức 1 có 21 nút

Mức 2 có 22 nút

Mức h có ít nhất 1 nút (h là chiều cao của cây)

Trang 6

Cài đặt cây nhị phân đầy đủ

Lưu trữ các phần tử lần lượt từng mức vào vector v

• Cha của v[k] = v[k/2]

• Con trái của v[k] = v[2k]

• Con phải của v[k] = v[2k + 1]

vector v

Trang 7

Tính chất thứ tự đống

• Với mọi nút X trên đống (trừ nút gốc), giá trị trong nút cha của X nhỏ hơn hoặc bằng giá trị trong nút X

• Suy ra:

− Phần tử nhỏ nhất trên đống nằm ở gốc

− Không có thứ tự nào giữa các nút con của cùng một nút

0

4 5

Trang 8

Cây nào là đống?

Trang 9

Cài đặt hàng đợi ưu tiên trong C++

template <typename T> // T là kiểu phần tử

class BinaryHeap {

public:

BinaryHeap(int capacity = 100);

BinaryHeap(const vector<T> & elems);

const T & findMin(); // tìm phần tử nhỏ nhất (ở gốc) void insert(const T & x); // chèn x vào đống

void deleteMin(); // xóa phần tử nhỏ nhất (ở gốc) private:

int currentSize; // số phần tử hiện có

vector<T> array; // vector chứa các phần tử

void buildHeap(); // xem các slide phía sau

void percolateDown(int hole); // xem các slide phía sau };

Trang 10

Chèn vào đống: insert(14)

Ngày đăng: 11/03/2021, 09:45

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w