Добрый день! Коллеги подкинули задачу на "поисследовать"
Изначально дан массив, каждый элемент которого равен нулю. С массивом возможно проводить операции 2 типов:
1. сделать инкремент i-го элемента на 1,
2. получить индекс элемента с минимальным значением.
Предложить структуру данных, которая позволяет выполнять указанные операции над массивом и требует
1)минимум затрат по дополнительной памяти
2)минимум затрат по сложности
Из нее вытекают вопросы:
1) Если минимум по памяти, то, получается, что мы храним только сам массив и все. Тогда поиск минимума производится за
, а инкремент за единицу. Либо можно сделать как-то оптимальнее?
2) Если минимум по сложности, то, логично, что можно положить болт на память и пользоваться ей в свое удовольствие. По умолчанию у нас массив отсортированный. При инкременте одного элемента нам надо его "пересортировать", посему - можно ли это сделать за O(
)? Потому как за логарифм мы только найдем куда вставить увеличенный элемент, но надо же еще провести смещение блока отсортированного массива(поиск этого элемента можно не проводить, если в структуре хранить вместе со значением и номером элемента первоначального массива еще и его адрес в отсортированном массиве). Тогда, соответственно, поиск минимума - за единицу, а инкремент за логарифм(если это возможно). Вопрос - прав ли я и можно ли сделать быстрее?
Буду благодарен не за прямые ответы, а за любые наводящие вопросы, чтобы по итогу додумался сам. Спасибо