Как реализовать обычную очередь с использованием очереди приоритетов ?. Также мне нужно найти время работы «enqueue» «dequeue» в этом методе.Как реализовать очередную очередь с использованием очереди приоритетов?
1
A
ответ
3
У вас может быть индекс выполнения, который запоминает, сколько вставок было внесено, добавленный элемент i
-го будет иметь приоритет i
. Вы всегда запрашиваете «самый низкий» приоритетный элемент, который является самым старым в очереди, по желанию.
Временная сложность, если вы используете «черный ящик» очереди приоритета является O(logn)
для popHead()
и insert()
и O(1)
для top()
. Возможно, вы сможете настроить его, чтобы делать вставки и удаления быстрее, если вы не предполагаете «черный ящик», но, опять же, если вы можете настроить его, просто сделайте его linked list или какую-либо другую структуру данных, оптимизированную для быть очередью.
Если вы предположили, что prioqueue реализован как двоичная куча или куча спаривания, вставка также должна быть «O (1)». – phimuemue
@phimuemue Это будет предполагать конкретную реализацию, как я уже упомянул - я беру здесь черный ящик, потому что OP не запрашивал конкретную реализацию, он спросил об ADT «Priority Queue», а не о конкретном «Двоичная куча» DS. – amit
Правда, я просто хотел добавить его в качестве дополнительной информации. – phimuemue