Я создал программу, которая находит медиану списка чисел. Список чисел является динамическим в том смысле, что числа можно удалять и вставлять (можно вводить повторяющиеся числа), и в течение этого времени новая медиана повторно оценивается и распечатывается.
Я создал эту программу, используя мультикарту, потому что
1) преимущество в том, что он уже отсортирован,
2) простота вставки, удаления, поиска (поскольку multimap реализует бинарный поиск)
3) разрешены повторяющиеся записи.
Ограничения на количество записей + удалений (представленных как N): 0 ‹N‹ = 100 000.
Программа, которую я написал, работает и распечатывает правильную медиану, но не достаточно быстро. Я знаю, что unsorted_multimap быстрее, чем multimap, но тогда проблема с unsorted_multimap в том, что мне придется его отсортировать. Мне нужно отсортировать его, потому что для нахождения медианы вам нужен отсортированный список. Итак, мой вопрос: будет ли практично использовать unsorted_multimap, а затем быстро отсортировать записи, или это будет просто смешно? Не было бы быстрее просто использовать вектор, быстро отсортировать вектор и использовать двоичный поиск? Или, может быть, я забываю какое-то потрясающее решение, о котором даже не думал.
Хотя я не новичок в C ++, я должен признать, что мои навыки работы с временной сложностью несколько полезны.
Чем больше я смотрю на свой вопрос, тем больше я начинаю думать, что было бы лучше просто использовать вектор с быстрой сортировкой и двоичным поиском, поскольку структуры данных в основном уже реализуют векторы.