Динамический массив
Создан динамический массив по задаче, описанной ниже.
Меры сложности для этих методов insert(i, item) и delete(i) одинаковы и равны О(2n), потому что в методах использутся по 2 цикла, максимальное количество операций первого цикла напрямую зависит от длины массива (при копировании массива в новый), а второго от номера элемента который мы используем при обращении к методу, который в худшем случае будет равен длине массива. Т.е. О(2n).
Задача:
Создать класс DynArray с параметрами:
count -- текущее количество элементов в массиве,
capacity -- текущая ёмкость буфера (исходно 16 единиц),
array -- по сути, указатель на блок памяти нужной ёмкости.
базовые методы:
- формирование блока памяти заданного размера:
make_array(int new_capacity).
Метод меняет размер массива array, копируя при необходимости
текущие объекты вышеописанным способом;
- получение объекта по его индексу
get_item(int i).
В этот метод встроим проверку корректности индекса в рамках границ,
и генерацию соответствующего исключения, если обращение некорректно;
- добавление нового элемента в конец массива, метод
append(item).
2. метод insert(i, item),
который вставляет в i-ю позицию объект item,
сдвигая вперёд все последующие элементы.
Учтите, что новая длина массива может превысить размер буфера.
3. метод delete(i),
который удаляет объект из i-й позиции.
Если количество элементов массива стало в два или более раз меньше
его потенциальной ёмкости, выполните сжатие буфера,
сохраняя минимальную ёмкость 16 элементов.
4. Оцените меры сложности для этих двух методов.
5. Напишите тесты, проверяющие работу методов Insert() и Remove():
-- вставка элемента, когда в итоге размер буфера не превышен (проверьте также размер буфера);
-- вставка элемента, когда в результате превышен размер буфера (проверьте также корректное изменение размера буфера);
-- попытка вставки элемента в недопустимую позицию;
-- удаление элемента, когда в результате размер буфера остаётся прежним (проверьте также размер буфера);
-- удаление элемента, когда в результате понижается размер буфера (проверьте также корректное изменение размера буфера);
-- попытка удаления элемента в недопустимой позиции.
Меры сложности для этих методов insert(i, item) и delete(i) одинаковы и равны О(2n), потому что в методах использутся по 2 цикла, максимальное количество операций первого цикла напрямую зависит от длины массива (при копировании массива в новый), а второго от номера элемента который мы используем при обращении к методу, который в худшем случае будет равен длине массива. Т.е. О(2n).
Задача:
Создать класс DynArray с параметрами:
count -- текущее количество элементов в массиве,
capacity -- текущая ёмкость буфера (исходно 16 единиц),
array -- по сути, указатель на блок памяти нужной ёмкости.
базовые методы:
- формирование блока памяти заданного размера:
make_array(int new_capacity).
Метод меняет размер массива array, копируя при необходимости
текущие объекты вышеописанным способом;
- получение объекта по его индексу
get_item(int i).
В этот метод встроим проверку корректности индекса в рамках границ,
и генерацию соответствующего исключения, если обращение некорректно;
- добавление нового элемента в конец массива, метод
append(item).
2. метод insert(i, item),
который вставляет в i-ю позицию объект item,
сдвигая вперёд все последующие элементы.
Учтите, что новая длина массива может превысить размер буфера.
3. метод delete(i),
который удаляет объект из i-й позиции.
Если количество элементов массива стало в два или более раз меньше
его потенциальной ёмкости, выполните сжатие буфера,
сохраняя минимальную ёмкость 16 элементов.
4. Оцените меры сложности для этих двух методов.
5. Напишите тесты, проверяющие работу методов Insert() и Remove():
-- вставка элемента, когда в итоге размер буфера не превышен (проверьте также размер буфера);
-- вставка элемента, когда в результате превышен размер буфера (проверьте также корректное изменение размера буфера);
-- попытка вставки элемента в недопустимую позицию;
-- удаление элемента, когда в результате размер буфера остаётся прежним (проверьте также размер буфера);
-- удаление элемента, когда в результате понижается размер буфера (проверьте также корректное изменение размера буфера);
-- попытка удаления элемента в недопустимой позиции.
Комментарии
Отправить комментарий