Что означает память (1)?


13

У меня есть определение алгоритма на месте от профессора, но я не понимаю его.

In-situ алгоритмы относятся к алгоритмам, которые работают с Θ (1) памятью.

Что это обозначает?



4
«Алгоритм называется алгоритмом на месте, или алгоритмом на месте, если дополнительный объем памяти, необходимый для выполнения алгоритма, равен O (1), то есть [память] не превышает постоянной независимо от того, насколько велик вход . Например, heapsort является алгоритмом сортировки на месте ". en.wikipedia.org/wiki/In_situ#Computer_science
Оберон,

@Auberon, следует добавить, что накладывает дополнительное требование, чем O ( 1 ) : чтобы общая память, используемая в любом конкретном вызове, не падала ниже постоянной, независимо от размера ввода. Θ(1)O(1)
Олат

1
@ Я еще не видел алгоритм, который использует больше нуля, но меньше константы любого ресурса
adrianN

@adrianN, AES-шифрование файлов выполняется с использованием оперативной памяти под постоянной верхней границей. Вы обрабатываете блок за раз, каждому блоку требуется одинаковый объем ОЗУ для обработки, и ОЗУ можно повторно использовать от одного блока к другому. Более простой пример - преобразовать все буквы в ASCII-кодированном файле в верхний регистр. Вы можете прочитать файл, скажем, 4096 байт, обработать эти 4096 байт, записать результаты этого блока и повторно использовать ту же оперативную память для следующего блока.
Олат

Ответы:


13

Сначала давайте распакуем, что означает .Θ(1)

Big , и большая Θ , классы функций. Там есть формальное определение здесь , но для целей данного вопроса, то мы говорим , что функция F в O ( 1 ) , если существует постоянная с , где для всех х , е ( х ) C . То есть f растет не более, чем постоянная функция.OΘfO(1)cxf(x)Cf

Большое значение не имеет большого значения для константных функций, потому что при описании времени алгоритма или использования пространства не так много ниже константы. Но чтобы объяснить, что это значит, f Θ ( 1 ), если существуют такие константы c , d , что для всех x , d f ( x ) c . То есть, f растет, по крайней мере, так же быстро и, самое большее, так же быстро, как постоянная функция.ΘfΘ(1)c,dxdf(x)cf

Какое отношение это имеет к использованию памяти? Рассмотрим некоторый алгоритм . Существует некоторая (математическая) функция, которая, учитывая вход n , дает максимальное использование памяти вашего алгоритма A на любом входе размера n . Давайте назовем эту функцию м е м .AnAnmem

Итак, теперь мы объединяем наши две концепции. Если алгоритм использует памяти, то его функция использования памяти находится в Θ ( 1 ) , что означает, что существует некоторое d , c такое, что для любого входа используемая память находится между d и c .Θ(1)Θ(1)d,cdc

Короче говоря, это означает, что использование памяти алгоритмом находится в некотором постоянном диапазоне, независимо от ввода.

Обычно функция памяти не учитывает память, используемую для хранения входных данных алгоритма, так как в противном случае использование памяти всегда будет не менее .Θ(n)


"не зависит эффективно от его ввода." - для какого определения «эффективно»?
Рафаэль

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

Я не думаю, что есть лучшая формулировка, чем «используемая память находится между и c для любого входа». И в этом нет необходимости. dc
Рафаэль


8

Постоянная пространственная сложность алгоритма

Объем памяти, используемый вашим алгоритмом, не зависит от ввода.

Говорят, что алгоритм имеет постоянную пространственную сложность, если он использует фиксированное количество пространства. Это может быть переменных или массив из 10 элементов.1010

Тем не менее, алгоритмы in-situ выполняют предназначенную функцию на самом входе и, таким образом, требуют очень мало или вообще не требуют дополнительного места. Входные данные обычно перезаписываются выходными данными при выполнении алгоритма. ( ссылка )

In-situ алгоритмы не учитывают пространство, занимаемое входными данными, и учитывают только дополнительное пространство при расчете сложности пространства.


3
Это неверно Например, может быть так, что для конкретного алгоритма входные данные длиной менее трех символов используют 5 байтов памяти, в то время как все более крупные входные данные используют миллион байтов памяти. Использование памяти , что алгоритм был бы , безусловно , не может быть независимым от входа, но это, безусловно , использовать пространство. Чтобы исправить утверждение, существуют постоянные верхние и нижние пределы использования памяти, которые не зависят от ввода. Θ(1)
Олат

@Olathe Пространство, занимаемое каждым входом с точки зрения байтов, и количество входов с точки зрения количества, не две разные концепции?
Prateek

0

Это означает, что дополнительный объем памяти, необходимый для алгоритма, не превышает некоторого постоянного количества, которое не зависит от размера ввода для достаточно большого ввода.


2
ΘOΩO(x2)f(x)=3x2 f(x)=xΘ(x2)f(x)=3x2f(x)=x
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.