Пространственно -временной компромисс , также известный как компромисс между временем и памятью или алгоритмический пространственно-временной континуум в информатике, — это случай, когда алгоритм или программа обменивает увеличенное использование пространства на уменьшенное время. Здесь пространство относится к хранилищу данных , потребляемому при выполнении данной задачи ( ОЗУ , жесткий диск и т. д.), а время относится ко времени, потребляемому при выполнении данной задачи ( время вычислений или время отклика ).
Полезность данного компромисса между пространством и временем зависит от связанных с ним постоянных и переменных затрат (например, скорости ЦП , объема памяти) и подвержена убывающей доходности .
Биологическое использование компромиссов между временем и памятью можно увидеть на ранних стадиях поведения животных . Использование сохраненных знаний или кодирование реакций стимулов в качестве «инстинктов» в ДНК позволяет избежать необходимости «вычислений» в критических по времени ситуациях. Что касается компьютеров, то таблицы поиска были реализованы с самых ранних операционных систем. [ необходима цитата ]
В 1980 году Мартин Хеллман впервые предложил использовать компромисс между временем и памятью для криптоанализа . [1]
Распространенной ситуацией является алгоритм, включающий таблицу поиска : реализация может включать всю таблицу, что сокращает время вычислений, но увеличивает объем необходимой памяти, или она может вычислять записи таблицы по мере необходимости, увеличивая время вычислений, но уменьшая требования к памяти.
Системы управления базами данных предлагают возможность создания структур данных индекса базы данных . Индексы повышают скорость операций поиска за счет дополнительного пространства. Без индексов иногда требуются трудоемкие операции полного сканирования таблиц для поиска нужных данных.
Компромисс между пространством и временем может быть применен к проблеме хранения данных. Если данные хранятся в несжатом виде, они занимают больше места, но доступ к ним занимает меньше времени, чем если бы данные хранились в сжатом виде (поскольку сжатие данных уменьшает объем занимаемого ими места, но требуется время для запуска алгоритма распаковки ). В зависимости от конкретного случая задачи, любой из способов является практичным. Существуют также редкие случаи, когда можно напрямую работать со сжатыми данными, например, в случае сжатых индексов битовой карты , где быстрее работать со сжатием, чем без сжатия.
Сохранение только исходного SVG векторного изображения и его рендеринг в виде растрового изображения каждый раз при запросе страницы будет торговать временем за пространство; больше используемого времени, но меньше используемого пространства. Рендеринг изображения при изменении страницы и сохранение рендеринговых изображений будет торговать пространством за время; больше используемого пространства, но меньше используемого времени. Этот метод более известен как кэширование .
Больший размер кода можно обменять на более высокую скорость программы при применении разворачивания цикла . Этот метод делает код длиннее для каждой итерации цикла, но экономит время вычислений, необходимое для перехода к началу цикла в конце каждой итерации.
Алгоритмы, которые также используют компромиссы между пространством и временем, включают: