powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод амортизированной сложности втавки элемента в конец ArrayList
6 сообщений из 31, страница 2 из 2
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694814
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty5509schwaБудет n (количество добавлений в конец массива) + сумма 2 ^ i , где i от 0 до log(n) (число удваиваний)
а это все равно n + 2n, что есть по определению есть O(n).
Где здесь учитывается сложность самой операции расширения? Вы учитываете только их количество
Сумма (2 ^ i) , где i от 0 до log(n).
вот суммарная сложность всех удваиваний.
...
Рейтинг: 0 / 0
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694821
qwerty5509
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
schwa, а почему сложность удваивания равна 2^i ?
...
Рейтинг: 0 / 0
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694833
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwerty5509Если документация, не учитывает накладжных расходов на возможное расширение, то почему она говорит об амортизированной сложности добавления элемента за О(1) ??Толковый словарь на статье "амортизация" не пробовали открыть?
В худшем случае, добавление n элементов потребует log2(n) расширений. Вероятность такого наихудшего случая стремится к нулю.
Если до вставки ёмкость массива-списка была m элементов (m < n), то потребуется около log2(n/m) расширений. Таким образом, если m и n сравнимы по порядку величины - получим примерно постоянное число расширений сложности O( m ) каждое. Что даёт нам увеличение коэффициента, но не меняет порядок сложности.
Таким образом, при вполне разумных предположениях, сложность вставки n элементов остаётся O( n ), а значит вставка одного элемента выполняется примерно постоянное время.
Вполне эргодичная система - среднее по времени равно среднему по ансамблю
...
Рейтинг: 0 / 0
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694837
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwerty5509 ,
1) Размер массива определяется интом, то есть 4 байта. Соответственно, максимальное количество расширений массива будет не более 32 (или 31 - не суть).
2) Размер, который занимает, например, массив рефернсов размера 2 ^ 31 это 2 ^ 34 байт, что эквивалентно 16Gb. На практике люди очень редко хотя бы отдаленно приближаются к этим цифрам, поэтому крайние, наиболее тяжелые, ресайзы отбрасываем.
3) Как уже заметили, операции добавления одного элемента и операции копирования массива нельзя ставить в один ряд. Например, записать 8 раз по одному байту - это восемь отдельных записей. А скопировать массив байт размером 8 - это одна запись.
4) Исходя из всего этого разработчики JavaSE сказали - приближенно, особенно с учетом амортизации (то есть исходя из того, что вы не просто бездумно долбите Add(), но и что-то полезное между ними делаете), можно считать, что операция Add() выполняется за O(1).
...
Рейтинг: 0 / 0
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694839
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovполучим примерно постоянное число расширений сложности O( m )O(n).
На конечный вывод это не влияет из-за очень медленного роста логарифмической функции.
...
Рейтинг: 0 / 0
Вывод амортизированной сложности втавки элемента в конец ArrayList
    #38694848
qwerty5509
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov, спасибо, теперь, вроде, всё ясно
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод амортизированной сложности втавки элемента в конец ArrayList
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]