Если вам нужна случайная вставка и удаление,
лучший способ, вероятно, отсортированный
массив. Вставки и удаления должны быть
O (журнал (п)).
Да, но вам нужно будет выполнить повторную сортировку для каждой вставки и (возможно) для каждого удаления, которое, как вы заявили, равно O (log (n)).
С решением, предложенным Harpreet:
- у вас есть один O (n) проход в начале, чтобы найти самый маленький элемент
- вставки - O (1) после этого (требуется только 1 сравнение с уже известным наименьшим элементом)
- удаляется будет O (n), потому что вам нужно будет повторно найти наименьший элемент (имейте в виду, что обозначение Big O - наихудший случай). Вы также можете оптимизировать, проверив, является ли удаляемый элемент (известным) наименьшим, а если нет, просто не делайте никаких повторных проверок, чтобы найти наименьший элемент.
Итак, это зависит. Один из этих алгоритмов будет лучше для случая интенсивной вставки с небольшим удалением, но другой в целом более согласован. Я думаю, что я бы по умолчанию использовал механизм Harpreet, если бы не знал, что наименьшее число будет часто удаляться, потому что в этом алгоритме есть слабое место.