Sự khác biệt giữa cấu trúc dữ liệu trừu tượng và cụ thể là gì?


17

Tôi nghĩ mảng kết hợp (ví dụ bản đồ hoặc từ điển) và bảng băm là cùng một khái niệm, cho đến khi tôi thấy trong Wikipedia rằng

Đối với các từ điển có số lượng ràng buộc rất nhỏ, có thể có ý nghĩa khi triển khai từ điển bằng cách sử dụng danh sách liên kết, danh sách liên kết. ...

Việc thực hiện mục đích chung được sử dụng thường xuyên nhất của một mảng kết hợp là với bảng băm: một mảng các liên kết, cùng với hàm băm ánh xạ mỗi khóa có thể thành một chỉ mục mảng. ...

Từ điển cũng có thể được lưu trữ trong các cây tìm kiếm nhị phân hoặc trong các cấu trúc dữ liệu chuyên biệt cho một loại khóa cụ thể như cây cơ số, thử, mảng Judy hoặc cây van Emde Boas. ...

Vì vậy, tôi nghĩ rằng, vấn đề của tôi nằm ở chỗ tôi không biết rằng mảng kết hợp (tức là bản đồ hoặc từ điển) là một kiểu dữ liệu trừu tượng và bảng băm là một cấu trúc dữ liệu cụ thể và các cấu trúc dữ liệu cụ thể khác nhau có thể được sử dụng để thực hiện cùng loại dữ liệu trừu tượng.

Câu hỏi của tôi sẽ là

  • Sự khác biệt và mối quan hệ giữa cấu trúc dữ liệu trừu tượng và cấu trúc dữ liệu cụ thể là gì?

  • Những ví dụ nào cho mỗi người trong số họ (cấu trúc dữ liệu trừu tượng và cụ thể)? Càng nhiều càng tốt.

  • Có một danh sách các cấu trúc dữ liệu cụ thể nào có thể được sử dụng để thực hiện cấu trúc dữ liệu trừu tượng nào không? Nó sẽ là tốt đẹp để có một.

Câu trả lời:


17

Kiểu dữ liệu trừu tượng (ADT) về cơ bản là một API và cấu trúc dữ liệu cụ thể cung cấp việc triển khai API đó. Đối với một ADT nhất định, thường có một số lựa chọn khác nhau về cấu trúc dữ liệu cụ thể hỗ trợ các hoạt động truy vấn và cập nhật được mô tả bởi ADT. Mỗi cấu trúc dữ liệu cụ thể cho một ADT nhất định phải hỗ trợ tất cả các hoạt động được mô tả bởi ADT (có thể với một số xác suất thành công trong trường hợp cấu trúc ngẫu nhiên), nhưng mỗi cấu trúc cụ thể có thể đảm bảo thời gian chạy khác nhau của mỗi hoạt động. Việc lựa chọn cấu trúc dữ liệu cụ thể nào để thực hiện cho một ADT nhất định thường phụ thuộc vào mức độ ưu tiên của hiệu quả của từng thao tác (bao gồm khởi tạo cấu trúc) và mức độ phức tạp của việc triển khai và duy trì các loại dữ liệu khác nhau.

Có quá nhiều ADT và các cấu trúc cụ thể tương ứng để liệt kê trong một câu trả lời, nhưng đây là một vài ví dụ:

  • Find(x)xxInsert(x)Delete(x)

  • Findsuccessor(x)SxtSs<t

  • Một ưu tiên Queue là một ADT mà yêu cầu insertdelete-minhoạt động (và đôi khi các hoạt động khác là tốt, chẳng hạn như find-min increase-keyhay delete-key). Các cấu trúc dữ liệu thực hiện hàng đợi ưu tiên ADT bao gồm:

    1. một danh sách liên kết chưa được sắp xếp, có nhanh insertnhưng chậm delete-min.

    2. một danh sách liên kết được sắp xếp có nhanh delete-minnhưng chậminsert

    3. insertdelete-minsort(n)

    4. một đống nhị phân có logarit insertdelete-min, và khởi tạo thời gian tuyến tính.

    5. Ngoài ra còn có các biến thể khác của việc thực hiện heap .

  • stabbing(x)x


9

Kiểu dữ liệu trừu tượng mô tả những hoạt động có sẵn và những luật họ tuân theo. Ví dụ: một từ điển cho phép bạn lưu trữ một giá trị theo một khóa nhất định và truy xuất một giá trị cho một khóa, và hứa rằng nếu trước tiên bạn lưu trữ một giá trị và sau đó truy xuất nó với cùng một khóa, bạn sẽ nhận được giá trị mà bạn đã lưu trữ trở lại. Một ngăn xếp có hoạt động đẩy và pop.

Kiểu dữ liệu cụ thể cho biết các hoạt động này được thực hiện như thế nào .


Cảm ơn! Có danh sách cấu trúc dữ liệu phổ biến nào là cái nào, trừu tượng hay cụ thể không?
Tim

Không phải là một danh sách chung, nhưng bạn có thể muốn xem xlinux.nist.gov/dads
Alexey Romanov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.