2015-05-20 2 views

ответ

3

У вас может быть индекс выполнения, который запоминает, сколько вставок было внесено, добавленный элемент i-го будет иметь приоритет i. Вы всегда запрашиваете «самый низкий» приоритетный элемент, который является самым старым в очереди, по желанию.

Временная сложность, если вы используете «черный ящик» очереди приоритета является O(logn) для popHead() и insert() и O(1) для top(). Возможно, вы сможете настроить его, чтобы делать вставки и удаления быстрее, если вы не предполагаете «черный ящик», но, опять же, если вы можете настроить его, просто сделайте его linked list или какую-либо другую структуру данных, оптимизированную для быть очередью.

+0

Если вы предположили, что prioqueue реализован как двоичная куча или куча спаривания, вставка также должна быть «O (1)». – phimuemue

+0

@phimuemue Это будет предполагать конкретную реализацию, как я уже упомянул - я беру здесь черный ящик, потому что OP не запрашивал конкретную реализацию, он спросил об ADT «Priority Queue», а не о конкретном «Двоичная куча» DS. – amit

+0

Правда, я просто хотел добавить его в качестве дополнительной информации. – phimuemue