Різниця між групою та чергою пріоритетів


36

Я завжди вважав , що відвали і пріоритетні черги були синонімами - абстрактна структура даних , яка підтримує insert, findMinі deleteMinоперації.

Здається, деяка література погоджується зі мною - наприклад, «Чисто функціональні структури даних» Кріса Окасакі (глава 3).

З іншого боку, наборна сторінка Вікіпедії визначає її як структуру даних на основі дерев і заявляє, що купи - це конкретна реалізація черг пріоритетів.

Мені важко погоджувати це з тим, що я можу придумати більше, ніж одну купу купірувань - ліві купи, біноміальні купи, грандіозні купи ...

Чи простий факт того, що купа може бути реалізована з різними структурами даних, не означає, за визначенням, що це абстрактна структура даних? І якщо це так, чи є фактична різниця у черзі пріоритетності?


11
Прочитайте сторінку Вікіпедії про черги з пріоритетом ( en.wikipedia.org/wiki/Priority_queue ), в ній сказано, що "черга з пріоритетом може бути реалізована за допомогою купи або різних інших методів, таких як невпорядкований масив" - і це насправді відповідь на твоє запитання.
Док Браун

2
Ну, не дуже - це не допомагає мені зрозуміти, чи є купа конкретної структури даних чи абстрактна. Я схильний би сказати абстрактний, оскільки існує багато конкретних реалізацій купи. Якщо це так, і список пріоритетів і купа - це абстрактні структури даних з однаковими властивостями, тоді мені потрібна допомога в розумінні різниці, і сказати, що одна можлива реалізація, а інша не дуже корисна, якщо жодне насправді не є конкретна реалізація.
Nicolas Rinaudo

Все ще гірше: двійкова купа може бути реалізована як масив або як двійкове дерево. На щастя, я ще не чув про масив, реалізований як щось інше.
Олексій

Відповіді:


25

Черга з пріоритетом може мати будь-яку реалізацію, як-от масив, який ви шукаєте лінійно під час появи поп. Все це означає, що при попрі ви отримуєте значення або мінімальне, або максимальне в залежності.

Класична купа, як це зазвичай називають, - це, як правило, хв. Реалізація, яка має складну часову складність ( O(log n)на push і поп) і не має накладних витрат на пам'ять.


4
Ви хочете сказати , що різниця в тому , що в той час як вони поділяють одні й ті ж операції ( findMin, deleteMin, insert), відвали мають гарантовані «хороші» Складнощі для них , де черг пріоритетів немає?
Ніколя Ріноу

Чи не може купа також мати різні реалізації з різними часовими складностями (наприклад, звичайне пов'язане бінарне дерево)? Також складність часу залежить від пам'яті, яка використовується. Якщо це магнітна стрічка, то, мабуть, не буде O(log(n))натискання та поп-шоу.
Олексій

6

Цей веб-сайт дає дійсно чітке пояснення. http://pages.cs.wisc.edu/~vernon/cs367/notes/11.PRIORITY-Q.html

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


1
Зауважте, що у підсумках сторінки, до якої ви пов’язані, сама черга пріоритетів називається структурою даних .
Олексій

2

Я думаю, що те, що ви писали про конкретні проти абстрактних, є правильним. Там, де ви говорите, що кучки splay, біноміальні купи - це різні реалізації купи, хоча, я вважаю, що правильніше сказати, що вони є різними типами купи. Купу я вважаю категорією реалізації, яка, як правило, гарантує не тільки той самий інтерфейс, але й однакові часи доступу.

Це ви бачите і з асоціативними картами, і з хеш-таблицями, і з двійковими деревами пошуку. Bsts та хеш-таблиці - це конкретні структури даних, які забезпечують абстрактний інтерфейс асоціативної карти. Червоні чорні дерева та дерева avl - це збалансовані показники, з однаковими великими гарантіями O та однаковим додатковим інтерфейсом (у порядку проходу). Це різні типи дерев, я б сказав більше, ніж різні реалізації дерев. Вони є різними, але тісно пов'язаними реалізаціями асоціативних карт.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.