2009-04-16 41 views
27

Một đống là một cấu trúc dữ liệu cây nơi các cấp cao hơn của cây luôn chứa các giá trị lớn hơn (hoặc nhỏ hơn, nếu nó được thiết lập theo cách đó) so với các mức thấp hơn. "Heap" là một loạt RAM miễn phí mà một chương trình có sẵn để phân bổ động. Cả hai đều được gọi là "đống", nhưng người ta phải làm gì với người khác?Mối quan hệ giữa "đống" và "đống" là gì?

+0

Bài đăng liên quan [ở đây] (https://stackoverflow.com/q/1699057/465053) và [tại đây] (https://stackoverflow.com/q/660855/465053) – RBT

Trả lời

23

Không có gì nhiều, phải trung thực. Tôi sẽ tưởng tượng rằng từ heap được thực hiện đơn giản với cách sử dụng thường ngày (phi kỹ thuật) và áp dụng cho hai khái niệm này riêng lẻ như là các phép so sánh tương đối tốt.

Trong trường hợp đầu tiên (cấu trúc dữ liệu cây có nghĩa), mô tả heap là thích hợp nhất vì "lớn hơn" đối tượng được đặt cao hơn trong cây (trong đó "lớn hơn" được xác định bởi một chức năng khóa tùy ý) có một loại chồng chất của các đối tượng nhỏ hơn trên đầu trang của những người lớn hơn (hoặc lớn hơn trên đầu trang, tùy thuộc vào cách bạn nghĩ về nó). Đây chỉ là cách tôi giải thích nó; bất cứ ai lần đầu tiên áp dụng tên heap vào cấu trúc dữ liệu này nghĩ rằng đó là một tên thích hợp trong tâm trí của mình, và nó chỉ bị mắc kẹt.

Trong trường hợp thứ hai (khối RAM), tên của heap có thể hiển nhiên hơn một chút. "Heap" chỉ là "một bộ sưu tập lớn các thứ theo thứ tự tùy ý cao" ở đây, dường như áp dụng cũng như sử dụng phổ biến vì nó phân bổ động các phần bộ nhớ.

Trong mọi trường hợp, tôi sẽ không lo lắng về những điểm tương đồng ẩn dụ trừu tượng mà bạn có thể vẽ giữa hai ý tưởng. Đối xử với họ một cách hoàn toàn riêng biệt và bạn sẽ không đi sai trong mọi tình huống.

Edit: Dường như cây dựa trên cấu trúc dữ liệu thể đã lấy tên từ heap của đại số trừu tượng, như là một cách hợp lý phổ biến trong khoa học máy tính. Tuy nhiên, tôi không muốn xác nhận hoặc phủ nhận điều này ...

2

Họ ... có cùng tên! Đó là nó.

1

Không có gì. Không có mối quan hệ.

5

Cả hai đều có cùng tên, đó là về nó.
Có 'heap' không bao giờ được sắp xếp như một cấu trúc dữ liệu heap thực tế.

2

Mối quan hệ duy nhất giữa hai là tên "đống".

0

Từ answers.com

Heap: Một nhóm các nhà điều đặt hoặc ném, chồng lên nhau: một đống giẻ rách bẩn nằm trong góc.

Đó chỉ là đặt tên cơ bản do hình ảnh khái niệm về việc ném đồ vật theo cách không sắp xếp theo thứ tự. Như các áp phích khác chỉ ra, heap không được tổ chức như một cấu trúc dữ liệu heap. Điều đó phụ thuộc vào các thói quen cấp phát bộ nhớ trong thư viện hệ thống của bạn (ví dụ: kiểm tra xem malloc hoạt động như thế nào)

3

Cơ sở hạ tầng (datastructure) được gọi như vậy bởi vì nếu bạn vẽ nó trông giống như một đống. Heap (bộ nhớ) được gọi là một đống bởi vì nó được tổ chức bằng cách nào đó nhưng không đầy đủ. Bạn tích lũy dữ liệu trên một đống nhưng bạn có thể có lỗ hổng trong nó và bất thường. Nó như thể bạn đặt giấy tờ trên một đống. Đôi khi bạn xóa một từ phía dưới. Điều này có một hình thức của một đống, tức là bằng cách nào đó có tổ chức nhưng không đầy đủ.

+0

"nếu bạn vẽ nó trông giống như một đống "-> ý nghĩa của danh từ vị ngữ" ... nó trông giống như một đống "? –

1

Để làm phức tạp hơn câu hỏi: trên một số hệ thống (ví dụ: Microsoft Windows), có nhiều "đống" trong ý nghĩa phân bổ bộ nhớ. "Heap" chỉ đơn thuần là the default heap. Nhưng nếu bạn gọi số HeapAlloc(), bạn có thể chọn cấp phát bộ nhớ nào bạn muốn phân bổ phụ.

Các vấn đề liên quan