Đống (cấu trúc dữ liệu)

Trong khoa học máy tính, đống (tiếng Anh: heap) là một cấu trúc dữ liệu dựa trên cây thỏa mãn tính chất đống: nếu B là nút con của A thì khóa(A)≥khóa(B). Một hệ quả của tính chất này là khóa lớn nhất luôn nằm ở nút gốc. Do đó một đống như vậy thường được gọi là max-heap. Nếu mọi phép so sánh bị đảo ngược khiến cho khóa nhỏ nhất luôn nằm ở nút gốc thì đống đó gọi là min-heap. Không có hạn chế nào về số lượng nút con của mỗi nút trong đống nhưng thông thường mỗi nút có không quá hai nút con. Đống là một cách thực hiện kiểu dữ liệu trừu tượng mang tên hàng đợi ưu tiên. Đống có vai trò quan trọng trong nhiều thuật toán cho đồ thị chẳng hạn như thuật toán Dijkstra, hay thuật toán sắp xếp heapsort.

Không nên nhầm lẫn cấu trúc dữ liệu đống với đống thường được dùng cho bộ nhớ cấp phát động. Thuật ngữ này ban đầu chỉ được dùng cho cấu trúc dữ liệu, nhưng sau này cũng được dùng để chỉ các vùng bộ nhớ cấp phát động.

Các thao tác thường gặp trên đống là:
 tìm-max (tìm-min): tìm khóa lớn nhất trong max-heap (tìm khóa nhỏ nhất trong đống-min).
 xóa-max (xóa-min): xóa nút gốc của max-heap (min-heap)
 tăng-khóa (giảm-khóa): thay đổi giá trị một khóa trong max-heap (min-heap)
 chèn: chèn thêm một khóa mới vào đống
 hợp: hợp hai đống lại thành một đống mới chứa tất cả các khóa của cả hai

Các biến thể

 Đống nhị phân
 Đống nhị thức
 Đống Fibonacci
 Đống ghép
 Đống ghép dùng hạng
 Đống mềm

So sánh các biến thể

Bảng sau đây thống kê độ phức tạp tính toán của các thao tác trên đống. Tất cả các mục đều là thời gian xấu nhất ngoại trừ các mục được đánh dấu sao là thời gian trả dần. Tên hàm được đặt theo đống-max.

(*)Thời gian trả dần
(**)n là kích thước của đống lớn hơn

Ứng dụng

Cấu trúc dữ liệu đống có rất nhiều ứng dụng.
 Heapsort: Một trong những phương pháp sắp xếp tại chỗ tốt nhất
 Thuật toán lựa chọn: có thể sử dụng đống để tìm phần tử lớn nhất, nhỏ nhất, trung vị, phần tử lớn thứ k, trong thời gian tuyến tính.
 Thuật toán cho đồ thị: nhiều thuật toán cho đồ thị sử dụng cấu trúc dữ liệu đống chẳng hạn như thuật toán Dijkstra, hay thuật toán Prim.

Xem thêm

 Ngăn xếp
 Thuật toán sắp xếp

Ghi chú

Đống (cấu trúc)