2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Понятие дополнительной памяти.
Сообщение29.12.2022, 03:30 


31/05/22
267
Всем здравствуйте, возник вопрос: когда пишут О(1) дополнительной памяти в задачах на алгоритмы, имеют ввиду величину числа? Ну например записать куда то сумму всех положительных значений множества. В решениях задач такую сумму считали за О(1), как и подобные штуки. Но если так считают, то тогда можно схитрить и в числа записывать много данных, например разграничивая нулями последовательность положительных целых чисел менее 10. Кто понимает в этой теме, объясните мне, может это я не прав?

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение29.12.2022, 11:26 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Разумеется, в таких случаях неявно предполагается, что всевозможные значения, возникающие в ходе вычислений, не приводят к переполнению разрядности. Хотя формально, даже для записи натурального числа из диапазона от 1 до $M$ требуется $O(\log M)$ памяти, но на практике почти всегда считают, что это $O(1)$.

Но тут могут быть нюансы, действительно существенные на практике.
Есть, например, такая задачка: дан массив из $N-1$ различных натуральных чисел, каждое из которых не превосходит $N$. Таким образом, в массиве есть все числа от 1 до $N$, кроме одного. Нужно его найти (разумеется, быстро, за $O(N)$ времени и за вот эту вашу $O(1)$ дополнительной памяти).
Решение: сумма всех $N$ чисел от 1 до $N$ известна, нужно из неё вычесть по очереди все числа массива, и то, что получится, и будет искомым числом.
Конечно же, здесь неявно подразумевается, что сумма ($N(N+1)/2$) умещается в диапазон представимых целых чисел.
Модифицируем задачу: теперь чисел $N-2$, и нужно найти два отсутствующих числа.
Возможное решение: рассчитаем произведение $N!$ и сумму $N(N+1)/2$ всех чисел от 1 до $N$, далее будем (делить на/вычитать из него) все числа массива последовательно, пока не получим произведение и сумму двух искомых чисел. Потом воспользуемся теоремой Виета, решим квадратное уравнение и получим сами числа.
Всё так же просто и красиво, но вот тут уже есть нюанс. $N!$ имеет разрядность $O(N)$, и тут уже нельзя подразумевать, что его результат влезет в диапазон представления машинного числа. Собственно, и вычислить $N!$ за время $O(N)$ никак не получится.

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение29.12.2022, 14:12 
Заслуженный участник
Аватара пользователя


30/01/09
7068
Maxim19 в сообщении #1575430 писал(а):
Ну например записать куда то сумму всех положительных значений множества.

Что это за зверь такой?

-- Чт дек 29, 2022 15:13:55 --

Maxim19 в сообщении #1575430 писал(а):
Всем здравствуйте, возник вопрос: когда пишут О(1) дополнительной памяти в задачах на алгоритмы, имеют ввиду величину числа?

Я думаю, что имеют в виду объём дополнительной памяти в гигабайтах.

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение29.12.2022, 14:22 
Заслуженный участник
Аватара пользователя


16/07/14
9151
Цюрих
Довольно часто в модели вычислений предполагается, что одна ячейка памяти способна хранить числа порядка максимального встречающегося в задаче (включая размеры массивов и т.д.), и что арифметика на таких числах занимает константное время.

мат-ламер в сообщении #1575476 писал(а):
Что это за зверь такой?
Есть множество чисел, в нём есть положительные числа, просуммировали их и записали куда-то сумму.
мат-ламер в сообщении #1575476 писал(а):
Я думаю, что имеют в виду объём дополнительной памяти в гигабайтах.
В гигабайтах или битах - на асимптотику не влияет.

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение30.12.2022, 02:43 


31/05/22
267
Понятно теперь, спасибо. Но всё же в таких задачах разрешается например число делать таким, чтобы в нём был записан массив? По сути то это всё то же число

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение30.12.2022, 14:47 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Конечно, нет, не разрешается.
Но если у вас O(1) памяти, вы не обязательно должны ограничиваться одним числом.
Можете завести два числа, три, десять, да хоть тысячу, но! Этой тысячи должно хватить на входные данные любого размера: миллиона, миллиарда, $10^{1000}$.

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение31.12.2022, 10:38 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
Такие задачи ставятся всё же с расчётом на некое практическое применение. Соответственно "число" это "ячейка памяти реально возможной ЭВМ". Обойти условие адвокатскими приёмами "используем одно число, но произвольно большой длины, куда записываем все числа" - можно, но неспортивно и практически неприложимо.

 Профиль  
                  
 
 Re: Понятие дополнительной памяти.
Сообщение02.01.2023, 16:04 


31/05/22
267
Теперь понятно, спасибо

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Rex2024


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group