Кіріспе

Алгоритмдік саудада аз уақыт үшін көбірек орын

Компьютер ғылымында кеңістік-уақыт саудасы, сондай-ақ уақыт-жад саудасы немесе алгоритмдік кеңістік-уақыт континуумы деп те аталады, бұл алгоритмнің немесе бағдарламаның көбірек орынды пайдалану арқылы уақытты қысқартуына мүмкіндік беретін жағдай. Мұндағы "орын" дегені берілген міндетті орындау үшін қажетті деректерді сақтау көлемі (RAM, HDD және т.б.), ал "уақыт" – міндетті орындауға жұмсалатын уақыт (есептеу уақыты немесе жауап беру уақыты). Белгілі бір кеңістік-уақыт саудасының тиімділігіне CPU жылдамдығы, жад көлемі сияқты тұрақты және өзгермелі шығындар әсер етеді және оның пайдасы азая береді.

Тарих

Уақыт-жад айырбасының биологиялық қолданылуы жануарлар мінез-құлқының бастапқы кезеңдерінде көрінеді. ДНҚ-да сақталған білімді немесе стимулдарға реакцияны "инстинкт" ретінде кодтау, уақыт өте маңызды жағдайларда "есептеу" қажеттілігін жояды. Компьютерлерде іздеу кестелері ең алғашқы операциялық жүйелерден бері қолданылып келеді. 1980 жылы Мартин Хеллман криптоанализ үшін уақыт-жад айырбасын пайдалануды алғаш ұсынды.

Іздеу кестелері мен қайта есептеу

Кездесетін жағдай – іздеу кестесін пайдаланатын алгоритм: оның іске асылуында кесте толығымен болуы мүмкін, бұл есептеу уақытын қысқартады, бірақ қажетті жад мөлшерін арттырады, немесе кестедегі жазбалар қажет болғанда есептелінеді, бұл есептеу уақытын ұзартуы мүмкін, бірақ жадқа қойылатын талаптарды азайтады.

Деректер қорының индекстері мен кесте сканерлері

Деректер қорын басқару жүйелері деректер қорының индексі дерек құрылымдарын жасау мүмкіндігін ұсынады. Индекстер қосымша орынды пайдалана отырып, іздеу операцияларының жылдамдығын арттырады. Индекстер болмаған жағдайда, қажетті деректерді табу үшін кейде толық кесте шарлау операцияларын орындау қажет болады.

Сығымдалған және сығымдалмаған деректер

Деректерді сақтау мәселесіне кеңістік-уақыт арасалмағын қолдануға болады. Деректер сығылмай сақталса, көбірек орын керек болады, бірақ сығылған деректерге қарағанда қол жеткізу уақыты аз болады (сығылған деректер орынды азайтады, бірақ сығылымды ашу алгоритмін іске қосуға уақыт қажет). Нақты мәселеге байланысты, екі тәсіл де қолданылуы мүмкін. Сонымен қатар, сығылған деректермен тікелей жұмыс істеуге болатын сирек жағдайлар бар, мысалы, сығылған биттік карта индекстерінде, сығылған күйде жұмыс істеу сығылмаған күйден гөрі жылдам болады.

Қайта рендеринг пен сақталған суреттер

Векторлық кескіннің SVG көзін ғана сақтау және оны әрбір бет сұралымында растрлік кескін ретінде көрсету – уақытты кеңістікке сату болар еді; уақыт көбірек жұмсалады, бірақ орын аз болады. Ал бет өзгерген кезде кескінды көрсетіп, көрсетілген кескіндерді сақтау – кеңістікті уақытқа сату; орын көбірек жұмсалады, бірақ уақыт аз болады. Бұл техника жалпы алғанда кэштеу деп аталады.

Кіші код пен циклді ашу

Циклды ашу арқалы үлкен код көлемі жоғары бағдарлама жылдамдығымен алмастырылуы мүмкін. Бұл техника циклдың әрбір итерациясы үшін кодты ұзартады, бірақ әр итерацияның соңында цикл басына қайта оралуға кеткен есептеу уақытын қысқартады.