Карта и минимальная куча для лучшей скорости - PullRequest
2 голосов
/ 28 сентября 2010

Может ли карта и минимальная куча, используемые вместе, дать лучшее амортизированное время по сравнению с самим собой?

Предположим, у меня есть проект, в котором мне нужно отслеживать несколько элементов.Эти элементы имеют срок действия и уникальный идентификатор:

class Item {
  ID uid;
  Time expiration;
};

. В этом примере и Time, и ID являются примитивными целочисленными типами данных.Мне нужно иметь возможность быстрого доступа к элементу по идентификатору, а также мне нужно найти минимальный срок действия всех элементов.

Кроме того, я буду делать многочисленные вставки и удаления.* Используя карту, я получу амортизированное время поиска O (log n).(Да, я предоставлю функцию сравнения для этого.) Но нахождение минимального значения O (n).

Если я использую минимальную кучу, мое время поиска по id будет O (n), но нахождение минимального срока действия равно O (1).

В обоих случаях вставка равна O (log n).Для этой программы удаление будет происходить только для минимального элемента.

Или я мог бы использовать оба.Карта и минимальная куча, которые отслеживают одни и те же объекты.

Учитывая эту настройку, было бы полезно использовать как мини-кучу, так и карту, чтобы избежать сложности O (n)?

1 Ответ

1 голос
/ 28 сентября 2010

Да, использование двойных индексов, вероятно, поможет вам (учитывая достаточное количество элементов, чтобы победить постоянные факторы). Однако будьте осторожны - вам нужно будет отслеживать, где находится ваш элемент в минимальной куче, чтобы вы могли быстро удалить его из кучи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...