Toán tin vuotlen.com

Đống (Heap)

Cấu trúc dữ liệu Đống (Heap) là một cấu trúc dữ liệu cây nhị phân đặc biệt, thường được sử dụng để triển khai hàng đợi ưu tiên (priority queue). Đối với Đống, có hai loại chính là Đống tối đa (max heap) và Đống tối thiểu (min heap), phụ thuộc vào thứ tự giá trị của các nút.

Cấu trúc của Đống

Đống được biểu diễn dưới dạng cây nhị phân có các đặc điểm sau:

  1. Cây nhị phân đầy đủ (complete binary tree): Các nút được sắp xếp từ trên xuống dưới, từ trái sang phải, và mọi mức (level) của cây (trừ có thể là mức cuối cùng) được đầy đủ.

  2. Điều kiện Đống (Heap property):

    • Đống tối đa (max heap): Giá trị của nút cha luôn lớn hơn hoặc bằng giá trị của các nút con.
    • Đống tối thiểu (min heap): Giá trị của nút cha luôn nhỏ hơn hoặc bằng giá trị của các nút con.

Thao tác cơ bản trên Đống

Các thao tác cơ bản trên Đống bao gồm:

  1. Thêm phần tử (insert):

    • Thêm phần tử mới vào vị trí cuối cùng của cây nhị phân.
    • Sau đó, điều chỉnh lại Đống bằng việc sử dụng phép đổi chỗ (heapify up) để đảm bảo cây vẫn thỏa mãn điều kiện Đống.
  2. Xóa phần tử gốc (remove root):

    • Loại bỏ phần tử gốc của Đống (là phần tử có giá trị cao nhất trong max heap hoặc thấp nhất trong min heap).
    • Thay thế phần tử gốc bằng phần tử cuối cùng của cây nhị phân.
    • Sau đó, điều chỉnh lại Đống bằng phép đổi chỗ (heapify down) để tái cân bằng cây và duy trì điều kiện Đống.
  3. Truy xuất phần tử gốc (peek root):

    • Truy xuất giá trị của phần tử gốc mà không loại bỏ nó khỏi Đống.

Ứng dụng của Đống

Đống được sử dụng trong nhiều ứng dụng quan trọng như:

Tóm lại, Đống là một cấu trúc dữ liệu hiệu quả cho việc quản lý ưu tiên và thực hiện các thao tác cơ bản như thêm, xóa, và truy xuất phần tử với độ phức tạp thời gian logarit.