Jump to content

Возможный метод

В теории сложности вычислений потенциальный метод — это метод, используемый для анализа амортизированной временной и пространственной сложности структуры данных , меры ее производительности над последовательностями операций, которая сглаживает стоимость нечастых, но дорогостоящих операций. [1] [2]

Определение амортизированного времени

[ редактировать ]

В потенциальном методе выбирается функция Φ, которая отображает состояния структуры данных в неотрицательные числа. Если S — состояние структуры данных, Φ( S ) представляет работу, которая была учтена («оплачена») в амортизированном анализе, но еще не выполнена. Таким образом, Φ( S ) можно рассматривать как расчет количества потенциальной энергии, запасенной в этом состоянии. [1] [2] Потенциальное значение до операции инициализации структуры данных определяется как ноль. Альтернативно, Φ( S ) можно рассматривать как представляющую степень беспорядка в состоянии S или его расстояние от идеального состояния.

Пусть o — любая отдельная операция в последовательности операций над некоторой структурой данных, где S перед обозначением состояния структуры данных до операции o, а S после обозначения ее состояния после операции o завершения . После выбора Φ амортизированное время операции o определяется как

где C — неотрицательная константа пропорциональности (в единицах времени), которая должна оставаться фиксированной на протяжении всего анализа.То есть амортизированное время определяется как фактическое время, затраченное на операцию плюс C , умноженное на разницу потенциалов, вызванную этой операцией. [1] [2]

При изучении асимптотической сложности вычислений с использованием обозначения большого O постоянные факторы не имеют значения, поэтому константа C обычно опускается.

Связь между амортизированным и фактическим временем

[ редактировать ]

Несмотря на свой искусственный вид, общее амортизированное время последовательности операций обеспечивает действительную верхнюю границу фактического времени для той же последовательности операций.

Для любой последовательности операций , определять:

  • Общее амортизированное время:
  • Общее фактическое время:

Затем:

где последовательность значений потенциальной функции образует телескопический ряд , в котором все члены, кроме начального и конечного значений потенциальной функции, сокращаются попарно. Переставляя это, мы получаем:

С и , , поэтому амортизированное время можно использовать для обеспечения точной верхней границы фактического времени последовательности операций, даже если амортизированное время для отдельной операции может сильно отличаться от ее фактического времени.

Амортизированный анализ исходных данных для наихудшего случая

[ редактировать ]

Обычно амортизированный анализ используется в сочетании с предположением о наихудшем случае относительно входной последовательности. При этом предположении, если X — это тип операции, которая может выполняться структурой данных, а n — целое число, определяющее размер данной структуры данных (например, количество содержащихся в ней элементов), то амортизированное время для операций типа X определяется как максимальное среди всех возможных последовательностей операций над структурами данных размера n и всех операций o i типа X внутри последовательности амортизированное время для операции o i .

Согласно этому определению время выполнения последовательности операций можно оценить путем умножения амортизированного времени для каждого типа операций в последовательности на количество операций этого типа.

Динамический массив

[ редактировать ]

Динамический массив — это структура данных для поддержания массива элементов, обеспечивающая как произвольный доступ к позициям внутри массива, так и возможность увеличения размера массива на единицу. Он доступен в Java как тип «ArrayList» и в Python как тип «список».

Динамический массив может быть реализован с помощью структуры данных, состоящей из массива A элементов некоторой длины N вместе с числом n N , представляющим позиции в массиве, которые использовались до сих пор. С помощью этой структуры произвольный доступ к динамическому массиву может быть реализован путем доступа к одной и той же ячейке внутреннего массива A , а когда n < N, операция, которая увеличивает размер динамического массива, может быть реализована просто путем увеличения n . Однако, когда n = N , необходимо изменить размер A , и распространенная стратегия для этого — удвоить его размер, заменив A новым массивом длиной 2 n . [3]

Эту структуру можно проанализировать с помощью потенциальной функции:

Φ = 2 п - N

Поскольку стратегия изменения размера всегда приводит к тому, что A будет заполнен как минимум наполовину, эта потенциальная функция всегда неотрицательна, как и хотелось.

Если операция увеличения размера не приводит к операции изменения размера, Φ увеличивается на 2, что является константой. Таким образом, постоянное фактическое время операции и постоянное увеличение потенциала в совокупности дают постоянное амортизированное время для операции этого типа.

Однако когда операция увеличения размера вызывает изменение размера, потенциальное значение Φ уменьшается до нуля после изменения размера. Выделение нового внутреннего массива A и копирование всех значений из старого внутреннего массива в новый занимает фактическое время O( n ), но (при соответствующем выборе константы пропорциональности C ) это полностью компенсируется уменьшением потенциальную функцию, оставляя постоянное общее амортизированное время для операции.

