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 19 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

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]

(1)

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

Nguyễn Mạnh Hiển

(2)

Hàng đợi ưu tiên

• Chèn (insert)

− Thời gian O(log N)

(3)

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

• Dùng danh sách liên kết: − insert thời gian O(1)

− deleteMin thời gian O(N) • Dùng nhị phân tìm kiếm:

− insert deleteMin thời gian O(log N)

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

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

(4)

Đống nhị phân

• Gọi tắt đống

(5)

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

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

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

Mức có 20 nút

Mức có 21 nút

Mức có 22 nút

(6)

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

Lưu trữ phần tử mức vào vector v • Cha v[k] = v[k/2]

• Con trái v[k] = v[2k]

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

(7)

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

• Với nút X đống (trừ nút gốc), giá trị nút cha X nhỏ giá trị nút X • Suy ra:

− Phần tử nhỏ đống nằm gốc

− Khơng có thứ tự nút một nút

0

3 2

(8)(9)

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

template <typename T> // T 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ỏ (ở gốc) void insert(const T & x); // chèn x vào đống

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

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

vector<T> array; // vector chứa phần tử void buildHeap(); // xem slide phía sau

(10)

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

w