Чим відрізняються абстрактні та конкретні структури даних?


17

Я думав, що асоціативний масив (тобто карта чи словник) та хеширована таблиця були однаковою концепцією, поки я не побачив у Вікіпедії, що

Для словників з дуже малою кількістю прив’язок може бути доцільним реалізувати словник за допомогою списку асоціацій, пов'язаного списку прив’язок. ...

Найчастіше реалізація асоціативного масиву загального призначення - це хеш-таблиця: масив прив’язок разом із хеш-функцією, яка відображає кожну можливу клавішу в індекс масиву. ...

Словники також можуть зберігатися у двійкових деревах пошуку або в структурах даних, спеціалізованих для певного типу ключів, таких як дерева радіації, спроби, масиви Джуді або дерева Ван Емде Боаса. ...

Отже, я думаю, моя проблема полягає в тому, що я не знаю, що асоціативний масив (тобто карта або словник) - це абстрактний тип даних, а таблиця хешування - конкретна структура даних, і різні конкретні структури даних можуть бути використані для реалізації той же абстрактний тип даних.

Мої запитання були б

  • У чому різниця та співвідношення між абстрактними структурами даних та конкретними структурами даних?

  • Які приклади є для кожного з них (абстрактні та конкретні структури даних)? Чим більше, тим краще.

  • Чи є перелік, які конкретні структури даних можуть бути використані для реалізації яких абстрактних структур даних? Було б непогано мати.

Відповіді:


17

Абстрактний тип даних (ADT) - це по суті API, а конкретна структура даних забезпечує реалізацію цього API. Для даного ADT часто існує кілька різних варіантів конкретних структур даних, які підтримують операції запиту та оновлення, описані ADT. Кожна конкретна структура даних для даної ADT повинна підтримувати всі операції, описані ADT (можливо, з певною вірогідністю успіху у випадку рандомізованих структур), але кожна конкретна структура може давати різні гарантії часу виконання кожної операції. Вибір конкретної структури даних для реалізації даної ADT зазвичай залежить від пріоритетів ефективності кожної операції (включаючи ініціалізацію структури) та складності впровадження та підтримки різних типів даних.

Є занадто багато ADT та відповідних конкретних конструкцій, щоб перелічити в одній відповіді, але ось кілька прикладів:

  • Find(x)ххInsert(x)Delete(x)

  • Findsuccessor(x)SхтSс<т

  • Пріоритет черзі є ГТ , яка вимагає insertі delete-minоперації (а іноді і інші операції , а також, наприклад, find-min increase-keyабо delete-key). Структури даних, які реалізують пріоритетну чергу ADT, включають:

    1. несортований пов'язаний список, який має швидкий, insertале повільний характер delete-min.

    2. відсортований пов'язаний список, який має швидкий, delete-minале повільний характерinsert

    3. insertdelete-minсоrт(н)

    4. бінарна купа , яка має логарифмічну insertі delete-min, і лінійну ініціалізацію часу.

    5. Існують також інші варіанти реалізації купи .

  • stabbing(x)х


9

Абстрактний тип даних описує, які операції доступні та яким законам вони дотримуються. Наприклад, словник дозволяє зберігати значення під заданою клавішею і отримувати значення для ключа, і обіцяє, що якщо ви спочатку збережете значення, а потім отримаєте його тим самим ключем, ви отримаєте значення, яке ви зберегли назад. Стек має операції push і pop.

Конкретний тип даних говорить про те, як ці операції реально реалізовані.


Спасибі! Чи є списки, яка загальна структура даних - яка, абстрактна чи конкретна?
StackExchange за все

Не загальний список, але ви можете поглянути на xlinux.nist.gov/dads
Олексій Романов
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.