Остальные операции структуры данных (чтение и запись ячеек массива без изменения размера массива) не вызывают изменения потенциальной функции и имеют такое же постоянное амортизированное время, что и их фактическое время. [2]

Следовательно, при таком выборе стратегии изменения размера и потенциальной функции потенциальный метод показывает, что все операции с динамическими массивами занимают постоянное амортизированное время. Объединив это с неравенством, связывающим амортизированное время и фактическое время для последовательностей операций, это показывает, что любая последовательность из n операций с динамическими массивами в худшем случае занимает O( n ) фактического времени, несмотря на то, что некоторые из отдельных операций сами по себе могут занимать линейный промежуток времени. [2]

Когда динамический массив включает в себя операции, которые уменьшают, а также увеличивают его размер, потенциальную функцию необходимо изменить, чтобы она не стала отрицательной. Один из способов сделать это — заменить приведенную выше формулу для Φ ее абсолютным значением .

Мультипоп-стек

[ редактировать ]

Рассмотрим стек , который поддерживает следующие операции:

  • Инициализировать — создать пустой стек.
  • Push — добавить один элемент поверх стека, увеличив стек на 1.
  • Pop( k ) — удалить k элементов с вершины стека, где k не больше текущего размера стека.

Pop( k ) требует времени O( k ), но мы хотим показать, что все операции занимают амортизированное время O(1).

Эту структуру можно проанализировать с помощью потенциальной функции:

Φ = количество элементов в стеке

Это число всегда неотрицательно, как и требуется.

Операция Push занимает постоянное время и увеличивает Φ на 1, поэтому ее амортизированное время является постоянным.

Операция Pop занимает время O( k ), но также уменьшает Φ на k , поэтому ее амортизированное время также является постоянным.

Это доказывает, что любая последовательность из m занимает O( m операций в худшем случае ) фактического времени.

Двоичный счетчик

[ редактировать ]

Рассмотрим счетчик , представленный в виде двоичного числа и поддерживающий следующие операции:

  • Инициализация: создайте счетчик со значением 0.
  • Inc: добавьте 1 к счетчику.
  • Чтение: вернуть текущее значение счетчика.

В этом примере мы не используем трансдихотомическую машинную модель , а вместо этого требуем одну единицу времени на битовую операцию в приращении. Мы хотим показать, что Inc занимает амортизированное время O(1).

Эту структуру можно проанализировать с помощью потенциальной функции:

Φ = количество битов, равное 1 = вес Хэмминга (счетчик)

Это число всегда неотрицательно и начинается с 0, как и требуется.

Операция Inc инвертирует младший бит . Затем, если младший бит был инвертирован с 1 на 0, то следующий бит также инвертируется. Это продолжается до тех пор, пока бит не изменится с 0 на 1, после чего переворот прекращается. Если счетчик первоначально заканчивается на k 1 битах, мы переворачиваем в общей сложности k +1 бит, беря фактическое время k +1 и уменьшая потенциал на k -1, так что амортизированное время равно 2. Следовательно, фактическое время для выполнения m Inc операций составляет O( m ).

Приложения

[ редактировать ]

Метод потенциальной функции обычно используется для анализа кучи Фибоначчи — формы приоритетной очереди , в которой удаление элемента занимает логарифмическое амортизированное время, а все остальные операции занимают постоянное амортизированное время. [4] Его также можно использовать для анализа расширенных деревьев , самонастраивающейся формы двоичного дерева поиска с логарифмическим амортизированным временем на операцию. [5]

  1. ^ Перейти обратно: а б с Гудрич, Майкл Т .; Тамассиа, Роберто (2002), «1.5.1 Методы амортизации», Разработка алгоритмов: основы, анализ и примеры из Интернета , Wiley, стр. 36–38 .
  2. ^ Перейти обратно: а б с д и Кормен, Томас Х .; Лейзерсон, Чарльз Э .; Ривест, Рональд Л .; Штейн, Клиффорд (2001) [1990]. «17.3 Потенциальный метод». Введение в алгоритмы (2-е изд.). MIT Press и McGraw-Hill. стр. 412–416. ISBN  0-262-03293-7 .
  3. ^ Гудрич и Тамассия, 1.5.2 Анализ реализации расширяемого массива, стр. 139–141; Кормен и др., 17.4 Динамические таблицы, стр. 416–424.
  4. ^ Кормен и др., Глава 20, «Кучи Фибоначчи», стр. 476–497.
  5. ^ Гудрич и Тамассия, Раздел 3.4, «Раскидистые деревья», стр. 185–194.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2ef1401d2f5aff2eb9b4c2a3b05312a0__1717240140
URL1:https://arc.ask3.ru/arc/aa/2e/a0/2ef1401d2f5aff2eb9b4c2a3b05312a0.html
Заголовок, (Title) документа по адресу, URL1:
Potential method - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)