При расчете среднего времени вставки в вектор необходимо учитывать нерастущие вставки и растущие вставки.
Назовите общее количество операций для вставки n элементов o всего , а среднее o среднее .
Если вы вставите n предметов, и вы увеличитесь в A раз по мере необходимости, тогда будет o всего = n + & Sigma ; A i [0 A n] операций. В худшем случае вы используете 1 / A выделенного хранилища.
Интуитивно, A = 2 означает, что в худшем случае у вас есть o всего = 2n , поэтому o среднее - это O (1), и в худшем случае вы используете 50% выделенного хранилища.
Для большего A у вас есть меньшее o общее , но больше потраченного впустую хранилища.
Для меньших A , o всего больше, но вы не тратите так много времени на хранение. Пока он растет геометрически, время вставки равно O (1), но константа будет увеличиваться.
Для факторов роста 1,25 (красный), 1,5 (голубой), 2 (черный), 3 (синий) и 4 (зеленый) эти графики показывают эффективность точечного и среднего размера (соотношение размера / выделенного пространства; чем больше, тем лучше ) слева и время эффективности (соотношение вставок / операций; чем больше, тем лучше) справа для вставки 400 000 элементов. 100% эффективности пространства достигается для всех факторов роста непосредственно перед изменением размера; случай для A = 2 показывает эффективность по времени между 25% и 50% и эффективность использования пространства около 50%, что хорошо для большинства случаев:
Для сред выполнения, таких как Java, массивы заполнены нулями, поэтому количество выделяемых операций пропорционально размеру массива. Учет этого дает уменьшает разницу между оценками эффективности времени: