В зависимости от того, как вы увеличите объем хранилища, а k достаточно мало, для всех случаев это может быть O (1) или что-то еще.
Под «как», я имею в виду, в управляемых языках одинсоздаст новый массив размером n + k, а затем скопирует старый массив (размера n) в новый и, наконец, заменит ссылку старого массива на новый.Это будет: O (1) (создание массива, это предположение) + O (n) (копирование данных) + O (1) (изменение ссылки).Мы игнорируем выполнение сборщика мусора, потому что оно очень зависит от реализации.В неуправляемых языках можно использовать что-то похожее на realloc
, чтобы старые элементы сохранялись без необходимости копировать, поскольку новое хранилище занимает ту же область памяти, только расширенную до количества требуемых элементов.В этом случае это O (1) для всех случаев.Обратите внимание, что иногда расширение хранилища до количества требуемых элементов невозможно из-за фрагментации памяти, поэтому вместо этого используется подход, подобный управляемым языкам (но неявно реализуемый реализацией realloc
).В этом случае сложность та же, что и в управляемых языках: O (n).
Это ответ с практической точки зрения, я надеюсь, что вы можете найти ответ с аналитической точки зрения, используя ответ выше.Удачи.